00001 #include "StringString.hpp"
00002 #include <iostream>
00003 #include <cassert>
00004 #include <cstring>
00005
00006 namespace aitools {
00007 namespace invertedindex {
00008
00009 const std::string
00010 StringString::classname("StringString");
00011
00012 StringString::StringString()
00013 : len_(0)
00014 {}
00015
00016 StringString::StringString
00017 (const std::string& e1, const std::string& e2)
00018 : e1_(e1),
00019 e2_(e2),
00020 len_(0)
00021 {}
00022
00023 StringString::StringString(const StringString& pair)
00024 : e1_(pair.e1_),
00025 e2_(pair.e2_),
00026 len_(0)
00027 {}
00028
00029 StringString::~StringString()
00030 {}
00031
00032 void
00033 StringString::clear()
00034 {
00035 e1_.clear();
00036 e2_.clear();
00037 }
00038
00039 bool
00040 StringString::operator==(const StringString& pair) const
00041 {
00042 return e1_ == pair.e1_ && e2_ == pair.e2_;
00043 }
00044
00045 bool
00046 StringString::operator!=(const StringString& pair) const
00047 {
00048 return !(*this == pair);
00049 }
00050
00051 bool
00052 StringString::operator>(const StringString& pair) const
00053 {
00054 return score() > pair.score();
00055 }
00056
00057 bool
00058 StringString::operator<(const StringString& pair) const
00059 {
00060 return score() < pair.score();
00061 }
00062
00063 void
00064 StringString::parse(std::istream& is)
00065 {
00066 is >> e1_ >> e2_;
00067 }
00068
00069 void
00070 StringString::print(std::ostream& os) const
00071 {
00072 os << e1_ << ' ' << e2_;
00073 }
00074
00075 double
00076 StringString::score() const
00077 {
00078 return e1_.size();
00079 }
00080
00081 std::string&
00082 StringString::e1()
00083 {
00084 return e1_;
00085 }
00086
00087 const std::string&
00088 StringString::e1() const
00089 {
00090 return e1_;
00091 }
00092
00093 std::string&
00094 StringString::e2()
00095 {
00096 return e2_;
00097 }
00098
00099 const std::string&
00100 StringString::e2() const
00101 {
00102 return e2_;
00103 }
00104
00105 void
00106 StringString::to_bytes(ByteBuffer& buffer) const
00107 {
00108 size_t offset(0);
00109 string_size length(e1_.size());
00110 buffer.resize(sizeof_string_size + e1_.size() + e2_.size());
00111 std::memcpy(buffer.data(), &length, sizeof_string_size);
00112 offset += sizeof_string_size;
00113 std::memcpy(buffer.data() + offset, e1_.data(), e1_.size());
00114 offset += length;
00115 std::memcpy(buffer.data() + offset, e2_.data(), e2_.size());
00116 }
00117
00118 void
00119 StringString::wrap(const char* data, size_t size)
00120 {
00121 assert(data != NULL);
00122 assert(size > sizeof_string_size);
00123 std::memcpy(&len_, data, sizeof_string_size);
00124 e1_.assign(data + sizeof_string_size, len_);
00125 e2_.assign(data + sizeof_string_size + len_,
00126 size - sizeof_string_size - len_);
00127 }
00128
00129 void
00130 StringString::wrap(const ByteBuffer& buffer)
00131 {
00132 Value::wrap(buffer);
00133 }
00134
00135 }
00136 }