susumu.yata
null+****@clear*****
Mon Dec 22 16:56:06 JST 2014
susumu.yata 2014-12-22 16:56:06 +0900 (Mon, 22 Dec 2014) New Revision: dcfb256a4ac22a20f983ce119a197e8dc443661d https://github.com/groonga/grnxx/commit/dcfb256a4ac22a20f983ce119a197e8dc443661d Message: Remove branches in loops. (#130) Modified files: lib/grnxx/impl/column/scalar/int.cpp Modified: lib/grnxx/impl/column/scalar/int.cpp (+128 -18) =================================================================== --- lib/grnxx/impl/column/scalar/int.cpp 2014-12-22 16:12:54 +0900 (fe28d0f) +++ lib/grnxx/impl/column/scalar/int.cpp 2014-12-22 16:56:06 +0900 (d8da1b0) @@ -105,17 +105,73 @@ bool Column<Int>::contains(const Datum &datum) const { Int value = parse_datum(datum); size_t valid_size = get_valid_size(); if (value.is_na()) { - for (size_t i = 0; i < valid_size; ++i) { - // TODO: Improve this loop. - if (_get(i).is_na() && table_->_test_row(i)) { - return true; + switch (value_size_) { + case 8: { + for (size_t i = 0; i < valid_size; ++i) { + if ((values_8_[i] == na_value_8()) && table_->_test_row(i)) { + return true; + } + } + break; + } + case 16: { + for (size_t i = 0; i < valid_size; ++i) { + if ((values_16_[i] == na_value_16()) && table_->_test_row(i)) { + return true; + } + } + break; + } + case 32: { + for (size_t i = 0; i < valid_size; ++i) { + if ((values_32_[i] == na_value_32()) && table_->_test_row(i)) { + return true; + } + } + break; + } + default: { + for (size_t i = 0; i < valid_size; ++i) { + if (values_64_[i].is_na() && table_->_test_row(i)) { + return true; + } + } + break; } } } else { - for (size_t i = 0; i < valid_size; ++i) { - // TODO: Improve this loop. - if (_get(i).match(value)) { - return true; + switch (value_size_) { + case 8: { + for (size_t i = 0; i < valid_size; ++i) { + if ((values_8_[i] == value.raw()) && table_->_test_row(i)) { + return true; + } + } + break; + } + case 16: { + for (size_t i = 0; i < valid_size; ++i) { + if ((values_16_[i] == value.raw()) && table_->_test_row(i)) { + return true; + } + } + break; + } + case 32: { + for (size_t i = 0; i < valid_size; ++i) { + if ((values_32_[i] == value.raw()) && table_->_test_row(i)) { + return true; + } + } + break; + } + default: { + for (size_t i = 0; i < valid_size; ++i) { + if (values_64_[i].match(value) && table_->_test_row(i)) { + return true; + } + } + break; } } } @@ -130,19 +186,73 @@ Int Column<Int>::find_one(const Datum &datum) const { Int value = parse_datum(datum); size_t valid_size = get_valid_size(); if (value.is_na()) { - for (size_t i = 0; i < valid_size; ++i) { - // TODO: Improve this loop. - Int stored_value = _get(i); - if (stored_value.is_na() && table_->_test_row(i)) { - return Int(i); + switch (value_size_) { + case 8: { + for (size_t i = 0; i < valid_size; ++i) { + if ((values_8_[i] == na_value_8()) && table_->_test_row(i)) { + return Int(i); + } + } + break; + } + case 16: { + for (size_t i = 0; i < valid_size; ++i) { + if ((values_16_[i] == na_value_16()) && table_->_test_row(i)) { + return Int(i); + } + } + break; + } + case 32: { + for (size_t i = 0; i < valid_size; ++i) { + if ((values_32_[i] == na_value_32()) && table_->_test_row(i)) { + return Int(i); + } + } + break; + } + default: { + for (size_t i = 0; i < valid_size; ++i) { + if (values_64_[i].is_na() && table_->_test_row(i)) { + return Int(i); + } + } + break; } } } else { - for (size_t i = 0; i < valid_size; ++i) { - // TODO: Improve this loop. - Int stored_value = _get(i); - if (stored_value.match(value)) { - return Int(i); + switch (value_size_) { + case 8: { + for (size_t i = 0; i < valid_size; ++i) { + if ((values_8_[i] == value.raw()) && table_->_test_row(i)) { + return Int(i); + } + } + break; + } + case 16: { + for (size_t i = 0; i < valid_size; ++i) { + if ((values_16_[i] == value.raw()) && table_->_test_row(i)) { + return Int(i); + } + } + break; + } + case 32: { + for (size_t i = 0; i < valid_size; ++i) { + if ((values_32_[i] == value.raw()) && table_->_test_row(i)) { + return Int(i); + } + } + break; + } + default: { + for (size_t i = 0; i < valid_size; ++i) { + if (values_64_[i].match(value) && table_->_test_row(i)) { + return Int(i); + } + } + break; } } } -------------- next part -------------- HTML����������������������������... 다운로드