libzypp
10.5.0
|
00001 /*---------------------------------------------------------------------\ 00002 | ____ _ __ __ ___ | 00003 | |__ / \ / / . \ . \ | 00004 | / / \ V /| _/ _/ | 00005 | / /__ | | | | | | | 00006 | /_____||_| |_| |_| | 00007 | | 00008 \---------------------------------------------------------------------*/ 00012 #ifndef ZYPP_LOCALE_H 00013 #define ZYPP_LOCALE_H 00014 00015 #include <iosfwd> 00016 00017 #include "zypp/base/PtrTypes.h" 00018 #include "zypp/base/Tr1hash.h" 00019 00020 #include "zypp/IdString.h" 00021 #include "zypp/LanguageCode.h" 00022 #include "zypp/CountryCode.h" 00023 00025 namespace zypp 00026 { 00027 00028 class Locale; 00029 typedef std::tr1::unordered_set<Locale> LocaleSet; 00030 00032 // 00033 // CLASS NAME : Locale 00034 // 00038 class Locale 00039 { 00040 friend std::ostream & operator<<( std::ostream & str, const Locale & obj ); 00041 00042 public: 00044 class Impl; 00045 00046 public: 00048 Locale(); 00049 00051 explicit 00052 Locale( IdString code_r ); 00053 00054 explicit 00055 Locale( const std::string & code_r ); 00056 00057 explicit 00058 Locale( const char * code_r ); 00059 00061 Locale( const LanguageCode & language_r, 00062 const CountryCode & country_r = CountryCode() ); 00063 00065 ~Locale(); 00066 00067 public: 00071 static const Locale noCode; 00073 00074 public: 00076 const LanguageCode & language() const; 00078 const CountryCode & country() const; 00079 00081 std::string code() const; 00082 00084 std::string name() const; 00085 00087 Locale fallback() const; 00088 00089 public: 00090 00099 static Locale bestMatch( const LocaleSet & avLocales_r, const Locale & requested_r = Locale() ); 00100 00101 private: 00103 RW_pointer<Impl> _pimpl; 00104 }; 00106 00108 inline std::ostream & operator<<( std::ostream & str, const Locale & obj ) 00109 { return str << obj.code(); } 00110 00114 inline bool operator==( const Locale & lhs, const Locale & rhs ) { 00115 return( lhs.code() == rhs.code() ); 00116 } 00118 inline bool operator==( const std::string & lhs, const Locale & rhs ) { 00119 return( lhs == rhs.code() ); 00120 } 00122 inline bool operator==( const Locale & lhs, const std::string & rhs ) { 00123 return( lhs.code() == rhs ); 00124 } 00125 00127 inline bool operator!=( const Locale & lhs, const Locale & rhs ) { 00128 return( ! operator==( lhs, rhs ) ); 00129 } 00131 inline bool operator!=( const std::string & lhs, const Locale & rhs ) { 00132 return( ! operator==( lhs, rhs ) ); 00133 } 00135 inline bool operator!=( const Locale & lhs, const std::string & rhs ) { 00136 return( ! operator==( lhs, rhs ) ); 00137 } 00139 00141 } // namespace zypp 00143 00144 namespace std { namespace tr1 { 00146 template<> struct hash< ::zypp::Locale> 00147 { 00148 size_t operator()( const ::zypp::Locale & __s ) const 00149 { return hash<std::string>()(__s.code()); } 00150 }; 00151 }} 00152 00154 namespace std 00155 { 00156 00157 template<> 00158 inline bool less<zypp::Locale>::operator()( const zypp::Locale & lhs, const zypp::Locale & rhs ) const 00159 { return lhs.code() < rhs.code(); } 00161 } // namespace std 00163 #endif // ZYPP_LOCALE_H