Teuchos Package Browser (Single Doxygen Collection) Version of the Day
Teuchos_StringToIntMap.cpp
Go to the documentation of this file.
00001 // @HEADER
00002 // ***********************************************************************
00003 //
00004 //                    Teuchos: Common Tools Package
00005 //                 Copyright (2004) Sandia Corporation
00006 //
00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00008 // license for use of this work by or on behalf of the U.S. Government.
00009 //
00010 // Redistribution and use in source and binary forms, with or without
00011 // modification, are permitted provided that the following conditions are
00012 // met:
00013 //
00014 // 1. Redistributions of source code must retain the above copyright
00015 // notice, this list of conditions and the following disclaimer.
00016 //
00017 // 2. Redistributions in binary form must reproduce the above copyright
00018 // notice, this list of conditions and the following disclaimer in the
00019 // documentation and/or other materials provided with the distribution.
00020 //
00021 // 3. Neither the name of the Corporation nor the names of the
00022 // contributors may be used to endorse or promote products derived from
00023 // this software without specific prior written permission.
00024 //
00025 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
00026 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00027 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00028 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
00029 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00030 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00031 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00032 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00033 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00034 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00035 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00036 //
00037 // Questions? Contact Michael A. Heroux (maherou@sandia.gov)
00038 //
00039 // ***********************************************************************
00040 // @HEADER
00041 
00042 #include "Teuchos_StringToIntMap.hpp"
00043 
00044 namespace Teuchos {
00045 
00046 StringToIntMap::StringToIntMap(
00047   const std::string& defaultGroupName_in, int n, const char* strings[]
00048   ) : defaultGroupName_(defaultGroupName_in)
00049 {
00050   typedef map_t::value_type val_t;
00051   for( int i = 0; i < n; ++i ) {
00052     const bool unique = map_.insert( val_t( strings[i], i ) ).second;
00053     TEUCHOS_TEST_FOR_EXCEPTION(
00054       !unique, AlreadyExists
00055       ,"Teuchos::StringToIntMap::StringToIntMap(...): "
00056       << "Error, the std::string \"" << strings[i] << "\" is a duplicate for "
00057       << defaultGroupName_ );
00058   }
00059 }
00060 
00061 int StringToIntMap::get( const std::string& option, const std::string& groupName ) const
00062 {
00063   map_t::const_iterator itr = map_.find( option );
00064   TEUCHOS_TEST_FOR_EXCEPTION(
00065     itr == map_.end(), DoesNotExist
00066     ,"Teuchos::StringToIntMap:::get(\""<<option<<"\",...): "
00067     << "Error, the std::string \"" << option << "\" is not recongnised for "
00068     << ( groupName.length() ? groupName : defaultGroupName_ )
00069     << "; valid selections include " << this->validSelections() << "."
00070     );
00071   return (*itr).second; 
00072 }
00073 
00074 // private
00075 
00076 std::string StringToIntMap::validSelections() const
00077 {
00078   std::ostringstream oss;
00079   oss << "{";
00080   map_t::const_iterator itr = map_.begin();
00081   for( int i = 0; itr != map_.end(); ++itr, ++i ) {
00082     if(i > 0)
00083       oss << ",";
00084     oss << "\""<<itr->first<<"\":"<<itr->second;
00085   }
00086   oss << "}";
00087   return oss.str();
00088 }
00089 
00090 } // end namespace Teuchos
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines