[mdds] 52/62: Imported Upstream version 0.12.0
This is an automated email from the git hooks/post-receive script.
rene pushed a commit to branch master
in repository mdds.
commit 62856c97b650b808c276b8f323a70e6916e417ee
Author: Rene Engelhard <rene@debian.org>
Date: Thu Apr 21 14:50:54 2016 +0200
Imported Upstream version 0.12.0
---
NEWS | 11 +++
configure | 32 +++----
configure.ac | 2 +-
include/mdds/multi_type_vector_def.inl | 26 ++++--
include/mdds/multi_type_vector_types.hpp | 3 +-
include/mdds/node.hpp | 8 +-
include/mdds/rectangle_set.hpp | 8 +-
include/mdds/rectangle_set_def.inl | 6 +-
include/mdds/segment_tree.hpp | 51 ++++++-----
src/multi_type_vector_test_default.cpp | 32 +++++++
src/rectangle_set_test.cpp | 140 +++++++++++++++++--------------
src/segment_tree_test.cpp | 114 ++++++++++++++-----------
12 files changed, 260 insertions(+), 173 deletions(-)
diff --git a/NEWS b/NEWS
index 94b4206..dd50612 100644
--- a/NEWS
+++ b/NEWS
@@ -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 --git a/configure b/configure
index 2424caa..c228b58 100755
--- a/configure
+++ b/configure
@@ -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 <kohei.yoshida@gmail.com>.
#
@@ -579,8 +579,8 @@ MAKEFLAGS=
# 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='kohei.yoshida@gmail.com'
PACKAGE_URL=''
@@ -1181,7 +1181,7 @@ if test "$ac_init_help" = "long"; then
# 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 @@ fi
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 @@ fi
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 @@ cat >config.log <<_ACEOF
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 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
-VERSION=0.11.2
+VERSION=0.12.0
PACKAGE_TARNAME=mdds
@@ -2298,7 +2298,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# 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 @@ _ACEOF
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 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# 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 @@ _ACEOF
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 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# 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 @@ _ACEOF
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 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# 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 @@ _ACEOF
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 --git a/configure.ac b/configure.ac
index 7b032b6..d08631d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,4 +1,4 @@
-AC_INIT(mdds, 0.11.2, kohei.yoshida@gmail.com)
+AC_INIT(mdds, 0.12.0, kohei.yoshida@gmail.com)
VERSION=AC_PACKAGE_VERSION
AC_SUBST(VERSION)
diff --git a/include/mdds/multi_type_vector_def.inl b/include/mdds/multi_type_vector_def.inl
index b6345b6..9f6545c 100644
--- a/include/mdds/multi_type_vector_def.inl
+++ b/include/mdds/multi_type_vector_def.inl
@@ -3736,13 +3736,29 @@ bool multi_type_vector<_CellBlockFunc>::operator== (const multi_type_vector& oth
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 --git a/include/mdds/multi_type_vector_types.hpp b/include/mdds/multi_type_vector_types.hpp
index db8d584..0a36333 100644
--- a/include/mdds/multi_type_vector_types.hpp
+++ b/include/mdds/multi_type_vector_types.hpp
@@ -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 --git a/include/mdds/node.hpp b/include/mdds/node.hpp
index e343722..e5e690c 100644
--- a/include/mdds/node.hpp
+++ b/include/mdds/node.hpp
@@ -277,13 +277,12 @@ public:
// 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 @@ private:
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 --git a/include/mdds/rectangle_set.hpp b/include/mdds/rectangle_set.hpp
index c898953..e9fc431 100644
--- a/include/mdds/rectangle_set.hpp
+++ b/include/mdds/rectangle_set.hpp
@@ -81,10 +81,10 @@ private:
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 @@ public:
*
* @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 @@ public:
* @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 --git a/include/mdds/rectangle_set_def.inl b/include/mdds/rectangle_set_def.inl
index 3d074ed..88425ff 100644
--- a/include/mdds/rectangle_set_def.inl
+++ b/include/mdds/rectangle_set_def.inl
@@ -79,7 +79,7 @@ bool rectangle_set<_Key,_Data>::operator== (const rectangle_set& r) const
}
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 @@ rectangle_set<_Key,_Data>::search(key_type x, key_type y)
}
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 @@ bool rectangle_set<_Key,_Data>::verify_rectangles(const dataset_type& expected)
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 --git a/include/mdds/segment_tree.hpp b/include/mdds/segment_tree.hpp
index b5c5868..4bf18c6 100644
--- a/include/mdds/segment_tree.hpp
+++ b/include/mdds/segment_tree.hpp
@@ -140,16 +140,16 @@ public:
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 @@ public:
}
};
- 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 @@ public:
#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 @@ public:
* 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 @@ public:
* 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 @@ private:
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 @@ private:
* 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 @@ private:
* 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 @@ bool segment_tree<_Key, _Data>::operator==(const segment_tree& r) const
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 @@ void segment_tree<_Key, _Data>::build_tree()
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 @@ void segment_tree<_Key, _Data>::build_tree()
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 @@ void segment_tree<_Key, _Data>::create_leaf_node_instances(const ::std::vector<k
}
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 @@ void segment_tree<_Key, _Data>::search(key_type point, search_result_base& resul
}
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 @@ size_t segment_tree<_Key, _Value>::leaf_size() const
}
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 @@ void segment_tree<_Key, _Data>::remove_data_from_nodes(node_list_type* plist, co
}
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 @@ bool segment_tree<_Key, _Data>::verify_leaf_nodes(const ::std::vector<leaf_node_
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 @@ bool segment_tree<_Key, _Data>::verify_segment_data(const segment_map_type& chec
}
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 --git a/src/multi_type_vector_test_default.cpp b/src/multi_type_vector_test_default.cpp
index 70ee958..c9a4b01 100644
--- a/src/multi_type_vector_test_default.cpp
+++ b/src/multi_type_vector_test_default.cpp
@@ -1275,6 +1275,38 @@ void mtv_test_equality()
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 --git a/src/rectangle_set_test.cpp b/src/rectangle_set_test.cpp
index aa56c82..032de35 100644
--- a/src/rectangle_set_test.cpp
+++ b/src/rectangle_set_test.cpp
@@ -36,6 +36,18 @@ using namespace std;
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 @@ void insert_range(rectangle_set<_Key, _Data>& db, range<_Key>& range)
}
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 @@ void print_search_result(typename _SetType::key_type x, typename _SetType::key_t
{
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 @@ bool check_search_result(_SetType& db,
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 @@ void rect_test_insertion_removal()
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 @@ void rect_test_insertion_removal()
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 @@ void rect_test_insertion_removal()
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 @@ void rect_test_insertion_removal()
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 @@ void rect_test_insertion_removal()
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 @@ void rect_test_insertion_removal()
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 @@ void rect_test_insertion_removal()
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 @@ void rect_test_insertion_removal()
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 @@ void rect_test_search()
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 @@ void rect_test_search()
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 @@ void rect_test_search()
{
// 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 @@ void rect_test_search()
{
// 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 @@ void rect_test_copy_constructor()
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 @@ void rect_test_copy_constructor()
{
// 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 @@ void rect_test_copy_constructor()
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 @@ void rect_test_copy_constructor()
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 @@ void rect_test_assignment()
{
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 @@ void rect_test_assignment()
{
// 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 @@ void rect_test_assignment()
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 @@ void rect_test_assignment()
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 @@ void rect_test_equality()
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 @@ void rect_test_perf_insertion_fixed_x()
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 @@ void rect_test_perf_insertion_fixed_y()
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 @@ void rect_test_search_result_iterator()
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_search_result_iterator()
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 --git a/src/segment_tree_test.cpp b/src/segment_tree_test.cpp
index f1d7df1..569a97d 100644
--- a/src/segment_tree_test.cpp
+++ b/src/segment_tree_test.cpp
@@ -90,7 +90,7 @@ struct test_data
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 @@ bool check_leaf_nodes(
{
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 @@ bool check_leaf_nodes(
}
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 @@ template<typename key_type, typename data_type>
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 @@ bool check_search_result_only(
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 @@ bool check_search_result(
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 @@ void st_test_insert_search_removal()
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 @@ void st_test_copy_constructor()
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 @@ void st_test_equality()
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 @@ void st_test_clear()
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 @@ void st_test_duplicate_insertion()
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 @@ void st_test_search_on_uneven_tree()
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 @@ void st_test_perf_insertion()
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 @@ void st_test_aggregated_search_results()
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 @@ void st_test_dense_tree_search()
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 @@ void st_test_dense_tree_search()
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 @@ void st_test_search_on_empty_set()
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 @@ void st_test_search_iterator_basic()
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 @@ void st_test_search_iterator_result_check()
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 @@ void st_test_search_iterator_result_check()
{
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_search_iterator_result_check()
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 @@ int main(int argc, char** argv)
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 @@ int main(int argc, char** argv)
// 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)
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-openoffice/mdds.git
Reply to: