[Groonga-commit] groonga/grnxx at 872c232 [master] Update ConstantNode to support Vector<T>. (#104).

Back to archive index

susumu.yata null+****@clear*****
Tue Dec 16 10:43:47 JST 2014


susumu.yata	2014-11-17 18:25:19 +0900 (Mon, 17 Nov 2014)

  New Revision: 872c23295388df6649b19fcba5d1fe477dcaab8b
  https://github.com/groonga/grnxx/commit/872c23295388df6649b19fcba5d1fe477dcaab8b

  Message:
    Update ConstantNode to support Vector<T>. (#104).

  Modified files:
    include/grnxx/expression.hpp
    lib/grnxx/impl/expression.cpp
    lib/grnxx/impl/expression.hpp

  Modified: include/grnxx/expression.hpp (+22 -0)
===================================================================
--- include/grnxx/expression.hpp    2014-11-17 18:03:17 +0900 (bb26685)
+++ include/grnxx/expression.hpp    2014-11-17 18:25:19 +0900 (f86b129)
@@ -145,6 +145,17 @@ class Expression {
                         Array<GeoPoint> *results) = 0;
   virtual void evaluate(ArrayCRef<Record> records,
                         Array<Text> *results) = 0;
+  virtual void evaluate(ArrayCRef<Record> records,
+                        Array<Vector<Bool>> *results) = 0;
+  virtual void evaluate(ArrayCRef<Record> records,
+                        Array<Vector<Int>> *results) = 0;
+  virtual void evaluate(ArrayCRef<Record> records,
+                        Array<Vector<Float>> *results) = 0;
+  virtual void evaluate(ArrayCRef<Record> records,
+                        Array<Vector<GeoPoint>> *results) = 0;
+  // TODO
+//  virtual void evaluate(ArrayCRef<Record> records,
+//                        Array<Vector<Text>> *results) = 0;
 
   // Evaluate the expression.
   //
@@ -165,6 +176,17 @@ class Expression {
                         ArrayRef<GeoPoint> results) = 0;
   virtual void evaluate(ArrayCRef<Record> records,
                         ArrayRef<Text> results) = 0;
+  virtual void evaluate(ArrayCRef<Record> records,
+                        ArrayRef<Vector<Bool>> results) = 0;
+  virtual void evaluate(ArrayCRef<Record> records,
+                        ArrayRef<Vector<Int>> results) = 0;
+  virtual void evaluate(ArrayCRef<Record> records,
+                        ArrayRef<Vector<Float>> results) = 0;
+  virtual void evaluate(ArrayCRef<Record> records,
+                        ArrayRef<Vector<GeoPoint>> results) = 0;
+  // TODO
+//  virtual void evaluate(ArrayCRef<Record> records,
+//                        ArrayRef<Vector<Text>> results) = 0;
 };
 
 class ExpressionBuilder {

  Modified: lib/grnxx/impl/expression.cpp (+93 -12)
===================================================================
--- lib/grnxx/impl/expression.cpp    2014-11-17 18:03:17 +0900 (eb648e7)
+++ lib/grnxx/impl/expression.cpp    2014-11-17 18:25:19 +0900 (ff6ab65)
@@ -261,6 +261,36 @@ class ConstantNode<Text> : public TypedNode<Text> {
   String value_;
 };
 
+// TODO: Vector will have ownership in future.
+template <typename T>
+class ConstantNode<Vector<T>> : public TypedNode<Vector<T>> {
+ public:
+  using Value = Vector<T>;
+
+  explicit ConstantNode(const Value &value)
+      : TypedNode<Value>(),
+        value_() {
+    size_t value_size = value.size().value();
+    value_.resize(value_size);
+    for (size_t i = 0; i < value_size; ++i) {
+      value_[i] = value[i];
+    }
+  }
+
+  NodeType node_type() const {
+    return CONSTANT_NODE;
+  }
+
+  void evaluate(ArrayCRef<Record> records, ArrayRef<Value> results) {
+    for (size_t i = 0; i < records.size(); ++i) {
+      results[i] = Value(value_.data(), value_.size());
+    }
+  }
+
+ private:
+  Array<T> value_;
+};
+
 // -- RowIDNode --
 
 class RowIDNode : public TypedNode<Int> {
@@ -1348,6 +1378,32 @@ void Expression::evaluate(ArrayCRef<Record> records,
 }
 
 void Expression::evaluate(ArrayCRef<Record> records,
+                          Array<Vector<Bool>> *results) {
+  _evaluate(records, results);
+}
+
+void Expression::evaluate(ArrayCRef<Record> records,
+                          Array<Vector<Int>> *results) {
+  _evaluate(records, results);
+}
+
+void Expression::evaluate(ArrayCRef<Record> records,
+                          Array<Vector<Float>> *results) {
+  _evaluate(records, results);
+}
+
+void Expression::evaluate(ArrayCRef<Record> records,
+                          Array<Vector<GeoPoint>> *results) {
+  _evaluate(records, results);
+}
+
+// TODO
+//void Expression::evaluate(ArrayCRef<Record> records,
+//                          Array<Vector<Text>> *results) {
+//  _evaluate(records, results);
+//}
+
+void Expression::evaluate(ArrayCRef<Record> records,
                           ArrayRef<Bool> results) {
   _evaluate(records, results);
 }
@@ -1372,6 +1428,31 @@ void Expression::evaluate(ArrayCRef<Record> records,
   _evaluate(records, results);
 }
 
+void Expression::evaluate(ArrayCRef<Record> records,
+                          ArrayRef<Vector<Bool>> results) {
+  _evaluate(records, results);
+}
+
+void Expression::evaluate(ArrayCRef<Record> records,
+                          ArrayRef<Vector<Int>> results) {
+  _evaluate(records, results);
+}
+
+void Expression::evaluate(ArrayCRef<Record> records,
+                          ArrayRef<Vector<Float>> results) {
+  _evaluate(records, results);
+}
+
+void Expression::evaluate(ArrayCRef<Record> records,
+                          ArrayRef<Vector<GeoPoint>> results) {
+  _evaluate(records, results);
+}
+
+//void Expression::evaluate(ArrayCRef<Record> records,
+//                          ArrayRef<Vector<Text>> results) {
+//  _evaluate(records, results);
+//}
+
 template <typename T>
 void Expression::_evaluate(ArrayCRef<Record> records, Array<T> *results) {
   results->resize(records.size());
@@ -1588,18 +1669,18 @@ Node *ExpressionBuilder::create_constant_node(
     case TEXT_DATA: {
       return new ConstantNode<Text>(datum.as_text());
     }
-//    case BOOL_VECTOR_DATA: {
-//      return new ConstantNode<Vector<Bool>>(datum.as_bool_vector());
-//    }
-//    case INT_VECTOR_DATA: {
-//      return new ConstantNode<Vector<Int>>(datum.as_int_vector());
-//    }
-//    case FLOAT_VECTOR_DATA: {
-//      return new ConstantNode<Vector<Float>>(datum.as_float_vector());
-//    }
-//    case GEO_POINT_VECTOR_DATA: {
-//      return new ConstantNode<Vector<GeoPoint>>(datum.as_geo_point_vector());
-//    }
+    case BOOL_VECTOR_DATA: {
+      return new ConstantNode<Vector<Bool>>(datum.as_bool_vector());
+    }
+    case INT_VECTOR_DATA: {
+      return new ConstantNode<Vector<Int>>(datum.as_int_vector());
+    }
+    case FLOAT_VECTOR_DATA: {
+      return new ConstantNode<Vector<Float>>(datum.as_float_vector());
+    }
+    case GEO_POINT_VECTOR_DATA: {
+      return new ConstantNode<Vector<GeoPoint>>(datum.as_geo_point_vector());
+    }
 //    case TEXT_VECTOR_DATA: {
 //      return new ConstantNode<Vector<Text>>(datum.as_text_vector());
 //    }

  Modified: lib/grnxx/impl/expression.hpp (+12 -0)
===================================================================
--- lib/grnxx/impl/expression.hpp    2014-11-17 18:03:17 +0900 (6c05306)
+++ lib/grnxx/impl/expression.hpp    2014-11-17 18:25:19 +0900 (2894886)
@@ -50,12 +50,24 @@ class Expression : public ExpressionInterface {
   void evaluate(ArrayCRef<Record> records, Array<Float> *results);
   void evaluate(ArrayCRef<Record> records, Array<GeoPoint> *results);
   void evaluate(ArrayCRef<Record> records, Array<Text> *results);
+  void evaluate(ArrayCRef<Record> records, Array<Vector<Bool>> *results);
+  void evaluate(ArrayCRef<Record> records, Array<Vector<Int>> *results);
+  void evaluate(ArrayCRef<Record> records, Array<Vector<Float>> *results);
+  void evaluate(ArrayCRef<Record> records, Array<Vector<GeoPoint>> *results);
+  // TODO
+//  void evaluate(ArrayCRef<Record> records, Array<Vector<Text>> *results);
 
   void evaluate(ArrayCRef<Record> records, ArrayRef<Bool> results);
   void evaluate(ArrayCRef<Record> records, ArrayRef<Int> results);
   void evaluate(ArrayCRef<Record> records, ArrayRef<Float> results);
   void evaluate(ArrayCRef<Record> records, ArrayRef<GeoPoint> results);
   void evaluate(ArrayCRef<Record> records, ArrayRef<Text> results);
+  void evaluate(ArrayCRef<Record> records, ArrayRef<Vector<Bool>> results);
+  void evaluate(ArrayCRef<Record> records, ArrayRef<Vector<Int>> results);
+  void evaluate(ArrayCRef<Record> records, ArrayRef<Vector<Float>> results);
+  void evaluate(ArrayCRef<Record> records, ArrayRef<Vector<GeoPoint>> results);
+  // TODO
+//  void evaluate(ArrayCRef<Record> records, ArrayRef<Vector<Text>> results);
 
  private:
   const Table *table_;
-------------- next part --------------
HTML����������������������������...
다운로드 



More information about the Groonga-commit mailing list
Back to archive index