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
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