#include <iosfwd>
#include <string>
-#include "zypp/IdStringType.h"
+#include "zypp/base/PtrTypes.h"
///////////////////////////////////////////////////////////////////
namespace zypp
-{
- ///////////////////////////////////////////////////////////////////
- /// \class LanguageCode
- /// \brief Language codes (iso639_2/iso639_1).
- ///
- /// In fact the class will not prevent to use a non iso language code.
- /// Just a warning will appear in the log.
+{ /////////////////////////////////////////////////////////////////
+
+ class LanguageCode;
+ inline bool operator==( const LanguageCode & lhs, const LanguageCode & rhs );
+ inline bool operator!=( const LanguageCode & lhs, const LanguageCode & rhs );
+
///////////////////////////////////////////////////////////////////
- class LanguageCode : public IdStringType<LanguageCode>
+ //
+ // CLASS NAME : LanguageCode
+ //
+ /** Language codes (iso639_2/iso639_1).
+ *
+ * In fact the class will not prevent to use a non iso language code.
+ * Just a warning will appear in the log.
+ */
+ class LanguageCode
{
- public:
- /** Default Ctor: \ref noCode */
- LanguageCode();
+ friend std::ostream & operator<<( std::ostream & str, const LanguageCode & obj );
- /** Ctor from string. */
- explicit LanguageCode( IdString str_r );
+ public:
+ /** Implementation */
+ class Impl;
- /** Ctor from string. */
- explicit LanguageCode( const std::string & str_r );
+ public:
+ /** Default ctor */
+ LanguageCode();
- /** Ctor from string. */
- explicit LanguageCode( const char * str_r );
+ /** Ctor taking a string. */
+ explicit
+ LanguageCode( const std::string & code_r );
- /** Dtor */
+ /** Dtor */
~LanguageCode();
public:
/** \name LanguageCode constants. */
//@{
- /** Empty code. */
+ /** No or empty code. */
static const LanguageCode noCode;
- /** Last resort "en". */
- static const LanguageCode enCode;
//@}
public:
- /** Return the language code asString. */
- std::string code() const
- { return std::string(_str); }
+ /** Return the language code. */
+ std::string code() const;
- /** Return the translated language name; if unknown the language code. */
+ /** Return the language name; if not available the language code. */
std::string name() const;
+ /** <tt>*this != noCode</tt>. */
+ inline bool hasCode() const
+ { return *this != noCode; }
+
private:
- friend class IdStringType<LanguageCode>;
- IdString _str;
+ /** Pointer to implementation */
+ RW_pointer<Impl> _pimpl;
};
+ ///////////////////////////////////////////////////////////////////
+
+ /** \relates LanguageCode Stream output */
+ inline std::ostream & operator<<( std::ostream & str, const LanguageCode & obj )
+ { return str << obj.code(); }
+
+ /** Comparison based on string value. */
+ //@{
+ /** \relates LanguageCode */
+ inline bool operator==( const LanguageCode & lhs, const LanguageCode & rhs ) {
+ return( lhs.code() == rhs.code() );
+ }
+ /** \relates LanguageCode */
+ inline bool operator==( const std::string & lhs, const LanguageCode & rhs ) {
+ return( lhs == rhs.code() );
+ }
+ /** \relates LanguageCode */
+ inline bool operator==( const LanguageCode & lhs, const std::string & rhs ) {
+ return( lhs.code() == rhs );
+ }
+
+ /** \relates LanguageCode */
+ inline bool operator!=( const LanguageCode & lhs, const LanguageCode & rhs ) {
+ return( ! operator==( lhs, rhs ) );
+ }
+ /** \relates LanguageCode */
+ inline bool operator!=( const std::string & lhs, const LanguageCode & rhs ) {
+ return( ! operator==( lhs, rhs ) );
+ }
+ /** \relates LanguageCode */
+ inline bool operator!=( const LanguageCode & lhs, const std::string & rhs ) {
+ return( ! operator==( lhs, rhs ) );
+ }
+ //@}
+
+ /////////////////////////////////////////////////////////////////
} // namespace zypp
///////////////////////////////////////////////////////////////////
-ZYPP_DEFINE_ID_HASHABLE( ::zypp::LanguageCode );
-
+///////////////////////////////////////////////////////////////////
+namespace std
+{ /////////////////////////////////////////////////////////////////
+ /** \relates zypp::LanguageCode Default order for std::container based on code string value.*/
+ template<>
+ inline bool less<zypp::LanguageCode>::operator()( const zypp::LanguageCode & lhs, const zypp::LanguageCode & rhs ) const
+ { return lhs.code() < rhs.code(); }
+ /////////////////////////////////////////////////////////////////
+} // namespace std
+///////////////////////////////////////////////////////////////////
#endif // ZYPP_LANGUAGECODE_H