Hello community, here is the log from the commit of package mdds for openSUSE:Factory checked in at 2015-03-19 20:47:09 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/mdds (Old) and /work/SRC/openSUSE:Factory/.mdds.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mdds" Changes: -------- --- /work/SRC/openSUSE:Factory/mdds/mdds.changes 2014-12-21 12:02:35.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.mdds.new/mdds.changes 2015-03-19 20:47:10.000000000 +0100 @@ -1,0 +2,7 @@ +Mon Mar 16 11:18:07 UTC 2015 - [email protected] + +- Version bump to 0.12.0 + * more types are possible in segment_tree data structures + (previously only pointers were possible) + +------------------------------------------------------------------- Old: ---- mdds_0.11.2.tar.bz2 New: ---- mdds_0.12.0.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ mdds.spec ++++++ --- /var/tmp/diff_new_pack.9jwUsz/_old 2015-03-19 20:47:11.000000000 +0100 +++ /var/tmp/diff_new_pack.9jwUsz/_new 2015-03-19 20:47:11.000000000 +0100 @@ -1,7 +1,7 @@ # # spec file for package mdds # -# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: mdds -Version: 0.11.2 +Version: 0.12.0 Release: 0 Summary: A collection of multi-dimensional data structure and indexing algorithm License: MIT @@ -49,7 +49,7 @@ %define _docdir %{_defaultdocdir}/%{name}-devel %prep -%setup -n %{name}_%{version} +%setup -q -n %{name}_%{version} %build %configure --docdir=%{_docdir} @@ -59,7 +59,7 @@ make check %{?_smp_mflags} V=1 %install -make DESTDIR=%buildroot install +make DESTDIR=%{buildroot} install %{?_smp_mflags} %files devel %defattr(-,root,root) ++++++ mdds_0.11.2.tar.bz2 -> mdds_0.12.0.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mdds_0.11.2/NEWS new/mdds_0.12.0/NEWS --- old/mdds_0.11.2/NEWS 2014-12-18 21:05:56.000000000 +0100 +++ new/mdds_0.12.0/NEWS 2015-02-06 03:32:45.000000000 +0100 @@ -1,3 +1,14 @@ +mdds 0.12.0 + +* segment_tree + + * remove pointer requirement from value_type to allow non-pointer + type to be stored. + +* multi_type_vector + + * fixed a bug in the equality operator method. + mdds 0.11.2 * multi_type_vector diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mdds_0.11.2/configure new/mdds_0.12.0/configure --- old/mdds_0.11.2/configure 2014-12-18 21:05:56.000000000 +0100 +++ new/mdds_0.12.0/configure 2015-02-06 03:32:45.000000000 +0100 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for mdds 0.11.2. +# Generated by GNU Autoconf 2.69 for mdds 0.12.0. # # Report bugs to <[email protected]>. # @@ -579,8 +579,8 @@ # Identity of this package. PACKAGE_NAME='mdds' PACKAGE_TARNAME='mdds' -PACKAGE_VERSION='0.11.2' -PACKAGE_STRING='mdds 0.11.2' +PACKAGE_VERSION='0.12.0' +PACKAGE_STRING='mdds 0.12.0' PACKAGE_BUGREPORT='[email protected]' PACKAGE_URL='' @@ -1181,7 +1181,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures mdds 0.11.2 to adapt to many kinds of systems. +\`configure' configures mdds 0.12.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1242,7 +1242,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of mdds 0.11.2:";; + short | recursive ) echo "Configuration of mdds 0.12.0:";; esac cat <<\_ACEOF @@ -1335,7 +1335,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -mdds configure 0.11.2 +mdds configure 0.12.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1352,7 +1352,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by mdds $as_me 0.11.2, which was +It was created by mdds $as_me 0.12.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -1701,7 +1701,7 @@ -VERSION=0.11.2 +VERSION=0.12.0 PACKAGE_TARNAME=mdds @@ -2298,7 +2298,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by mdds $as_me 0.11.2, which was +This file was extended by mdds $as_me 0.12.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -2351,7 +2351,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -mdds config.status 0.11.2 +mdds config.status 0.12.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -3455,7 +3455,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by mdds $as_me 0.11.2, which was +This file was extended by mdds $as_me 0.12.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -3508,7 +3508,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -mdds config.status 0.11.2 +mdds config.status 0.12.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -4613,7 +4613,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by mdds $as_me 0.11.2, which was +This file was extended by mdds $as_me 0.12.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -4666,7 +4666,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -mdds config.status 0.11.2 +mdds config.status 0.12.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -5772,7 +5772,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by mdds $as_me 0.11.2, which was +This file was extended by mdds $as_me 0.12.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -5825,7 +5825,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -mdds config.status 0.11.2 +mdds config.status 0.12.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mdds_0.11.2/configure.ac new/mdds_0.12.0/configure.ac --- old/mdds_0.11.2/configure.ac 2014-12-18 21:05:56.000000000 +0100 +++ new/mdds_0.12.0/configure.ac 2015-02-06 03:32:45.000000000 +0100 @@ -1,4 +1,4 @@ -AC_INIT(mdds, 0.11.2, [email protected]) +AC_INIT(mdds, 0.12.0, [email protected]) VERSION=AC_PACKAGE_VERSION AC_SUBST(VERSION) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mdds_0.11.2/include/mdds/multi_type_vector_def.inl new/mdds_0.12.0/include/mdds/multi_type_vector_def.inl --- old/mdds_0.11.2/include/mdds/multi_type_vector_def.inl 2014-12-18 21:05:56.000000000 +0100 +++ new/mdds_0.12.0/include/mdds/multi_type_vector_def.inl 2015-02-06 03:32:45.000000000 +0100 @@ -3736,13 +3736,29 @@ const block* blk1 = *it; const block* blk2 = *it2; - if (!blk1->mp_data) - return blk2->mp_data == NULL; - - if (!blk2->mp_data) - // left is non-empty while right is empty. + if (blk1->m_size != blk2->m_size) + // Block sizes differ. return false; + if (blk1->mp_data) + { + if (!blk2->mp_data) + // left is non-empty while right is empty. + return false; + } + else + { + if (blk2->mp_data) + // left is empty while right is non-empty. + return false; + } + + if (!blk1->mp_data) + { + assert(!blk2->mp_data); + continue; + } + assert(blk1->mp_data && blk2->mp_data); if (!element_block_func::equal_block(*blk1->mp_data, *blk2->mp_data)) return false; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mdds_0.11.2/include/mdds/multi_type_vector_types.hpp new/mdds_0.12.0/include/mdds/multi_type_vector_types.hpp --- old/mdds_0.11.2/include/mdds/multi_type_vector_types.hpp 2014-12-18 21:05:56.000000000 +0100 +++ new/mdds_0.12.0/include/mdds/multi_type_vector_types.hpp 2015-02-06 03:32:45.000000000 +0100 @@ -32,6 +32,8 @@ #include "compat/unique_ptr.hpp" #include "global.hpp" +#include <algorithm> + #ifdef MDDS_MULTI_TYPE_VECTOR_USE_DEQUE #include <deque> #else @@ -40,7 +42,6 @@ #include <boost/noncopyable.hpp> #if defined(MDDS_UNIT_TEST) || defined (MDDS_MULTI_TYPE_VECTOR_DEBUG) -#include <algorithm> #include <iostream> #include <sstream> using std::cout; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mdds_0.11.2/include/mdds/node.hpp new/mdds_0.12.0/include/mdds/node.hpp --- old/mdds_0.11.2/include/mdds/node.hpp 2014-12-18 21:05:56.000000000 +0100 +++ new/mdds_0.12.0/include/mdds/node.hpp 2015-02-06 03:32:45.000000000 +0100 @@ -277,13 +277,12 @@ // The left leaf node is empty. Nothing to build. return NULL; - leaf_node_ptr node1, node2; - node1 = left_leaf_node; + leaf_node_ptr node1 = left_leaf_node; std::vector<nonleaf_node*> node_list; while (true) { - node2 = node1->next; + leaf_node_ptr node2 = node1->next; nonleaf_node* parent_node = make_parent_node(node1.get(), node2.get()); node_list.push_back(parent_node); @@ -329,14 +328,13 @@ std::vector<nonleaf_node*> new_node_list; nonleaf_node* node1 = NULL; - nonleaf_node* node2 = NULL; typename std::vector<nonleaf_node*>::const_iterator it = node_list.begin(); typename std::vector<nonleaf_node*>::const_iterator it_end = node_list.end(); for (bool even_itr = false; it != it_end; ++it, even_itr = !even_itr) { if (even_itr) { - node2 = *it; + nonleaf_node* node2 = *it; nonleaf_node* parent_node = make_parent_node(node1, node2); new_node_list.push_back(parent_node); node1 = NULL; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mdds_0.11.2/include/mdds/rectangle_set.hpp new/mdds_0.12.0/include/mdds/rectangle_set.hpp --- old/mdds_0.11.2/include/mdds/rectangle_set.hpp 2014-12-18 21:05:56.000000000 +0100 +++ new/mdds_0.12.0/include/mdds/rectangle_set.hpp 2015-02-06 03:32:45.000000000 +0100 @@ -81,10 +81,10 @@ return !operator==(r); } }; - typedef _mdds_unordered_map_type<data_type*, rectangle> dataset_type; + typedef _mdds_unordered_map_type<data_type, rectangle> dataset_type; private: typedef segment_tree<key_type, data_type> inner_type; - typedef segment_tree<key_type, inner_type> outer_type; + typedef segment_tree<key_type, inner_type*> outer_type; typedef ::std::pair<key_type, key_type> interval_type; typedef ::boost::ptr_map<interval_type, inner_type> inner_segment_map_type; @@ -167,7 +167,7 @@ * * @return true if a rectangle successfully inserted, false otherwise. */ - bool insert(key_type x1, key_type y1, key_type x2, key_type y2, data_type* data); + bool insert(key_type x1, key_type y1, key_type x2, key_type y2, data_type data); /** * Search and collect all rectangles that contains a given point. @@ -197,7 +197,7 @@ * @param data pointer that points to the rectangle instance you wish to * remove from the set. */ - void remove(data_type* data); + void remove(data_type data); /** * Clear all rectangles stored in the set. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mdds_0.11.2/include/mdds/rectangle_set_def.inl new/mdds_0.12.0/include/mdds/rectangle_set_def.inl --- old/mdds_0.11.2/include/mdds/rectangle_set_def.inl 2014-12-18 21:05:56.000000000 +0100 +++ new/mdds_0.12.0/include/mdds/rectangle_set_def.inl 2015-02-06 03:32:45.000000000 +0100 @@ -79,7 +79,7 @@ } template<typename _Key, typename _Data> -bool rectangle_set<_Key,_Data>::insert(key_type x1, key_type y1, key_type x2, key_type y2, data_type* data) +bool rectangle_set<_Key,_Data>::insert(key_type x1, key_type y1, key_type x2, key_type y2, data_type data) { if (x1 >= x2 || y1 >= y2) { @@ -170,7 +170,7 @@ } template<typename _Key, typename _Data> -void rectangle_set<_Key,_Data>::remove(data_type* data) +void rectangle_set<_Key,_Data>::remove(data_type data) { typename dataset_type::iterator itr_data = m_dataset.find(data); if (itr_data == m_dataset.end()) @@ -265,7 +265,7 @@ typename dataset_type::const_iterator itr_data = m_dataset.begin(), itr_data_end = m_dataset.end(); for (; itr_data != itr_data_end; ++itr_data) { - const data_type* data = itr_data->first; + const data_type data = itr_data->first; typename dataset_type::const_iterator itr_test = expected.find(data); if (itr_test == expected.end()) // Pointer in one container but not in the other. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mdds_0.11.2/include/mdds/segment_tree.hpp new/mdds_0.12.0/include/mdds/segment_tree.hpp --- old/mdds_0.11.2/include/mdds/segment_tree.hpp 2014-12-18 21:05:56.000000000 +0100 +++ new/mdds_0.12.0/include/mdds/segment_tree.hpp 2015-02-06 03:32:45.000000000 +0100 @@ -140,16 +140,16 @@ typedef _Key key_type; typedef _Data data_type; typedef size_t size_type; - typedef ::std::vector<data_type*> search_result_type; + typedef ::std::vector<data_type> search_result_type; #ifdef MDDS_UNIT_TEST struct segment_data { key_type begin_key; key_type end_key; - data_type* pdata; + data_type pdata; - segment_data(key_type _beg, key_type _end, data_type* p) : + segment_data(key_type _beg, key_type _end, data_type p) : begin_key(_beg), end_key(_end), pdata(p) {} bool operator==(const segment_data& r) const @@ -163,9 +163,9 @@ } }; - struct segment_map_printer : public ::std::unary_function< ::std::pair<data_type*, ::std::pair<key_type, key_type> >, void> + struct segment_map_printer : public ::std::unary_function< ::std::pair<data_type, ::std::pair<key_type, key_type> >, void> { - void operator() (const ::std::pair<data_type*, ::std::pair<key_type, key_type> >& r) const + void operator() (const ::std::pair<data_type, ::std::pair<key_type, key_type> >& r) const { using namespace std; cout << r.second.first << "-" << r.second.second << ": " << r.first->name << endl; @@ -174,9 +174,9 @@ #endif public: - typedef ::std::vector<data_type*> data_chain_type; - typedef _mdds_unordered_map_type<data_type*, ::std::pair<key_type, key_type> > segment_map_type; - typedef ::std::map<data_type*, ::std::pair<key_type, key_type> > sorted_segment_map_type; + typedef ::std::vector<data_type> data_chain_type; + typedef _mdds_unordered_map_type<data_type, ::std::pair<key_type, key_type> > segment_map_type; + typedef ::std::map<data_type, ::std::pair<key_type, key_type> > sorted_segment_map_type; struct nonleaf_value_type { @@ -634,7 +634,7 @@ * Note that <i>the caller must manage the life cycle of the * data instance</i>. */ - bool insert(key_type begin_key, key_type end_key, data_type* pdata); + bool insert(key_type begin_key, key_type end_key, data_type pdata); /** * Search the tree and collect all segments that include a specified @@ -670,7 +670,7 @@ * the tree; however, if you have removed lots of segments, you might want * to re-build the tree to shrink its size. */ - void remove(data_type* pdata); + void remove(data_type pdata); /** * Remove all segments data. @@ -724,7 +724,7 @@ void search(key_type point, search_result_base& result) const; typedef ::std::vector<__st::node_base*> node_list_type; - typedef ::boost::ptr_map<data_type*, node_list_type> data_node_map_type; + typedef ::boost::ptr_map<data_type, node_list_type> data_node_map_type; static void create_leaf_node_instances(const ::std::vector<key_type>& keys, node_ptr& left, node_ptr& right); @@ -734,7 +734,7 @@ * record their positions as a list of node pointers. */ void descend_tree_and_mark( - __st::node_base* pnode, data_type* pdata, key_type begin_key, key_type end_key, node_list_type* plist); + __st::node_base* pnode, data_type pdata, key_type begin_key, key_type end_key, node_list_type* plist); void build_leaf_nodes(); @@ -742,13 +742,13 @@ * Go through the list of nodes, and remove the specified data pointer * value from the nodes. */ - void remove_data_from_nodes(node_list_type* plist, const data_type* pdata); - void remove_data_from_chain(data_chain_type& chain, const data_type* pdata); + void remove_data_from_nodes(node_list_type* plist, const data_type pdata); + void remove_data_from_chain(data_chain_type& chain, const data_type pdata); void clear_all_nodes(); #ifdef MDDS_UNIT_TEST - static bool has_data_pointer(const node_list_type& node_list, const data_type* pdata); + static bool has_data_pointer(const node_list_type& node_list, const data_type pdata); static void print_leaf_value(const leaf_value_type& v); #endif @@ -810,10 +810,7 @@ if (itr2 == itr2_end) return false; - if (itr1->first != itr2->first) - return false; - - if (itr1->second != itr2->second) + if (*itr1 != *itr2) return false; } if (itr2 != itr2_end) @@ -846,7 +843,7 @@ data_node_map_type tagged_node_map; for (itr = itr_beg; itr != itr_end; ++itr) { - data_type* pdata = itr->first; + data_type pdata = itr->first; ::std::pair<typename data_node_map_type::iterator, bool> r = tagged_node_map.insert(pdata, new node_list_type); node_list_type* plist = r.first->second; @@ -861,7 +858,7 @@ template<typename _Key, typename _Data> void segment_tree<_Key, _Data>::descend_tree_and_mark( - __st::node_base* pnode, data_type* pdata, key_type begin_key, key_type end_key, node_list_type* plist) + __st::node_base* pnode, data_type pdata, key_type begin_key, key_type end_key, node_list_type* plist) { if (!pnode) return; @@ -960,7 +957,7 @@ } template<typename _Key, typename _Data> -bool segment_tree<_Key, _Data>::insert(key_type begin_key, key_type end_key, data_type* pdata) +bool segment_tree<_Key, _Data>::insert(key_type begin_key, key_type end_key, data_type pdata) { if (begin_key >= end_key) return false; @@ -1025,7 +1022,7 @@ } template<typename _Key, typename _Data> -void segment_tree<_Key, _Data>::remove(data_type* pdata) +void segment_tree<_Key, _Data>::remove(data_type pdata) { using namespace std; @@ -1075,7 +1072,7 @@ } template<typename _Key, typename _Data> -void segment_tree<_Key, _Data>::remove_data_from_nodes(node_list_type* plist, const data_type* pdata) +void segment_tree<_Key, _Data>::remove_data_from_nodes(node_list_type* plist, const data_type pdata) { typename node_list_type::iterator itr = plist->begin(), itr_end = plist->end(); for (; itr != itr_end; ++itr) @@ -1095,7 +1092,7 @@ } template<typename _Key, typename _Data> -void segment_tree<_Key, _Data>::remove_data_from_chain(data_chain_type& chain, const data_type* pdata) +void segment_tree<_Key, _Data>::remove_data_from_chain(data_chain_type& chain, const data_type pdata) { typename data_chain_type::iterator itr = ::std::find(chain.begin(), chain.end(), pdata); if (itr != chain.end()) @@ -1218,7 +1215,7 @@ if (chain1.size() != chain2.size()) return false; - ::std::vector<const data_type*> test1, test2; + ::std::vector<data_type> test1, test2; test1.reserve(chain1.size()); test2.reserve(chain2.size()); copy(chain1.begin(), chain1.end(), back_inserter(test1)); @@ -1267,7 +1264,7 @@ } template<typename _Key, typename _Data> -bool segment_tree<_Key, _Data>::has_data_pointer(const node_list_type& node_list, const data_type* pdata) +bool segment_tree<_Key, _Data>::has_data_pointer(const node_list_type& node_list, const data_type pdata) { using namespace std; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mdds_0.11.2/src/multi_type_vector_test_default.cpp new/mdds_0.12.0/src/multi_type_vector_test_default.cpp --- old/mdds_0.11.2/src/multi_type_vector_test_default.cpp 2014-12-18 21:05:56.000000000 +0100 +++ new/mdds_0.12.0/src/multi_type_vector_test_default.cpp 2015-02-06 03:32:45.000000000 +0100 @@ -1275,6 +1275,38 @@ assert(db1 == db1); assert(db2 == db2); } + + { + // Two containers both consisting of numeric - empty - numeric blocks, + // and the last numeric blocks differ. + + mtv_type db1(5), db2(5); + db1.set(0, 1.1); + db1.set(3, 2.1); + db1.set(4, 2.2); + + db2.set(0, 1.1); + db2.set(3, 2.1); + db2.set(4, 2.3); // different value + + assert(db1 != db2); + } + + { + mtv_type db1(2), db2(2); + db1.set(1, 10.1); + db2.set(1, 10.1); + assert(db1 == db2); + + db2.set(0, string("foo")); + assert(db1 != db2); + + db1.set(0, string("foo")); + assert(db1 == db2); + + db2.set_empty(0, 0); + assert(db1 != db2); + } } void mtv_test_clone() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mdds_0.11.2/src/rectangle_set_test.cpp new/mdds_0.12.0/src/rectangle_set_test.cpp --- old/mdds_0.11.2/src/rectangle_set_test.cpp 2014-12-18 21:05:56.000000000 +0100 +++ new/mdds_0.12.0/src/rectangle_set_test.cpp 2015-02-06 03:32:45.000000000 +0100 @@ -36,6 +36,18 @@ using namespace mdds; using ::boost::ptr_vector; +template<typename T> +struct rm_pointer +{ + typedef T type; +}; + +template<typename T> +struct rm_pointer<T*> +{ + typedef typename rm_pointer<T>::type type; +}; + template<typename _ValueType> struct range { @@ -75,11 +87,11 @@ } template<typename _SetType> -bool check_rectangles(const _SetType& db, const typename _SetType::data_type** expected) +bool check_rectangles(const _SetType& db, const typename _SetType::data_type* expected) { typename _SetType::dataset_type test; size_t i = 0; - const typename _SetType::data_type* data = expected[i++]; + typename _SetType::data_type data = expected[i++]; while (data) { typename _SetType::rectangle rect(data->x1, data->y1, data->x2, data->y2); @@ -107,13 +119,14 @@ { cout << "search result --------------------------------------------------" << endl; cout << "(x,y) = (" << x << "," << y << ")" << endl; - for_each(result.begin(), result.end(), typename _SetType::data_type::printer()); + typedef typename rm_pointer<typename _SetType::data_type>::type type; + for_each(result.begin(), result.end(), typename type::printer()); } template<typename _SetType> bool check_search_result(_SetType& db, typename _SetType::key_type x, typename _SetType::key_type y, - const typename _SetType::data_type** expected) + const typename _SetType::data_type* expected) { typename _SetType::search_result_type result, test; bool success = db.search(x, y, result); @@ -123,17 +136,18 @@ return false; } - sort(result.begin(), result.end(), typename _SetType::data_type::sort_by_name()); + typedef typename rm_pointer<typename _SetType::data_type>::type type; + sort(result.begin(), result.end(), typename type::sort_by_name()); print_search_result<_SetType>(x, y, result); size_t i = 0; - const typename _SetType::data_type* data = expected[i++]; + typename _SetType::data_type data = expected[i++]; while (data) { test.push_back(data); data = expected[i++]; } - sort(test.begin(), test.end(), typename _SetType::data_type::sort_by_name()); + sort(test.begin(), test.end(), typename type::sort_by_name()); return result == test; } @@ -143,7 +157,7 @@ typedef uint32_t value_type; typedef range<value_type> range_type; - typedef rectangle_set<value_type, const range_type> set_type; + typedef rectangle_set<value_type, const range_type*> set_type; set_type db; assert(check_size(db, 0)); @@ -160,7 +174,7 @@ insert_range(db, C); db.dump_rectangles(); { - const set_type::data_type* expected[] = {&A, &B, &C, 0}; + const set_type::data_type expected[] = {&A, &B, &C, 0}; assert(check_rectangles(db, expected)); assert(check_size(db, 3)); } @@ -170,7 +184,7 @@ insert_range(db, F); db.dump_rectangles(); { - const set_type::data_type* expected[] = {&A, &B, &C, &D, &E, &F, 0}; + const set_type::data_type expected[] = {&A, &B, &C, &D, &E, &F, 0}; assert(check_rectangles(db, expected)); assert(check_size(db, 6)); } @@ -181,7 +195,7 @@ insert_range(db, E); db.dump_rectangles(); { - const set_type::data_type* expected[] = {&A, &B, &C, &D, &E, &F, 0}; + const set_type::data_type expected[] = {&A, &B, &C, &D, &E, &F, 0}; assert(check_rectangles(db, expected)); assert(check_size(db, 6)); } @@ -191,7 +205,7 @@ db.remove(&E); db.dump_rectangles(); { - const set_type::data_type* expected[] = {&A, &B, &C, &D, &F, 0}; + const set_type::data_type expected[] = {&A, &B, &C, &D, &F, 0}; assert(check_rectangles(db, expected)); assert(check_size(db, 5)); } @@ -199,7 +213,7 @@ db.remove(&E); db.dump_rectangles(); { - const set_type::data_type* expected[] = {&A, &B, &C, &D, &F, 0}; + const set_type::data_type expected[] = {&A, &B, &C, &D, &F, 0}; assert(check_rectangles(db, expected)); assert(check_size(db, 5)); } @@ -208,7 +222,7 @@ db.remove(&C); db.dump_rectangles(); { - const set_type::data_type* expected[] = {&D, &F, 0}; + const set_type::data_type expected[] = {&D, &F, 0}; assert(check_rectangles(db, expected)); assert(check_size(db, 2)); } @@ -217,7 +231,7 @@ db.remove(&F); db.dump_rectangles(); { - const set_type::data_type* expected[] = {0}; + const set_type::data_type expected[] = {0}; assert(check_rectangles(db, expected)); assert(check_size(db, 0)); } @@ -228,7 +242,7 @@ stack_printer __stack_printer__("::rect_test_search"); typedef uint32_t value_type; typedef range<value_type> range_type; - typedef rectangle_set<value_type, const range_type> set_type; + typedef rectangle_set<value_type, const range_type*> set_type; range_type A(0, 0, 1, 1, "A"); range_type B(0, 0, 2, 2, "B"); @@ -241,7 +255,7 @@ set_type db; { // Search before any data is inserted. - const set_type::data_type* expected[] = {0}; + const set_type::data_type expected[] = {0}; assert(check_search_result<set_type>(db, 0, 0, expected)); } insert_range(db, A); @@ -256,47 +270,47 @@ { // Hits all rectangles. - const set_type::data_type* expected[] = {&A, &B, &C, &D, &E, &F, &G, 0}; + const set_type::data_type expected[] = {&A, &B, &C, &D, &E, &F, &G, 0}; assert(check_search_result<set_type>(db, 0, 0, expected)); } { - const set_type::data_type* expected[] = {&B, &C, &D, &E, &F, &G, 0}; + const set_type::data_type expected[] = {&B, &C, &D, &E, &F, &G, 0}; assert(check_search_result<set_type>(db, 0, 1, expected)); assert(check_search_result<set_type>(db, 1, 0, expected)); assert(check_search_result<set_type>(db, 1, 1, expected)); } { - const set_type::data_type* expected[] = {&C, &D, &E, &F, &G, 0}; + const set_type::data_type expected[] = {&C, &D, &E, &F, &G, 0}; assert(check_search_result<set_type>(db, 0, 2, expected)); assert(check_search_result<set_type>(db, 2, 0, expected)); assert(check_search_result<set_type>(db, 2, 2, expected)); } { - const set_type::data_type* expected[] = {&D, &E, &F, &G, 0}; + const set_type::data_type expected[] = {&D, &E, &F, &G, 0}; assert(check_search_result<set_type>(db, 0, 3, expected)); assert(check_search_result<set_type>(db, 3, 0, expected)); assert(check_search_result<set_type>(db, 3, 3, expected)); } { - const set_type::data_type* expected[] = {&E, &F, &G, 0}; + const set_type::data_type expected[] = {&E, &F, &G, 0}; assert(check_search_result<set_type>(db, 0, 4, expected)); assert(check_search_result<set_type>(db, 4, 0, expected)); assert(check_search_result<set_type>(db, 4, 4, expected)); } { - const set_type::data_type* expected[] = {&F, &G, 0}; + const set_type::data_type expected[] = {&F, &G, 0}; assert(check_search_result<set_type>(db, 0, 5, expected)); assert(check_search_result<set_type>(db, 5, 0, expected)); assert(check_search_result<set_type>(db, 5, 5, expected)); } { - const set_type::data_type* expected[] = {&G, 0}; + const set_type::data_type expected[] = {&G, 0}; assert(check_search_result<set_type>(db, 0, 6, expected)); assert(check_search_result<set_type>(db, 6, 0, expected)); assert(check_search_result<set_type>(db, 6, 6, expected)); } { - const set_type::data_type* expected[] = {0}; + const set_type::data_type expected[] = {0}; assert(check_search_result<set_type>(db, 0, 7, expected)); assert(check_search_result<set_type>(db, 7, 0, expected)); assert(check_search_result<set_type>(db, 7, 7, expected)); @@ -311,47 +325,47 @@ { // Hits all rectangles. - const set_type::data_type* expected[] = {&A, &C, &E, &G, 0}; + const set_type::data_type expected[] = {&A, &C, &E, &G, 0}; assert(check_search_result<set_type>(db, 0, 0, expected)); } { - const set_type::data_type* expected[] = {&C, &E, &G, 0}; + const set_type::data_type expected[] = {&C, &E, &G, 0}; assert(check_search_result<set_type>(db, 0, 1, expected)); assert(check_search_result<set_type>(db, 1, 0, expected)); assert(check_search_result<set_type>(db, 1, 1, expected)); } { - const set_type::data_type* expected[] = {&C, &E, &G, 0}; + const set_type::data_type expected[] = {&C, &E, &G, 0}; assert(check_search_result<set_type>(db, 0, 2, expected)); assert(check_search_result<set_type>(db, 2, 0, expected)); assert(check_search_result<set_type>(db, 2, 2, expected)); } { - const set_type::data_type* expected[] = {&E, &G, 0}; + const set_type::data_type expected[] = {&E, &G, 0}; assert(check_search_result<set_type>(db, 0, 3, expected)); assert(check_search_result<set_type>(db, 3, 0, expected)); assert(check_search_result<set_type>(db, 3, 3, expected)); } { - const set_type::data_type* expected[] = {&E, &G, 0}; + const set_type::data_type expected[] = {&E, &G, 0}; assert(check_search_result<set_type>(db, 0, 4, expected)); assert(check_search_result<set_type>(db, 4, 0, expected)); assert(check_search_result<set_type>(db, 4, 4, expected)); } { - const set_type::data_type* expected[] = {&G, 0}; + const set_type::data_type expected[] = {&G, 0}; assert(check_search_result<set_type>(db, 0, 5, expected)); assert(check_search_result<set_type>(db, 5, 0, expected)); assert(check_search_result<set_type>(db, 5, 5, expected)); } { - const set_type::data_type* expected[] = {&G, 0}; + const set_type::data_type expected[] = {&G, 0}; assert(check_search_result<set_type>(db, 0, 6, expected)); assert(check_search_result<set_type>(db, 6, 0, expected)); assert(check_search_result<set_type>(db, 6, 6, expected)); } { - const set_type::data_type* expected[] = {0}; + const set_type::data_type expected[] = {0}; assert(check_search_result<set_type>(db, 0, 7, expected)); assert(check_search_result<set_type>(db, 7, 0, expected)); assert(check_search_result<set_type>(db, 7, 7, expected)); @@ -363,7 +377,7 @@ stack_printer __stack_printer__("::rect_test_copy_constructor"); typedef int16_t value_type; typedef range<value_type> range_type; - typedef rectangle_set<value_type, const range_type> set_type; + typedef rectangle_set<value_type, const range_type*> set_type; range_type A(0, 0, 1, 1, "A"); range_type B(0, 0, 2, 2, "B"); @@ -388,47 +402,47 @@ { // Hits all rectangles. - const set_type::data_type* expected[] = {&A, &B, &C, &D, &E, &F, &G, 0}; + const set_type::data_type expected[] = {&A, &B, &C, &D, &E, &F, &G, 0}; assert(check_search_result<set_type>(db_copied, 0, 0, expected)); } { - const set_type::data_type* expected[] = {&B, &C, &D, &E, &F, &G, 0}; + const set_type::data_type expected[] = {&B, &C, &D, &E, &F, &G, 0}; assert(check_search_result<set_type>(db_copied, 0, 1, expected)); assert(check_search_result<set_type>(db_copied, 1, 0, expected)); assert(check_search_result<set_type>(db_copied, 1, 1, expected)); } { - const set_type::data_type* expected[] = {&C, &D, &E, &F, &G, 0}; + const set_type::data_type expected[] = {&C, &D, &E, &F, &G, 0}; assert(check_search_result<set_type>(db_copied, 0, 2, expected)); assert(check_search_result<set_type>(db_copied, 2, 0, expected)); assert(check_search_result<set_type>(db_copied, 2, 2, expected)); } { - const set_type::data_type* expected[] = {&D, &E, &F, &G, 0}; + const set_type::data_type expected[] = {&D, &E, &F, &G, 0}; assert(check_search_result<set_type>(db_copied, 0, 3, expected)); assert(check_search_result<set_type>(db_copied, 3, 0, expected)); assert(check_search_result<set_type>(db_copied, 3, 3, expected)); } { - const set_type::data_type* expected[] = {&E, &F, &G, 0}; + const set_type::data_type expected[] = {&E, &F, &G, 0}; assert(check_search_result<set_type>(db_copied, 0, 4, expected)); assert(check_search_result<set_type>(db_copied, 4, 0, expected)); assert(check_search_result<set_type>(db_copied, 4, 4, expected)); } { - const set_type::data_type* expected[] = {&F, &G, 0}; + const set_type::data_type expected[] = {&F, &G, 0}; assert(check_search_result<set_type>(db_copied, 0, 5, expected)); assert(check_search_result<set_type>(db_copied, 5, 0, expected)); assert(check_search_result<set_type>(db_copied, 5, 5, expected)); } { - const set_type::data_type* expected[] = {&G, 0}; + const set_type::data_type expected[] = {&G, 0}; assert(check_search_result<set_type>(db_copied, 0, 6, expected)); assert(check_search_result<set_type>(db_copied, 6, 0, expected)); assert(check_search_result<set_type>(db_copied, 6, 6, expected)); } { - const set_type::data_type* expected[] = {0}; + const set_type::data_type expected[] = {0}; assert(check_search_result<set_type>(db_copied, 0, 7, expected)); assert(check_search_result<set_type>(db_copied, 7, 0, expected)); assert(check_search_result<set_type>(db_copied, 7, 7, expected)); @@ -437,7 +451,7 @@ check_size(db_copied, 0); { // There is no rectangle left, hence the search result should be empty. - const set_type::data_type* expected[] = {0}; + const set_type::data_type expected[] = {0}; assert(check_search_result<set_type>(db_copied, 0, 0, expected)); } @@ -458,14 +472,14 @@ insert_range(db_copied, G1); db_copied.dump_rectangles(); { - const set_type::data_type* expected[] = {&A1, &B1, &C1, &D1, &E1, &F1, &G1, 0}; + const set_type::data_type expected[] = {&A1, &B1, &C1, &D1, &E1, &F1, &G1, 0}; assert(check_search_result<set_type>(db_copied, 0, 0, expected)); } { // Check against the origintal dataset, to ensure modification of the // copy does not modify the original. - const set_type::data_type* expected[] = {&A, &B, &C, &D, &E, &F, &G, 0}; + const set_type::data_type expected[] = {&A, &B, &C, &D, &E, &F, &G, 0}; assert(check_search_result<set_type>(db, 0, 0, expected)); } } @@ -474,7 +488,7 @@ { typedef int16_t value_type; typedef range<value_type> range_type; - typedef rectangle_set<value_type, const range_type> set_type; + typedef rectangle_set<value_type, const range_type*> set_type; range_type A(0, 0, 1, 1, "A"); range_type B(0, 0, 2, 2, "B"); @@ -499,47 +513,47 @@ { // Hits all rectangles. - const set_type::data_type* expected[] = {&A, &B, &C, &D, &E, &F, &G, 0}; + const set_type::data_type expected[] = {&A, &B, &C, &D, &E, &F, &G, 0}; assert(check_search_result<set_type>(db_assigned, 0, 0, expected)); } { - const set_type::data_type* expected[] = {&B, &C, &D, &E, &F, &G, 0}; + const set_type::data_type expected[] = {&B, &C, &D, &E, &F, &G, 0}; assert(check_search_result<set_type>(db_assigned, 0, 1, expected)); assert(check_search_result<set_type>(db_assigned, 1, 0, expected)); assert(check_search_result<set_type>(db_assigned, 1, 1, expected)); } { - const set_type::data_type* expected[] = {&C, &D, &E, &F, &G, 0}; + const set_type::data_type expected[] = {&C, &D, &E, &F, &G, 0}; assert(check_search_result<set_type>(db_assigned, 0, 2, expected)); assert(check_search_result<set_type>(db_assigned, 2, 0, expected)); assert(check_search_result<set_type>(db_assigned, 2, 2, expected)); } { - const set_type::data_type* expected[] = {&D, &E, &F, &G, 0}; + const set_type::data_type expected[] = {&D, &E, &F, &G, 0}; assert(check_search_result<set_type>(db_assigned, 0, 3, expected)); assert(check_search_result<set_type>(db_assigned, 3, 0, expected)); assert(check_search_result<set_type>(db_assigned, 3, 3, expected)); } { - const set_type::data_type* expected[] = {&E, &F, &G, 0}; + const set_type::data_type expected[] = {&E, &F, &G, 0}; assert(check_search_result<set_type>(db_assigned, 0, 4, expected)); assert(check_search_result<set_type>(db_assigned, 4, 0, expected)); assert(check_search_result<set_type>(db_assigned, 4, 4, expected)); } { - const set_type::data_type* expected[] = {&F, &G, 0}; + const set_type::data_type expected[] = {&F, &G, 0}; assert(check_search_result<set_type>(db_assigned, 0, 5, expected)); assert(check_search_result<set_type>(db_assigned, 5, 0, expected)); assert(check_search_result<set_type>(db_assigned, 5, 5, expected)); } { - const set_type::data_type* expected[] = {&G, 0}; + const set_type::data_type expected[] = {&G, 0}; assert(check_search_result<set_type>(db_assigned, 0, 6, expected)); assert(check_search_result<set_type>(db_assigned, 6, 0, expected)); assert(check_search_result<set_type>(db_assigned, 6, 6, expected)); } { - const set_type::data_type* expected[] = {0}; + const set_type::data_type expected[] = {0}; assert(check_search_result<set_type>(db_assigned, 0, 7, expected)); assert(check_search_result<set_type>(db_assigned, 7, 0, expected)); assert(check_search_result<set_type>(db_assigned, 7, 7, expected)); @@ -548,7 +562,7 @@ check_size(db_assigned, 0); { // There is no rectangle left, hence the search result should be empty. - const set_type::data_type* expected[] = {0}; + const set_type::data_type expected[] = {0}; assert(check_search_result<set_type>(db_assigned, 0, 0, expected)); } @@ -569,21 +583,21 @@ insert_range(db_assigned, G1); db_assigned.dump_rectangles(); { - const set_type::data_type* expected[] = {&A1, &B1, &C1, &D1, &E1, &F1, &G1, 0}; + const set_type::data_type expected[] = {&A1, &B1, &C1, &D1, &E1, &F1, &G1, 0}; assert(check_search_result<set_type>(db_assigned, 0, 0, expected)); } { // Check against the origintal dataset, to ensure modification of the // copy does not modify the original. - const set_type::data_type* expected[] = {&A, &B, &C, &D, &E, &F, &G, 0}; + const set_type::data_type expected[] = {&A, &B, &C, &D, &E, &F, &G, 0}; assert(check_search_result<set_type>(db, 0, 0, expected)); } db_assigned = db; { // Hits all rectangles once again after reverting to the original data set. - const set_type::data_type* expected[] = {&A, &B, &C, &D, &E, &F, &G, 0}; + const set_type::data_type expected[] = {&A, &B, &C, &D, &E, &F, &G, 0}; assert(check_search_result<set_type>(db_assigned, 0, 0, expected)); } } @@ -594,7 +608,7 @@ typedef int16_t value_type; typedef range<value_type> range_type; - typedef rectangle_set<value_type, const range_type> set_type; + typedef rectangle_set<value_type, const range_type*> set_type; range_type A(0, 0, 1, 1, "A"); range_type B(0, 0, 2, 2, "B"); @@ -634,7 +648,7 @@ stack_printer __stack_printer__("::rect_test_perf_insertion_fixed_x"); typedef size_t value_type; typedef range<value_type> range_type; - typedef rectangle_set<value_type, const range_type> set_type; + typedef rectangle_set<value_type, const range_type*> set_type; size_t data_count = 1000000; cout << "data count: " << data_count << endl; @@ -758,7 +772,7 @@ stack_printer __stack_printer__("::rect_test_perf_insertion_fixed_y"); typedef size_t value_type; typedef range<value_type> range_type; - typedef rectangle_set<value_type, const range_type> set_type; + typedef rectangle_set<value_type, const range_type*> set_type; size_t data_count = 100000; cout << "data count: " << data_count << endl; @@ -883,7 +897,7 @@ typedef uint32_t value_type; typedef range<value_type> range_type; - typedef rectangle_set<value_type, const range_type> set_type; + typedef rectangle_set<value_type, const range_type*> set_type; range_type A(0, 0, 1, 1, "A"); range_type B(0, 0, 2, 2, "B"); @@ -912,7 +926,7 @@ void rect_test_invalid_range() { stack_printer __stack_printer__("::rect_test_invalid_range"); - typedef rectangle_set<int, string> set_type; + typedef rectangle_set<int, string*> set_type; string A("A"); int ranges[][4] = { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mdds_0.11.2/src/segment_tree_test.cpp new/mdds_0.12.0/src/segment_tree_test.cpp --- old/mdds_0.11.2/src/segment_tree_test.cpp 2014-12-18 21:05:56.000000000 +0100 +++ new/mdds_0.12.0/src/segment_tree_test.cpp 2015-02-06 03:32:45.000000000 +0100 @@ -90,7 +90,7 @@ template<typename key_type, typename data_type> bool check_leaf_nodes( const segment_tree<key_type, data_type>& db, - const key_type* keys, data_type** data_chain, size_t key_size) + const key_type* keys, data_type* data_chain, size_t key_size) { typedef segment_tree<key_type, data_type> st_type; vector<typename st_type::leaf_node_check> checks; @@ -100,7 +100,7 @@ { typename st_type::leaf_node_check c; c.key = keys[i]; - data_type* p = data_chain[dcid]; + data_type p = data_chain[dcid]; while (p) { c.data_chain.push_back(p); @@ -114,11 +114,11 @@ } template<typename data_type> -bool check_against_expected(const list<const data_type*>& test, data_type** expected) +bool check_against_expected(const list<data_type>& test, data_type* expected) { size_t i = 0; - data_type* p = expected[i++]; - typename list<const data_type*>::const_iterator itr = test.begin(), itr_end = test.end(); + data_type p = expected[i++]; + typename list<data_type>::const_iterator itr = test.begin(), itr_end = test.end(); while (p) { if (itr == itr_end) @@ -147,12 +147,12 @@ bool check_search_result_only( const segment_tree<key_type, data_type>& db, const typename segment_tree<key_type, data_type>::search_result_type& result, - key_type key, data_type** expected) + key_type key, data_type* expected) { cout << "search key: " << key << " "; typedef typename segment_tree<key_type, data_type>::search_result_type search_result_type; - list<const data_type*> test; + list<data_type> test; copy(result.begin(), result.end(), back_inserter(test)); test.sort(test_data::sort_by_name()); @@ -169,7 +169,7 @@ template<typename key_type, typename data_type> bool check_search_result( const segment_tree<key_type, data_type>& db, - key_type key, data_type** expected) + key_type key, data_type* expected) { cout << "search key: " << key << " "; @@ -182,13 +182,13 @@ template<typename key_type, typename data_type> bool check_search_result_iterator( const segment_tree<key_type, data_type>& db, - key_type key, data_type** expected) + key_type key, data_type* expected) { cout << "search key: " << key << " "; typedef segment_tree<key_type, data_type> db_type; typename db_type::search_result result = db.search(key); - list<const data_type*> test; + list<data_type> test; copy(result.begin(), result.end(), back_inserter(test)); test.sort(test_data::sort_by_name()); @@ -205,7 +205,7 @@ typedef long key_type; typedef test_data data_type; - typedef segment_tree<key_type, data_type> db_type; + typedef segment_tree<key_type, data_type*> db_type; db_type db; data_type A("A"), B("B"), C("C"), D("D"), E("E"), F("F"), G("G"); @@ -481,7 +481,7 @@ typedef long key_type; typedef test_data data_type; - typedef segment_tree<key_type, data_type> db_type; + typedef segment_tree<key_type, data_type*> db_type; db_type db; data_type A("A"), B("B"), C("C"), D("D"), E("E"), F("F"), G("G"); @@ -532,7 +532,7 @@ typedef uint32_t key_type; typedef test_data data_type; - typedef segment_tree<key_type, data_type> db_type; + typedef segment_tree<key_type, data_type*> db_type; data_type A("A"), B("B"), C("C"), D("D"), E("E"), F("F"), G("G"); { @@ -562,7 +562,7 @@ typedef uint8_t key_type; typedef test_data data_type; - typedef segment_tree<key_type, data_type> db_type; + typedef segment_tree<key_type, data_type*> db_type; data_type A("A"), B("B"), C("C"), D("D"), E("E"), F("F"), G("G"); @@ -607,7 +607,7 @@ typedef short key_type; typedef test_data data_type; - typedef segment_tree<key_type, data_type> db_type; + typedef segment_tree<key_type, data_type*> db_type; data_type A("A"), B("B"), C("C"), D("D"), E("E"), F("F"), G("G"); @@ -632,7 +632,7 @@ typedef int16_t key_type; typedef test_data data_type; - typedef segment_tree<key_type, data_type> db_type; + typedef segment_tree<key_type, data_type*> db_type; for (key_type data_count = 10; data_count < 20; ++data_count) { @@ -674,7 +674,7 @@ typedef uint32_t key_type; typedef test_data data_type; - typedef segment_tree<key_type, data_type> db_type; + typedef segment_tree<key_type, data_type*> db_type; key_type data_count = 1000000; @@ -819,7 +819,7 @@ typedef uint16_t key_type; typedef test_data data_type; - typedef segment_tree<key_type, data_type> db_type; + typedef segment_tree<key_type, data_type*> db_type; data_type A("A"), B("B"), C("C"), D("D"), E("E"), F("F"), G("G"); @@ -878,7 +878,7 @@ typedef uint16_t key_type; typedef test_data data_type; - typedef segment_tree<key_type, data_type> db_type; + typedef segment_tree<key_type, data_type*> db_type; data_type A("A"), B("B"), C("C"), D("D"), E("E"), F("F"), G("G"); db_type db; @@ -894,43 +894,43 @@ db.dump_leaf_nodes(); { - db_type::data_type* expected[] = {&A, &B, &C, &D, &E, &F, &G, 0}; - bool success = check_search_result<key_type, data_type>(db, 0, expected); + db_type::data_type expected[] = {&A, &B, &C, &D, &E, &F, &G, 0}; + bool success = check_search_result<key_type, data_type*>(db, 0, expected); assert(success); } { - db_type::data_type* expected[] = {&B, &C, &D, &E, &F, &G, 0}; - bool success = check_search_result<key_type, data_type>(db, 1, expected); + db_type::data_type expected[] = {&B, &C, &D, &E, &F, &G, 0}; + bool success = check_search_result<key_type, data_type*>(db, 1, expected); assert(success); } { - db_type::data_type* expected[] = {&C, &D, &E, &F, &G, 0}; - bool success = check_search_result<key_type, data_type>(db, 2, expected); + db_type::data_type expected[] = {&C, &D, &E, &F, &G, 0}; + bool success = check_search_result<key_type, data_type*>(db, 2, expected); assert(success); } { - db_type::data_type* expected[] = {&D, &E, &F, &G, 0}; - bool success = check_search_result<key_type, data_type>(db, 3, expected); + db_type::data_type expected[] = {&D, &E, &F, &G, 0}; + bool success = check_search_result<key_type, data_type*>(db, 3, expected); assert(success); } { - db_type::data_type* expected[] = {&E, &F, &G, 0}; - bool success = check_search_result<key_type, data_type>(db, 4, expected); + db_type::data_type expected[] = {&E, &F, &G, 0}; + bool success = check_search_result<key_type, data_type*>(db, 4, expected); assert(success); } { - db_type::data_type* expected[] = {&F, &G, 0}; - bool success = check_search_result<key_type, data_type>(db, 5, expected); + db_type::data_type expected[] = {&F, &G, 0}; + bool success = check_search_result<key_type, data_type*>(db, 5, expected); assert(success); } { - db_type::data_type* expected[] = {&G, 0}; - bool success = check_search_result<key_type, data_type>(db, 6, expected); + db_type::data_type expected[] = {&G, 0}; + bool success = check_search_result<key_type, data_type*>(db, 6, expected); assert(success); } { - db_type::data_type* expected[] = {0}; - bool success = check_search_result<key_type, data_type>(db, 7, expected); + db_type::data_type expected[] = {0}; + bool success = check_search_result<key_type, data_type*>(db, 7, expected); assert(success); } } @@ -941,7 +941,7 @@ typedef uint16_t key_type; typedef test_data data_type; - typedef segment_tree<key_type, data_type> db_type; + typedef segment_tree<key_type, data_type*> db_type; db_type db; db.build_tree(); @@ -959,7 +959,7 @@ stack_printer __stack_printer__("::st_test_search_iterator"); typedef uint16_t key_type; typedef test_data data_type; - typedef segment_tree<key_type, data_type> db_type; + typedef segment_tree<key_type, data_type*> db_type; data_type A("A"), B("B"), C("C"), D("D"), E("E"), F("F"), G("G"); db_type db; @@ -1013,7 +1013,7 @@ typedef uint16_t key_type; typedef test_data data_type; - typedef segment_tree<key_type, data_type> db_type; + typedef segment_tree<key_type, data_type*> db_type; data_type A("A"), B("B"), C("C"), D("D"), E("E"), F("F"), G("G"); db_type db; @@ -1028,42 +1028,42 @@ { data_type* expected[] = {&A, &B, &C, &D, &E, &F, &G, 0}; - bool success = check_search_result_iterator<key_type, data_type>(db, 0, expected); + bool success = check_search_result_iterator<key_type, data_type*>(db, 0, expected); assert(success); } { data_type* expected[] = {&B, &C, &D, &E, &F, &G, 0}; - bool success = check_search_result_iterator<key_type, data_type>(db, 1, expected); + bool success = check_search_result_iterator<key_type, data_type*>(db, 1, expected); assert(success); } { data_type* expected[] = {&C, &D, &E, &F, &G, 0}; - bool success = check_search_result_iterator<key_type, data_type>(db, 2, expected); + bool success = check_search_result_iterator<key_type, data_type*>(db, 2, expected); assert(success); } { data_type* expected[] = {&D, &E, &F, &G, 0}; - bool success = check_search_result_iterator<key_type, data_type>(db, 3, expected); + bool success = check_search_result_iterator<key_type, data_type*>(db, 3, expected); assert(success); } { data_type* expected[] = {&E, &F, &G, 0}; - bool success = check_search_result_iterator<key_type, data_type>(db, 4, expected); + bool success = check_search_result_iterator<key_type, data_type*>(db, 4, expected); assert(success); } { data_type* expected[] = {&F, &G, 0}; - bool success = check_search_result_iterator<key_type, data_type>(db, 5, expected); + bool success = check_search_result_iterator<key_type, data_type*>(db, 5, expected); assert(success); } { data_type* expected[] = {&G, 0}; - bool success = check_search_result_iterator<key_type, data_type>(db, 6, expected); + bool success = check_search_result_iterator<key_type, data_type*>(db, 6, expected); assert(success); } { data_type* expected[] = {0}; - bool success = check_search_result_iterator<key_type, data_type>(db, 7, expected); + bool success = check_search_result_iterator<key_type, data_type*>(db, 7, expected); assert(success); } } @@ -1075,13 +1075,30 @@ void st_test_empty_result_set() { stack_printer __stack_printer__("::st_test_empty_result_set"); - typedef segment_tree<long, string> db_type; + typedef segment_tree<long, string*> db_type; db_type db; db_type::search_result result = db.search(0); cout << "size of empty result set: " << result.size() << endl; assert(result.size() == 0); } +void st_test_non_pointer_data() +{ + stack_printer __stack_printer__("::st_test_non_pointer_data"); + + typedef uint16_t key_type; + typedef size_t data_type; + typedef segment_tree<key_type, data_type> db_type; + + db_type db; + db.insert(0, 1, 10); + db.build_tree(); + + db_type::search_result result = db.search(0); + assert(result.size() == 1); + assert(*result.begin() == 10); +} + int main(int argc, char** argv) { try @@ -1104,6 +1121,7 @@ st_test_search_iterator_basic(); st_test_search_iterator_result_check(); st_test_empty_result_set(); + st_test_non_pointer_data(); } if (opt.test_perf) @@ -1113,7 +1131,7 @@ // At this point, all of the nodes created during the test run should have // been destroyed. If not, we are leaking memory. - typedef segment_tree<uint32_t, void> db_type; + typedef segment_tree<uint32_t, void*> db_type; assert(db_type::node::get_instance_count() == 0); } catch (const std::exception& e) -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
