This is an automated email from the ASF dual-hosted git repository. alsay pushed a commit to branch tuple_sketch in repository https://gitbox.apache.org/repos/asf/incubator-datasketches-cpp.git
commit d694163bf2d5e86d0f292cbe2bbc48c74417ea5b Author: AlexanderSaydakov <[email protected]> AuthorDate: Wed Jul 8 22:58:27 2020 -0700 inlining and forwarding --- tuple/include/theta_comparators.hpp | 16 ++++------------ tuple/include/theta_intersection_base.hpp | 2 +- tuple/include/theta_set_difference_base.hpp | 2 +- tuple/include/theta_sketch_experimental.hpp | 6 +++--- tuple/include/theta_union_base.hpp | 2 +- tuple/include/theta_union_experimental.hpp | 2 +- tuple/include/theta_update_sketch_base.hpp | 19 ++++++++----------- tuple/include/tuple_sketch.hpp | 24 ++++++++++++------------ 8 files changed, 31 insertions(+), 42 deletions(-) diff --git a/tuple/include/theta_comparators.hpp b/tuple/include/theta_comparators.hpp index f461b5d..a7520c1 100644 --- a/tuple/include/theta_comparators.hpp +++ b/tuple/include/theta_comparators.hpp @@ -22,24 +22,16 @@ namespace datasketches { -template<typename Entry, typename ExtractKey> +template<typename ExtractKey> struct compare_by_key { - bool operator()(const Entry& a, const Entry& b) const { - return ExtractKey()(a) < ExtractKey()(b); + template<typename Entry> + bool operator()(Entry&& a, Entry&& b) const { + return ExtractKey()(std::forward<Entry>(a)) < ExtractKey()(std::forward<Entry>(b)); } }; // less than -template<typename T> -class less_than { -public: - explicit less_than(const T& value): value(value) {} - bool operator()(const T& value) const { return value < this->value; } -private: - T value; -}; - template<typename Key, typename Entry, typename ExtractKey> class key_less_than { public: diff --git a/tuple/include/theta_intersection_base.hpp b/tuple/include/theta_intersection_base.hpp index f6c748a..3ed7f79 100644 --- a/tuple/include/theta_intersection_base.hpp +++ b/tuple/include/theta_intersection_base.hpp @@ -32,7 +32,7 @@ template< > class theta_intersection_base { public: - using comparator = compare_by_key<Entry, ExtractKey>; + using comparator = compare_by_key<ExtractKey>; theta_intersection_base(uint64_t seed, const Policy& policy); ~theta_intersection_base(); void destroy_objects(); diff --git a/tuple/include/theta_set_difference_base.hpp b/tuple/include/theta_set_difference_base.hpp index 03fe6bb..253fbba 100644 --- a/tuple/include/theta_set_difference_base.hpp +++ b/tuple/include/theta_set_difference_base.hpp @@ -34,7 +34,7 @@ template< > class theta_set_difference_base { public: - using comparator = compare_by_key<Entry, ExtractKey>; + using comparator = compare_by_key<ExtractKey>; using hash_table = theta_update_sketch_base<Entry, ExtractKey, Allocator>; theta_set_difference_base(uint64_t seed); diff --git a/tuple/include/theta_sketch_experimental.hpp b/tuple/include/theta_sketch_experimental.hpp index 7e87b95..fff6623 100644 --- a/tuple/include/theta_sketch_experimental.hpp +++ b/tuple/include/theta_sketch_experimental.hpp @@ -47,7 +47,7 @@ public: uint64_t get_theta64() const { return table_.theta_; } uint32_t get_num_retained() const { return table_.num_entries_; } - void update(uint64_t key); + inline void update(uint64_t key); void update(const void* key, size_t length); void trim(); @@ -56,7 +56,7 @@ public: vector_bytes serialize(unsigned header_size_bytes = 0) const; - using const_iterator = theta_const_iterator<uint64_t, trivial_extract_key<uint64_t>>; + using const_iterator = theta_const_iterator<uint64_t, trivial_extract_key>; const_iterator begin() const; const_iterator end() const; @@ -64,7 +64,7 @@ public: private: enum flags { IS_BIG_ENDIAN, IS_READ_ONLY, IS_EMPTY, IS_COMPACT, IS_ORDERED }; - using theta_table = theta_update_sketch_base<uint64_t, trivial_extract_key<uint64_t>, A>; + using theta_table = theta_update_sketch_base<uint64_t, trivial_extract_key, A>; theta_table table_; theta_sketch_experimental(uint8_t lg_cur_size, uint8_t lg_nom_size, resize_factor rf, float p, uint64_t seed); diff --git a/tuple/include/theta_union_base.hpp b/tuple/include/theta_union_base.hpp index 0cb4005..0b9a1b8 100644 --- a/tuple/include/theta_union_base.hpp +++ b/tuple/include/theta_union_base.hpp @@ -36,7 +36,7 @@ class theta_union_base { public: using hash_table = theta_update_sketch_base<Entry, ExtractKey, Allocator>; using resize_factor = typename hash_table::resize_factor; - using comparator = compare_by_key<Entry, ExtractKey>; + using comparator = compare_by_key<ExtractKey>; theta_union_base(uint8_t lg_cur_size, uint8_t lg_nom_size, resize_factor rf, float p, uint64_t seed, const Policy& policy); diff --git a/tuple/include/theta_union_experimental.hpp b/tuple/include/theta_union_experimental.hpp index a394152..5fc7faf 100644 --- a/tuple/include/theta_union_experimental.hpp +++ b/tuple/include/theta_union_experimental.hpp @@ -40,7 +40,7 @@ template<typename Allocator = std::allocator<uint64_t>> class theta_union_experimental { public: using Entry = uint64_t; - using ExtractKey = trivial_extract_key<uint64_t>; + using ExtractKey = trivial_extract_key; using Sketch = theta_sketch_experimental<Allocator>; using CompactSketch = compact_theta_sketch_experimental<Allocator>; using resize_factor = theta_constants::resize_factor; diff --git a/tuple/include/theta_update_sketch_base.hpp b/tuple/include/theta_update_sketch_base.hpp index f261389..6c1e441 100644 --- a/tuple/include/theta_update_sketch_base.hpp +++ b/tuple/include/theta_update_sketch_base.hpp @@ -41,7 +41,7 @@ template< > struct theta_update_sketch_base { using resize_factor = theta_constants::resize_factor; - using comparator = compare_by_key<Entry, ExtractKey>; + using comparator = compare_by_key<ExtractKey>; theta_update_sketch_base(uint8_t lg_cur_size, uint8_t lg_nom_size, resize_factor rf, float p, uint64_t seed); // TODO: copy and move @@ -49,12 +49,12 @@ struct theta_update_sketch_base { using iterator = Entry*; - uint64_t hash_and_screen(const void* data, size_t length); + inline uint64_t hash_and_screen(const void* data, size_t length); - std::pair<iterator, bool> find(uint64_t key) const; + inline std::pair<iterator, bool> find(uint64_t key) const; template<typename FwdEntry> - void insert(iterator it, FwdEntry&& entry); + inline void insert(iterator it, FwdEntry&& entry); iterator begin() const; iterator end() const; @@ -86,7 +86,7 @@ struct theta_update_sketch_base { static inline uint32_t get_capacity(uint8_t lg_cur_size, uint8_t lg_nom_size); static inline uint32_t get_stride(uint64_t key, uint8_t lg_size); - static std::pair<iterator, bool> find(Entry* entries, uint8_t lg_size, uint64_t key); + static inline std::pair<iterator, bool> find(Entry* entries, uint8_t lg_size, uint64_t key); }; // builder @@ -148,13 +148,10 @@ protected: // key extractors -template<typename T> struct trivial_extract_key { - T& operator()(T& entry) const { - return entry; - } - const T& operator()(const T& entry) const { - return entry; + template<typename T> + auto operator()(T&& entry) const -> decltype(std::forward<T>(entry)) { + return std::forward<T>(entry); } }; diff --git a/tuple/include/tuple_sketch.hpp b/tuple/include/tuple_sketch.hpp index 87d6dc9..5ecb044 100644 --- a/tuple/include/tuple_sketch.hpp +++ b/tuple/include/tuple_sketch.hpp @@ -186,21 +186,21 @@ public: * @param value string to update the sketch with */ template<typename FwdUpdate> - void update(const std::string& key, FwdUpdate&& value); + inline void update(const std::string& key, FwdUpdate&& value); /** * Update this sketch with a given unsigned 64-bit integer. * @param value uint64_t to update the sketch with */ template<typename FwdUpdate> - void update(uint64_t key, FwdUpdate&& value); + inline void update(uint64_t key, FwdUpdate&& value); /** * Update this sketch with a given signed 64-bit integer. * @param value int64_t to update the sketch with */ template<typename FwdUpdate> - void update(int64_t key, FwdUpdate&& value); + inline void update(int64_t key, FwdUpdate&& value); /** * Update this sketch with a given unsigned 32-bit integer. @@ -208,7 +208,7 @@ public: * @param value uint32_t to update the sketch with */ template<typename FwdUpdate> - void update(uint32_t key, FwdUpdate&& value); + inline void update(uint32_t key, FwdUpdate&& value); /** * Update this sketch with a given signed 32-bit integer. @@ -216,7 +216,7 @@ public: * @param value int32_t to update the sketch with */ template<typename FwdUpdate> - void update(int32_t key, FwdUpdate&& value); + inline void update(int32_t key, FwdUpdate&& value); /** * Update this sketch with a given unsigned 16-bit integer. @@ -224,7 +224,7 @@ public: * @param value uint16_t to update the sketch with */ template<typename FwdUpdate> - void update(uint16_t key, FwdUpdate&& value); + inline void update(uint16_t key, FwdUpdate&& value); /** * Update this sketch with a given signed 16-bit integer. @@ -232,7 +232,7 @@ public: * @param value int16_t to update the sketch with */ template<typename FwdUpdate> - void update(int16_t key, FwdUpdate&& value); + inline void update(int16_t key, FwdUpdate&& value); /** * Update this sketch with a given unsigned 8-bit integer. @@ -240,7 +240,7 @@ public: * @param value uint8_t to update the sketch with */ template<typename FwdUpdate> - void update(uint8_t key, FwdUpdate&& value); + inline void update(uint8_t key, FwdUpdate&& value); /** * Update this sketch with a given signed 8-bit integer. @@ -248,7 +248,7 @@ public: * @param value int8_t to update the sketch with */ template<typename FwdUpdate> - void update(int8_t key, FwdUpdate&& value); + inline void update(int8_t key, FwdUpdate&& value); /** * Update this sketch with a given double-precision floating point value. @@ -256,7 +256,7 @@ public: * @param value double to update the sketch with */ template<typename FwdUpdate> - void update(double key, FwdUpdate&& value); + inline void update(double key, FwdUpdate&& value); /** * Update this sketch with a given floating point value. @@ -264,7 +264,7 @@ public: * @param value float to update the sketch with */ template<typename FwdUpdate> - void update(float key, FwdUpdate&& value); + inline void update(float key, FwdUpdate&& value); /** * Update this sketch with given data of any type. @@ -321,7 +321,7 @@ public: using AllocU64 = typename std::allocator_traits<Allocator>::template rebind_alloc<uint64_t>; using AllocBytes = typename std::allocator_traits<Allocator>::template rebind_alloc<uint8_t>; using vector_bytes = std::vector<uint8_t, AllocBytes>; - using comparator = compare_by_key<Entry, ExtractKey>; + using comparator = compare_by_key<ExtractKey>; static const uint8_t SERIAL_VERSION = 3; static const uint8_t SKETCH_TYPE = 3; --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
