You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by is...@apache.org on 2017/05/31 15:34:55 UTC

ignite git commit: IGNITE-5154: Added RemoteFilter to C++ ContinuosQuery example.

Repository: ignite
Updated Branches:
  refs/heads/master abb9d9428 -> 41dcce7b8


IGNITE-5154: Added RemoteFilter to C++ ContinuosQuery example.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/41dcce7b
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/41dcce7b
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/41dcce7b

Branch: refs/heads/master
Commit: 41dcce7b8adb86e5a053f62c658e36a9c67c35f5
Parents: abb9d94
Author: Igor Sapego <is...@gridgain.com>
Authored: Wed May 31 18:34:21 2017 +0300
Committer: Igor Sapego <is...@gridgain.com>
Committed: Wed May 31 18:34:21 2017 +0300

----------------------------------------------------------------------
 .../src/continuous_query_example.cpp            | 125 ++++++++++++++++++-
 1 file changed, 119 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/41dcce7b/modules/platforms/cpp/examples/continuous-query-example/src/continuous_query_example.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/examples/continuous-query-example/src/continuous_query_example.cpp b/modules/platforms/cpp/examples/continuous-query-example/src/continuous_query_example.cpp
index b08d4b8..2ca3163 100644
--- a/modules/platforms/cpp/examples/continuous-query-example/src/continuous_query_example.cpp
+++ b/modules/platforms/cpp/examples/continuous-query-example/src/continuous_query_example.cpp
@@ -33,14 +33,14 @@ using namespace examples;
 /** Cache name. */
 const char* CACHE_NAME = "cpp_cache_continuous_query";
 
-/*
+/**
  * Listener class.
  */
 template<typename K, typename V>
 class Listener : public event::CacheEntryEventListener<K, V>
 {
 public:
-    /*
+    /**
      * Default constructor.
      */
     Listener()
@@ -65,6 +65,110 @@ public:
     }
 };
 
+/**
+ * Range Filter. Only lets through keys from the specified range.
+ */
+template<typename K, typename V>
+struct RangeFilter : event::CacheEntryEventFilter<int32_t, std::string>
+{
+    /**
+     * Default constructor.
+     */
+    RangeFilter() :
+        rangeBegin(0),
+        rangeEnd(0)
+    {
+        // No-op.
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param from Range beginning. Inclusive.
+     * @param to Range end. Not inclusive.
+     */
+    RangeFilter(const K& from, const K& to) :
+        rangeBegin(from),
+        rangeEnd(to)
+    {
+        // No-op.
+    }
+
+    /**
+     * Destructor.
+     */
+    virtual ~RangeFilter()
+    {
+        // No-op.
+    }
+
+    /**
+     * Event callback.
+     *
+     * @param event Event.
+     * @return True if the event passes filter.
+     */
+    virtual bool Process(const CacheEntryEvent<K, V>& event)
+    {
+        return event.GetKey() >= rangeBegin && event.GetKey() < rangeEnd;
+    }
+
+    /** Beginning of the range. */
+    K rangeBegin;
+
+    /** End of the range. */
+    K rangeEnd;
+};
+
+namespace ignite
+{
+    namespace binary
+    {
+        template<>
+        struct BinaryType< RangeFilter<int32_t, std::string> >
+        {
+            static int32_t GetTypeId()
+            {
+                return GetBinaryStringHashCode("RangeFilter<int32_t,std::string>");
+            }
+
+            static void GetTypeName(std::string& dst)
+            {
+                dst = "RangeFilter<int32_t,std::string>";
+
+            }
+
+            static int32_t GetFieldId(const char* name)
+            {
+                return GetBinaryStringHashCode(name);
+            }
+
+            static bool IsNull(const RangeFilter<int32_t, std::string>&)
+            {
+                return false;
+            }
+
+            static void GetNull(RangeFilter<int32_t, std::string>& dst)
+            {
+                dst = RangeFilter<int32_t, std::string>();
+            }
+
+            static void Write(BinaryWriter& writer, const RangeFilter<int32_t, std::string>& obj)
+            {
+                writer.WriteInt32("rangeBegin", obj.rangeBegin);
+                writer.WriteInt32("rangeEnd", obj.rangeEnd);
+            }
+
+            static void Read(BinaryReader& reader, RangeFilter<int32_t, std::string>& dst)
+            {
+                dst.rangeBegin = reader.ReadInt32("rangeBegin");
+                dst.rangeEnd = reader.ReadInt32("rangeEnd");
+            }
+        };
+    }
+}
+
+
 int main()
 {
     IgniteConfiguration cfg;
@@ -80,6 +184,12 @@ int main()
         std::cout << ">>> Cache continuous query example started." << std::endl;
         std::cout << std::endl;
 
+        // Get binding.
+        IgniteBinding binding = ignite.GetBinding();
+
+        // Registering remote filter.
+        binding.RegisterCacheEntryEventFilter< RangeFilter<int32_t, std::string> >();
+
         // Get cache instance.
         Cache<int32_t, std::string> cache = ignite.GetOrCreateCache<int32_t, std::string>(CACHE_NAME);
 
@@ -97,17 +207,20 @@ int main()
         }
 
         // Declaring listener.
-        Listener<int, std::string> listener;
+        Listener<int32_t, std::string> listener;
+
+        // Declaring filter.
+        RangeFilter<int32_t, std::string> filter(keyCnt, keyCnt + 5);
 
         // Declaring continuous query.
-        continuous::ContinuousQuery<int, std::string> qry(MakeReference(listener));
+        continuous::ContinuousQuery<int32_t, std::string> qry(MakeReference(listener), MakeReference(filter));
 
         {
             // Continous query scope. Query is closed when scope is left.
-            continuous::ContinuousQueryHandle<int, std::string> handle = cache.QueryContinuous(qry);
+            continuous::ContinuousQueryHandle<int32_t, std::string> handle = cache.QueryContinuous(qry);
 
             // Add a few more keys and watch more query notifications.
-            for (int32_t i = keyCnt; i < keyCnt + 5; ++i)
+            for (int32_t i = keyCnt; i < keyCnt + 10; ++i)
             {
                 std::stringstream builder;