susumu.yata
null+****@clear*****
Tue Nov 25 16:07:48 JST 2014
susumu.yata 2014-11-25 16:07:48 +0900 (Tue, 25 Nov 2014) New Revision: 08743f37cdea8602350e64b0dd3518197bd00f5f https://github.com/groonga/grnxx/commit/08743f37cdea8602350e64b0dd3518197bd00f5f Message: Add Text::raw_size(). (#116) Modified files: include/grnxx/data_types/scalar/text.hpp lib/grnxx/impl/column/scalar/text.cpp lib/grnxx/impl/column/vector/text.cpp lib/grnxx/impl/expression.cpp Modified: include/grnxx/data_types/scalar/text.hpp (+17 -10) =================================================================== --- include/grnxx/data_types/scalar/text.hpp 2014-11-25 15:20:33 +0900 (9259206) +++ include/grnxx/data_types/scalar/text.hpp 2014-11-25 16:07:48 +0900 (b01e31b) @@ -35,9 +35,12 @@ class Text { constexpr Int size() const { return size_; } + constexpr size_t raw_size() const { + return size_.raw(); + } constexpr bool is_empty() const { - return size_.raw() == 0; + return raw_size() == 0; } constexpr bool is_na() const { return size_.is_na(); @@ -46,14 +49,14 @@ class Text { Bool operator==(const Text &rhs) const { Bool has_equal_size = (size_ == rhs.size_); if (has_equal_size.is_true()) { - return Bool(std::memcmp(data_, rhs.data_, size_.raw()) == 0); + return Bool(std::memcmp(data_, rhs.data_, raw_size()) == 0); } return has_equal_size; } Bool operator!=(const Text &rhs) const { Bool has_not_equal_size = (size_ != rhs.size_); if (has_not_equal_size.is_false()) { - return Bool(std::memcmp(data_, rhs.data_, size_.raw()) != 0); + return Bool(std::memcmp(data_, rhs.data_, raw_size()) != 0); } return has_not_equal_size; } @@ -63,7 +66,7 @@ class Text { return Bool::na(); } size_t min_size = has_less_size.is_true() ? - size_.raw() : rhs.size_.raw(); + raw_size() : rhs.raw_size(); int data_result = std::memcmp(data_, rhs.data_, min_size); return (data_result < 0) ? Bool(true) : ((data_result == 0) ? has_less_size : Bool(false)); @@ -77,7 +80,7 @@ class Text { return Bool::na(); } size_t min_size = has_less_or_equal_size.is_true() ? - size_.raw() : rhs.size_.raw(); + raw_size() : rhs.raw_size(); int data_result = std::memcmp(data_, rhs.data_, min_size); return (data_result < 0) ? Bool(true) : ((data_result == 0) ? has_less_or_equal_size : Bool(false)); @@ -89,15 +92,15 @@ class Text { Bool starts_with(const Text &rhs) const { Bool has_greater_or_equal_size = (size_ >= rhs.size_); if (has_greater_or_equal_size.is_true()) { - return Bool(std::memcmp(data_, rhs.data_, rhs.size_.raw()) == 0); + return Bool(std::memcmp(data_, rhs.data_, rhs.raw_size()) == 0); } return has_greater_or_equal_size; } Bool ends_with(const Text &rhs) const { Bool has_greater_or_equal_size = (size_ >= rhs.size_); if (has_greater_or_equal_size.is_true()) { - return Bool(std::memcmp(data_ + size_.raw() - rhs.size_.raw(), - rhs.data_, rhs.size_.raw()) == 0); + return Bool(std::memcmp(data_ + raw_size() - rhs.raw_size(), + rhs.data_, rhs.raw_size()) == 0); } return has_greater_or_equal_size; } @@ -109,7 +112,7 @@ class Text { if (is_na()) { return true; } - return std::memcmp(data_, rhs.data_, size_.raw()) == 0; + return std::memcmp(data_, rhs.data_, raw_size()) == 0; } bool unmatch(const Text &rhs) const { if (size_.unmatch(rhs.size_)) { @@ -118,7 +121,7 @@ class Text { if (is_na()) { return false; } - return std::memcmp(data_, rhs.data_, size_.raw()) != 0; + return std::memcmp(data_, rhs.data_, raw_size()) != 0; } static constexpr DataType type() { @@ -132,6 +135,10 @@ class Text { return Text(NA()); } + static constexpr size_t raw_na_size() { + return Int::na().raw(); + } + private: const char *data_; Int size_; Modified: lib/grnxx/impl/column/scalar/text.cpp (+3 -3) =================================================================== --- lib/grnxx/impl/column/scalar/text.cpp 2014-11-25 15:20:33 +0900 (27cea84) +++ lib/grnxx/impl/column/scalar/text.cpp 2014-11-25 16:07:48 +0900 (fd0604a) @@ -61,7 +61,7 @@ void Column<Text>::set(Int row_id, const Datum &datum) { // } // TODO: Error handling. size_t offset = bodies_.size(); - size_t size = new_value.size().raw(); + size_t size = new_value.raw_size(); uint64_t header; if (size < 0xFFFF) { bodies_.resize(offset + size); @@ -235,7 +235,7 @@ void Column<Text>::set_key_attribute() { for (size_t i = 0; i < valid_size; ++i) try { Text value = get(grnxx::Int(i)); if (!value.is_na()) { - if (!set.insert(String(value.data(), value.size().raw())).second) { + if (!set.insert(String(value.data(), value.raw_size())).second) { throw "Key duplicate"; // TODO } } @@ -315,7 +315,7 @@ void Column<Text>::set_key(Int row_id, const Datum &key) { // } // TODO: Error handling. size_t offset = bodies_.size(); - size_t size = value.size().raw(); + size_t size = value.raw_size(); uint64_t header; if (size < 0xFFFF) { bodies_.resize(offset + size); Modified: lib/grnxx/impl/column/vector/text.cpp (+3 -3) =================================================================== --- lib/grnxx/impl/column/vector/text.cpp 2014-11-25 15:20:33 +0900 (b06b4c6) +++ lib/grnxx/impl/column/vector/text.cpp 2014-11-25 16:07:48 +0900 (d244c67) @@ -57,7 +57,7 @@ void Column<Vector<Text>>::set(Int row_id, const Datum &datum) { size_t total_size = 0; for (size_t i = 0; i < new_value_size; ++i) { if (!new_value[i].is_na()) { - total_size += new_value[i].size().raw(); + total_size += new_value[i].raw_size(); } } size_t bodies_offset = bodies_.size(); @@ -68,8 +68,8 @@ void Column<Vector<Text>>::set(Int row_id, const Datum &datum) { text_headers_[text_headers_offset + i].size = new_value[i].size(); if (!new_value[i].is_na()) { std::memcpy(&bodies_[bodies_offset], - new_value[i].data(), new_value[i].size().raw()); - bodies_offset += new_value[i].size().raw(); + new_value[i].data(), new_value[i].raw_size()); + bodies_offset += new_value[i].raw_size(); } } } Modified: lib/grnxx/impl/expression.cpp (+1 -1) =================================================================== --- lib/grnxx/impl/expression.cpp 2014-11-25 15:20:33 +0900 (265486f) +++ lib/grnxx/impl/expression.cpp 2014-11-25 16:07:48 +0900 (05a5a8e) @@ -244,7 +244,7 @@ class ConstantNode<Text> : public TypedNode<Text> { explicit ConstantNode(const Value &value) : TypedNode<Value>(), value_() { - value_.assign(value.data(), value.size().raw()); + value_.assign(value.data(), value.raw_size()); } ~ConstantNode() = default; -------------- next part -------------- HTML����������������������������... 下載