susumu.yata
null+****@clear*****
Tue Nov 25 16:48:21 JST 2014
susumu.yata 2014-11-25 16:48:21 +0900 (Tue, 25 Nov 2014) New Revision: b0419d15a600c13a052c646d5cbf2f6cac8a29ae https://github.com/groonga/grnxx/commit/b0419d15a600c13a052c646d5cbf2f6cac8a29ae Message: Add Vector<T>::raw_size(). (#116) Modified files: include/grnxx/data_types/vector/bool.hpp include/grnxx/data_types/vector/float.hpp include/grnxx/data_types/vector/geo_point.hpp include/grnxx/data_types/vector/int.hpp include/grnxx/data_types/vector/text.hpp lib/grnxx/impl/column/vector/bool.cpp lib/grnxx/impl/column/vector/float.cpp lib/grnxx/impl/column/vector/geo_point.cpp lib/grnxx/impl/column/vector/int.cpp lib/grnxx/impl/column/vector/text.cpp lib/grnxx/impl/expression.cpp Modified: include/grnxx/data_types/vector/bool.hpp (+13 -7) =================================================================== --- include/grnxx/data_types/vector/bool.hpp 2014-11-25 16:08:18 +0900 (c9a4409) +++ include/grnxx/data_types/vector/bool.hpp 2014-11-25 16:48:21 +0900 (e7ce613) @@ -22,8 +22,7 @@ class Vector<Bool> { explicit constexpr Vector(NA) : data_(nullptr), size_(NA()) {} Bool operator[](Int i) const { - if (is_na() || (static_cast<uint64_t>(i.raw()) >= - static_cast<uint64_t>(size_.raw()))) { + if (is_na() || (static_cast<size_t>(i.raw()) >= raw_size())) { return Bool::na(); } return data_[i.raw()]; @@ -38,9 +37,12 @@ class Vector<Bool> { 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(); @@ -50,7 +52,7 @@ class Vector<Bool> { Bool operator==(const Vector &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; } @@ -58,7 +60,7 @@ class Vector<Bool> { Bool operator!=(const Vector &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; } @@ -70,7 +72,7 @@ class Vector<Bool> { 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 Vector &rhs) const { if (size_.unmatch(rhs.size_)) { @@ -79,7 +81,7 @@ class Vector<Bool> { 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() { @@ -93,6 +95,10 @@ class Vector<Bool> { return Vector(NA()); } + static constexpr size_t raw_na_size() { + return Int::na().raw(); + } + private: const Bool *data_; Int size_; Modified: include/grnxx/data_types/vector/float.hpp (+13 -7) =================================================================== --- include/grnxx/data_types/vector/float.hpp 2014-11-25 16:08:18 +0900 (8e7edb8) +++ include/grnxx/data_types/vector/float.hpp 2014-11-25 16:48:21 +0900 (2821b7a) @@ -24,8 +24,7 @@ class Vector<Float> { explicit constexpr Vector(NA) : data_(nullptr), size_(NA()) {} Float operator[](Int i) const { - if (is_na() || (static_cast<uint64_t>(i.raw()) >= - static_cast<uint64_t>(size_.raw()))) { + if (is_na() || (static_cast<size_t>(i.raw()) >= raw_size())) { return Float::na(); } return data_[i.raw()]; @@ -40,9 +39,12 @@ class Vector<Float> { 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(); @@ -52,7 +54,7 @@ class Vector<Float> { Bool operator==(const Vector &rhs) const { Bool has_equal_size = (size_ == rhs.size_); if (has_equal_size.is_true()) { - size_t size = size_.raw(); + size_t size = raw_size(); for (size_t i = 0; i < size; ++i) { if ((data_[i].raw() != rhs.data_[i].raw()) && (!data_[i].is_na() || !rhs.data_[i].is_na())) { @@ -66,7 +68,7 @@ class Vector<Float> { Bool operator!=(const Vector &rhs) const { Bool has_not_equal_size = (size_ != rhs.size_); if (has_not_equal_size.is_false()) { - size_t size = size_.raw(); + size_t size = raw_size(); for (size_t i = 0; i < size; ++i) { if ((data_[i].raw() != rhs.data_[i].raw()) && (!data_[i].is_na() || !rhs.data_[i].is_na())) { @@ -85,7 +87,7 @@ class Vector<Float> { return true; } // TODO: This is because raw values are not normalized. - size_t size = size_.raw(); + size_t size = raw_size(); for (size_t i = 0; i < size; ++i) { if (data_[i].unmatch(rhs.data_[i])) { return false; @@ -101,7 +103,7 @@ class Vector<Float> { return false; } // TODO: This is because raw values are not normalized. - size_t size = size_.raw(); + size_t size = raw_size(); for (size_t i = 0; i < size; ++i) { if (data_[i].unmatch(rhs.data_[i])) { return true; @@ -121,6 +123,10 @@ class Vector<Float> { return Vector(NA()); } + static constexpr size_t raw_na_size() { + return Int::na().raw(); + } + private: const Float *data_; Int size_; Modified: include/grnxx/data_types/vector/geo_point.hpp (+13 -9) =================================================================== --- include/grnxx/data_types/vector/geo_point.hpp 2014-11-25 16:08:18 +0900 (5bdbcba) +++ include/grnxx/data_types/vector/geo_point.hpp 2014-11-25 16:48:21 +0900 (a738115) @@ -24,8 +24,7 @@ class Vector<GeoPoint> { explicit constexpr Vector(NA) : data_(nullptr), size_(NA()) {} GeoPoint operator[](Int i) const { - if (is_na() || (static_cast<uint64_t>(i.raw()) >= - static_cast<uint64_t>(size_.raw()))) { + if (is_na() || (static_cast<size_t>(i.raw()) >= raw_size())) { return GeoPoint::na(); } return data_[i.raw()]; @@ -40,9 +39,12 @@ class Vector<GeoPoint> { 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(); @@ -53,7 +55,7 @@ class Vector<GeoPoint> { Bool has_equal_size = (size_ == rhs.size_); if (has_equal_size.is_true()) { return Bool(std::memcmp(data_, rhs.data_, - sizeof(GeoPoint) * size_.raw()) == 0); + sizeof(GeoPoint) * raw_size()) == 0); } return has_equal_size; } @@ -62,7 +64,7 @@ class Vector<GeoPoint> { Bool has_not_equal_size = (size_ != rhs.size_); if (has_not_equal_size.is_false()) { return Bool(std::memcmp(data_, rhs.data_, - sizeof(GeoPoint) * size_.raw()) != 0); + sizeof(GeoPoint) * raw_size()) != 0); } return has_not_equal_size; } @@ -74,8 +76,7 @@ class Vector<GeoPoint> { if (is_na()) { return true; } - return std::memcmp(data_, rhs.data_, - sizeof(GeoPoint) * size_.raw()) == 0; + return std::memcmp(data_, rhs.data_, sizeof(GeoPoint) * raw_size()) == 0; } bool unmatch(const Vector &rhs) const { if (size_.unmatch(rhs.size_)) { @@ -84,8 +85,7 @@ class Vector<GeoPoint> { if (is_na()) { return false; } - return std::memcmp(data_, rhs.data_, - sizeof(GeoPoint) * size_.raw()) != 0; + return std::memcmp(data_, rhs.data_, sizeof(GeoPoint) * raw_size()) != 0; } static constexpr DataType type() { @@ -99,6 +99,10 @@ class Vector<GeoPoint> { return Vector(NA()); } + static constexpr size_t raw_na_size() { + return Int::na().raw(); + } + private: const GeoPoint *data_; Int size_; Modified: include/grnxx/data_types/vector/int.hpp (+13 -7) =================================================================== --- include/grnxx/data_types/vector/int.hpp 2014-11-25 16:08:18 +0900 (4857a1b) +++ include/grnxx/data_types/vector/int.hpp 2014-11-25 16:48:21 +0900 (4570c1c) @@ -22,8 +22,7 @@ class Vector<Int> { explicit constexpr Vector(NA) : data_(nullptr), size_(NA()) {} Int operator[](Int i) const { - if (is_na() || (static_cast<uint64_t>(i.raw()) >= - static_cast<uint64_t>(size_.raw()))) { + if (is_na() || (static_cast<size_t>(i.raw()) >= raw_size())) { return Int::na(); } return data_[i.raw()]; @@ -38,9 +37,12 @@ class Vector<Int> { 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(); @@ -51,7 +53,7 @@ class Vector<Int> { Bool has_equal_size = (size_ == rhs.size_); if (has_equal_size.is_true()) { return Bool(std::memcmp(data_, rhs.data_, - sizeof(Int) * size_.raw()) == 0); + sizeof(Int) * raw_size()) == 0); } return has_equal_size; } @@ -60,7 +62,7 @@ class Vector<Int> { Bool has_not_equal_size = (size_ != rhs.size_); if (has_not_equal_size.is_false()) { return Bool(std::memcmp(data_, rhs.data_, - sizeof(Int) * size_.raw()) != 0); + sizeof(Int) * raw_size()) != 0); } return has_not_equal_size; } @@ -72,7 +74,7 @@ class Vector<Int> { if (is_na()) { return true; } - return std::memcmp(data_, rhs.data_, sizeof(Int) * size_.raw()) == 0; + return std::memcmp(data_, rhs.data_, sizeof(Int) * raw_size()) == 0; } bool unmatch(const Vector &rhs) const { if (size_.unmatch(rhs.size_)) { @@ -81,7 +83,7 @@ class Vector<Int> { if (is_na()) { return false; } - return std::memcmp(data_, rhs.data_, sizeof(Int) * size_.raw()) != 0; + return std::memcmp(data_, rhs.data_, sizeof(Int) * raw_size()) != 0; } static constexpr DataType type() { @@ -95,6 +97,10 @@ class Vector<Int> { return Vector(NA()); } + static constexpr size_t raw_na_size() { + return Int::na().raw(); + } + private: const Int *data_; Int size_; Modified: include/grnxx/data_types/vector/text.hpp (+13 -7) =================================================================== --- include/grnxx/data_types/vector/text.hpp 2014-11-25 16:08:18 +0900 (ee8fc89) +++ include/grnxx/data_types/vector/text.hpp 2014-11-25 16:48:21 +0900 (6a08857) @@ -33,8 +33,7 @@ class Vector<Text> { data_(nullptr) {} Text operator[](Int i) const { - if (is_na() || (static_cast<uint64_t>(i.raw()) >= - static_cast<uint64_t>(size_.raw()))) { + if (is_na() || (static_cast<size_t>(i.raw()) >= raw_size())) { return Text::na(); } if (is_direct_) { @@ -51,9 +50,12 @@ class Vector<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(); @@ -63,7 +65,7 @@ class Vector<Text> { Bool operator==(const Vector &rhs) const { Bool has_equal_size = (size_ == rhs.size_); if (has_equal_size.is_true()) { - size_t size = size_.raw(); + size_t size = raw_size(); for (size_t i = 0; i < size; ++i) { Text lhs_text = (*this)[grnxx::Int(i)]; Text rhs_text = rhs[grnxx::Int(i)]; @@ -80,7 +82,7 @@ class Vector<Text> { Bool operator!=(const Vector &rhs) const { Bool has_not_equal_size = (size_ != rhs.size_); if (has_not_equal_size.is_false()) { - size_t size = size_.raw(); + size_t size = raw_size(); for (size_t i = 0; i < size; ++i) { Text lhs_text = (*this)[grnxx::Int(i)]; Text rhs_text = rhs[grnxx::Int(i)]; @@ -102,7 +104,7 @@ class Vector<Text> { return true; } // TODO: This is because raw values are not normalized. - size_t size = size_.raw(); + size_t size = raw_size(); for (size_t i = 0; i < size; ++i) { // TODO: This can be improved. if (operator[](grnxx::Int(i)).unmatch(rhs[grnxx::Int(i)])) { @@ -119,7 +121,7 @@ class Vector<Text> { return false; } // TODO: This is because raw values are not normalized. - size_t size = size_.raw(); + size_t size = raw_size(); for (size_t i = 0; i < size; ++i) { // TODO: This can be improved. if (operator[](grnxx::Int(i)).unmatch(rhs[grnxx::Int(i)])) { @@ -140,6 +142,10 @@ class Vector<Text> { return Vector(NA()); } + static constexpr size_t raw_na_size() { + return Int::na().raw(); + } + private: struct Header { size_t offset; Modified: lib/grnxx/impl/column/vector/bool.cpp (+1 -1) =================================================================== --- lib/grnxx/impl/column/vector/bool.cpp 2014-11-25 16:08:18 +0900 (a27d78f) +++ lib/grnxx/impl/column/vector/bool.cpp 2014-11-25 16:48:21 +0900 (dd9f156) @@ -52,7 +52,7 @@ void Column<Vector<Bool>>::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); Modified: lib/grnxx/impl/column/vector/float.cpp (+1 -1) =================================================================== --- lib/grnxx/impl/column/vector/float.cpp 2014-11-25 16:08:18 +0900 (d721669) +++ lib/grnxx/impl/column/vector/float.cpp 2014-11-25 16:48:21 +0900 (1dbc067) @@ -52,7 +52,7 @@ void Column<Vector<Float>>::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); Modified: lib/grnxx/impl/column/vector/geo_point.cpp (+1 -1) =================================================================== --- lib/grnxx/impl/column/vector/geo_point.cpp 2014-11-25 16:08:18 +0900 (236b1da) +++ lib/grnxx/impl/column/vector/geo_point.cpp 2014-11-25 16:48:21 +0900 (dc5d9cb) @@ -52,7 +52,7 @@ void Column<Vector<GeoPoint>>::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); Modified: lib/grnxx/impl/column/vector/int.cpp (+2 -2) =================================================================== --- lib/grnxx/impl/column/vector/int.cpp 2014-11-25 16:08:18 +0900 (90a1156) +++ lib/grnxx/impl/column/vector/int.cpp 2014-11-25 16:48:21 +0900 (b5f810a) @@ -35,7 +35,7 @@ void Column<Vector<Int>>::set(Int row_id, const Datum &datum) { return; } if (reference_table_) { - size_t new_value_size = new_value.size().raw(); + size_t new_value_size = new_value.raw_size(); for (size_t i = 0; i < new_value_size; ++i) { if (!reference_table_->test_row(new_value[i])) { throw "Invalid reference"; // TODO @@ -67,7 +67,7 @@ void Column<Vector<Int>>::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); Modified: lib/grnxx/impl/column/vector/text.cpp (+1 -1) =================================================================== --- lib/grnxx/impl/column/vector/text.cpp 2014-11-25 16:08:18 +0900 (d244c67) +++ lib/grnxx/impl/column/vector/text.cpp 2014-11-25 16:48:21 +0900 (89114cc) @@ -51,7 +51,7 @@ void Column<Vector<Text>>::set(Int row_id, const Datum &datum) { // throw; // } // TODO: Error handling. - size_t new_value_size = new_value.size().raw(); + size_t new_value_size = new_value.raw_size(); size_t text_headers_offset = text_headers_.size(); text_headers_.resize(text_headers_offset + new_value_size); size_t total_size = 0; Modified: lib/grnxx/impl/expression.cpp (+4 -4) =================================================================== --- lib/grnxx/impl/expression.cpp 2014-11-25 16:08:18 +0900 (05a5a8e) +++ lib/grnxx/impl/expression.cpp 2014-11-25 16:48:21 +0900 (4784f53) @@ -271,7 +271,7 @@ class ConstantNode<Vector<T>> : public TypedNode<Vector<T>> { explicit ConstantNode(const Value &value) : TypedNode<Value>(), value_() { - size_t value_size = value.size().raw(); + size_t value_size = value.raw_size(); value_.resize(value_size); for (size_t i = 0; i < value_size; ++i) { value_[i] = value[i]; @@ -1409,7 +1409,7 @@ void VectorDereferenceNode<T>::evaluate(ArrayCRef<Record> records, size_t total_size = 0; for (size_t i = 0; i < records.size(); ++i) { if (!this->arg1_values_[i].is_na()) { - total_size += this->arg1_values_[i].size().raw(); + total_size += this->arg1_values_[i].raw_size(); } } temp_records_.resize(block_size_); @@ -1422,7 +1422,7 @@ void VectorDereferenceNode<T>::evaluate(ArrayCRef<Record> records, continue; } Float score = records[i].score; - size_t value_size = this->arg1_values_[i].size().raw(); + size_t value_size = this->arg1_values_[i].raw_size(); for (size_t j = 0; j < value_size; ++j) { temp_records_[count] = Record(this->arg1_values_[i][j], score); ++count; @@ -1442,7 +1442,7 @@ void VectorDereferenceNode<T>::evaluate(ArrayCRef<Record> records, if (this->arg1_values_[i].is_na()) { results[i] = Value::na(); } else { - size_t size = this->arg1_values_[i].size().raw(); + size_t size = this->arg1_values_[i].raw_size(); results[i] = Value(&result_pool[offset], size); offset += size; } -------------- next part -------------- HTML����������������������������... 下載