Overview Tutorial API reference Examples Build Download ZmqMessage 0.1 - 21 Oct 2011

examples/StringFace.hpp

Go to the documentation of this file.
00001 
00009 #ifndef ZMQMESSAGE_EXAMPLES_STRINGFACE_HPP_
00010 #define ZMQMESSAGE_EXAMPLES_STRINGFACE_HPP_
00011 
00017 class StringFace
00018 {
00019 public:
00020   const char*
00021   data() const
00022   {
00023     return p_;
00024   }
00025 
00026   size_t
00027   length() const
00028   {
00029     return len_;
00030   }
00031 
00032   StringFace()
00033       : p_(0), len_(0)
00034   {
00035   }
00036 
00037   StringFace(const char* p, size_t len)
00038       : p_(p), len_(len)
00039   {
00040   }
00041 
00042   bool
00043   operator==(const std::string& s)
00044   {
00045     return s.length() == len_ && !memcmp(p_, s.data(), len_);
00046   }
00047 
00048   bool
00049   operator==(const char* s)
00050   {
00051     return strlen(s) == len_ && !memcmp(p_, s, len_);
00052   }
00053 
00054 private:
00055   const char* p_;
00056   size_t len_;
00057 };
00058 
00059 //used for alphanumeric sorting StringFace objects
00060 int
00061 compare(const StringFace& s1, const StringFace& s2)
00062 {
00063   const size_t LEN = std::min(s1.length(), s2.length());
00064   if (const int RESULT = ::memcmp(s1.data(), s2.data(), LEN))
00065   {
00066     return RESULT;
00067   }
00068   return s1.length() == s2.length() ? 0 : (s1.length() < s2.length() ? -1 : 1);
00069 }
00070 
00071 bool
00072 operator <(const StringFace& s1, const StringFace& s2)
00073 {
00074   return compare(s1, s2) < 0;
00075 }
00076 
00077 #endif /* ZMQMESSAGE_EXAMPLES_STRINGFACE_HPP_ */

ZmqMessage 0.1 — open source software, support@zmqmessage.org