susumu.yata
null+****@clear*****
Thu Dec 4 12:52:42 JST 2014
susumu.yata 2014-12-04 12:52:42 +0900 (Thu, 04 Dec 2014) New Revision: 033f33a50fc9e6c33a57e2192ec304181020afee https://github.com/groonga/grnxx/commit/033f33a50fc9e6c33a57e2192ec304181020afee Message: Reduce the scan range of Column<Int>::contains/find_one(). Modified files: lib/grnxx/impl/column/scalar/int.cpp Modified: lib/grnxx/impl/column/scalar/int.cpp (+6 -4) =================================================================== --- lib/grnxx/impl/column/scalar/int.cpp 2014-12-04 12:26:20 +0900 (1d88056) +++ lib/grnxx/impl/column/scalar/int.cpp 2014-12-04 12:52:42 +0900 (509dcac) @@ -87,14 +87,15 @@ bool Column<Int>::contains(const Datum &datum) const { return indexes_[0]->contains(datum); } Int value = parse_datum(datum); + size_t valid_size = get_valid_size(); if (value.is_na()) { - for (size_t i = 0; i < values_.size(); ++i) { + for (size_t i = 0; i < valid_size; ++i) { if (values_[i].is_na() && table_->_test_row(i)) { return true; } } } else { - for (size_t i = 0; i < values_.size(); ++i) { + for (size_t i = 0; i < valid_size; ++i) { if (values_[i].match(value)) { return true; } @@ -109,14 +110,15 @@ Int Column<Int>::find_one(const Datum &datum) const { return indexes_[0]->find_one(datum); } Int value = parse_datum(datum); + size_t valid_size = get_valid_size(); if (value.is_na()) { - for (size_t i = 0; i < values_.size(); ++i) { + for (size_t i = 0; i < valid_size; ++i) { if (values_[i].is_na() && table_->_test_row(i)) { return Int(i); } } } else { - for (size_t i = 0; i < values_.size(); ++i) { + for (size_t i = 0; i < valid_size; ++i) { if (values_[i].match(value)) { return Int(i); } -------------- next part -------------- HTML����������������������������...Download