susumu.yata
null+****@clear*****
Wed Jul 9 17:10:56 JST 2014
susumu.yata 2014-07-09 17:10:56 +0900 (Wed, 09 Jul 2014) New Revision: 9e6f669f7d9fbf49a46dc45c32fbb235ac01b1b5 https://github.com/groonga/grnxx/commit/9e6f669f7d9fbf49a46dc45c32fbb235ac01b1b5 Message: Use force_*() instead of explicit typecast operators. Modified files: include/grnxx/datum.hpp lib/grnxx/column.cpp lib/grnxx/expression.cpp test/test_grnxx.cpp Modified: include/grnxx/datum.hpp (+6 -9) =================================================================== --- include/grnxx/datum.hpp 2014-07-09 16:27:15 +0900 (d4eefbd) +++ include/grnxx/datum.hpp 2014-07-09 17:10:56 +0900 (8defb80) @@ -34,26 +34,23 @@ class Datum { return type_; } - // TODO: Typecast operators are dangerous. - // These should not be used. - // // Force the specified interpretation. - explicit operator Bool() const { + Bool force_bool() const { return bool_; } - explicit operator Int() const { + Int force_int() const { return int_; } - explicit operator Float() const { + Float force_float() const { return float_; } - explicit operator Time() const { + Time force_time() const { return time_; } - explicit operator GeoPoint() const { + GeoPoint force_geo_point() const { return geo_point_; } - explicit operator Text() const { + Text force_text() const { return text_; } Modified: lib/grnxx/column.cpp (+2 -2) =================================================================== --- lib/grnxx/column.cpp 2014-07-09 16:27:15 +0900 (ae83f49) +++ lib/grnxx/column.cpp 2014-07-09 17:10:56 +0900 (a32f687) @@ -153,7 +153,7 @@ bool BoolColumn::set(Error *error, Int row_id, const Datum &datum) { if (!table_->test_row(error, row_id)) { return false; } - values_[row_id] = static_cast<Bool>(datum); + values_[row_id] = datum.force_bool(); return true; } @@ -218,7 +218,7 @@ bool IntColumn::set(Error *error, Int row_id, const Datum &datum) { if (!table_->test_row(error, row_id)) { return false; } - values_[row_id] = static_cast<Int>(datum); + values_[row_id] = datum.force_int(); return true; } Modified: lib/grnxx/expression.cpp (+2 -4) =================================================================== --- lib/grnxx/expression.cpp 2014-07-09 16:27:15 +0900 (88830bc) +++ lib/grnxx/expression.cpp 2014-07-09 17:10:56 +0900 (dbac606) @@ -326,13 +326,11 @@ bool ExpressionBuilder::push_datum(Error *error, const Datum &datum) { unique_ptr<ExpressionDatumNode> node; switch (datum.type()) { case BOOL_DATA: { - node.reset(new (nothrow) ExpressionBoolDatumNode( - static_cast<Bool>(datum))); + node.reset(new (nothrow) ExpressionBoolDatumNode(datum.force_bool())); break; } case INT_DATA: { - node.reset(new (nothrow) ExpressionIntDatumNode( - static_cast<Int>(datum))); + node.reset(new (nothrow) ExpressionIntDatumNode(datum.force_int())); break; } default: { Modified: test/test_grnxx.cpp (+4 -4) =================================================================== --- test/test_grnxx.cpp 2014-07-09 16:27:15 +0900 (001d90c) +++ test/test_grnxx.cpp 2014-07-09 17:10:56 +0900 (646a877) @@ -226,22 +226,22 @@ void test_column() { assert(bool_column->get(&error, 1, &datum)); assert(datum.type() == grnxx::BOOL_DATA); - assert(!static_cast<grnxx::Bool>(datum)); + assert(!datum.force_bool()); assert(int_column->get(&error, 1, &datum)); assert(datum.type() == grnxx::INT_DATA); - assert(static_cast<grnxx::Int>(datum) == 0); + assert(datum.force_int() == 0); assert(bool_column->set(&error, 1, grnxx::Bool(true))); assert(int_column->set(&error, 1, grnxx::Int(123))); assert(bool_column->get(&error, 1, &datum)); assert(datum.type() == grnxx::BOOL_DATA); - assert(static_cast<grnxx::Bool>(datum)); + assert(datum.force_bool()); assert(int_column->get(&error, 1, &datum)); assert(datum.type() == grnxx::INT_DATA); - assert(static_cast<grnxx::Int>(datum) == 123); + assert(datum.force_int() == 123); } } // namespace -------------- next part -------------- HTML����������������������������...Download