Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 9F47A200C86 for ; Wed, 31 May 2017 17:34:57 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 9D662160BCB; Wed, 31 May 2017 15:34:57 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id BD3CD160BBA for ; Wed, 31 May 2017 17:34:56 +0200 (CEST) Received: (qmail 76200 invoked by uid 500); 31 May 2017 15:34:56 -0000 Mailing-List: contact commits-help@ignite.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ignite.apache.org Delivered-To: mailing list commits@ignite.apache.org Received: (qmail 76191 invoked by uid 99); 31 May 2017 15:34:55 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 31 May 2017 15:34:55 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id DAC33DFE5C; Wed, 31 May 2017 15:34:55 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: isapego@apache.org To: commits@ignite.apache.org Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: ignite git commit: IGNITE-5154: Added RemoteFilter to C++ ContinuosQuery example. Date: Wed, 31 May 2017 15:34:55 +0000 (UTC) archived-at: Wed, 31 May 2017 15:34:57 -0000 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 Authored: Wed May 31 18:34:21 2017 +0300 Committer: Igor Sapego 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 class Listener : public event::CacheEntryEventListener { public: - /* + /** * Default constructor. */ Listener() @@ -65,6 +65,110 @@ public: } }; +/** + * Range Filter. Only lets through keys from the specified range. + */ +template +struct RangeFilter : event::CacheEntryEventFilter +{ + /** + * 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& 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 > + { + static int32_t GetTypeId() + { + return GetBinaryStringHashCode("RangeFilter"); + } + + static void GetTypeName(std::string& dst) + { + dst = "RangeFilter"; + + } + + static int32_t GetFieldId(const char* name) + { + return GetBinaryStringHashCode(name); + } + + static bool IsNull(const RangeFilter&) + { + return false; + } + + static void GetNull(RangeFilter& dst) + { + dst = RangeFilter(); + } + + static void Write(BinaryWriter& writer, const RangeFilter& obj) + { + writer.WriteInt32("rangeBegin", obj.rangeBegin); + writer.WriteInt32("rangeEnd", obj.rangeEnd); + } + + static void Read(BinaryReader& reader, RangeFilter& 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 >(); + // Get cache instance. Cache cache = ignite.GetOrCreateCache(CACHE_NAME); @@ -97,17 +207,20 @@ int main() } // Declaring listener. - Listener listener; + Listener listener; + + // Declaring filter. + RangeFilter filter(keyCnt, keyCnt + 5); // Declaring continuous query. - continuous::ContinuousQuery qry(MakeReference(listener)); + continuous::ContinuousQuery qry(MakeReference(listener), MakeReference(filter)); { // Continous query scope. Query is closed when scope is left. - continuous::ContinuousQueryHandle handle = cache.QueryContinuous(qry); + continuous::ContinuousQueryHandle 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;