diff --git a/alib2std/src/extensions/pointer.hpp b/alib2std/src/extensions/pointer.hpp deleted file mode 100644 index 13fb81a2826d9660230a7da1844d8622d94231f6..0000000000000000000000000000000000000000 --- a/alib2std/src/extensions/pointer.hpp +++ /dev/null @@ -1,47 +0,0 @@ -/* - * pointer.hpp - * - * Created on: Apr 1, 2013 - * Author: Jan Travnicek - */ - -#ifndef __POINTER_HPP_ -#define __POINTER_HPP_ - -#include <cstdlib> - -namespace std { - -template<typename T> -class pointer { - T* ptr; -public: - pointer(T* ptr) : ptr(ptr) {} - - bool operator<(const pointer<T>& other) const { - if(ptr == other.ptr) return 0; - if(ptr == NULL) return 1; - if(other.ptr == NULL) return 0; - return *ptr < *other.ptr; - } - - bool operator==(const pointer<T>& other) const { - if(ptr == other.ptr) return 1; - if(ptr == NULL) return 0; - if(other.ptr == NULL) return 0; - return *ptr == *other.ptr; - } - - friend ostream& operator<<(ostream& out, const pointer<T>& other) { - if(other.ptr == NULL) - out << "NULL"; - else - out << *other.ptr; - return out; - } -}; - -} /* namespace std */ - -#endif /* __POINTER_HPP_ */ - diff --git a/alib2std/src/extensions/tuple.hpp b/alib2std/src/extensions/tuple.hpp index 8c85a5c943408f2c434bd28f5e73ed528d111a5e..e54377aa1118f0fd308e23bbee71d33f15cbfeca 100644 --- a/alib2std/src/extensions/tuple.hpp +++ b/alib2std/src/extensions/tuple.hpp @@ -36,15 +36,13 @@ std::ostream& operator<<(std::ostream& out, const std::tuple<Ts...>& tuple) { return out; } - - template<int I, typename Tuple> struct compareTupleHelper; template<int I, typename Tuple> struct compareTupleHelper { static int compHelp(const Tuple& t1, const Tuple& t2) { - compare<typename tuple_element<I, Tuple>::type> comp; + compare<typename std::decay < typename tuple_element<I, Tuple>::type >::type > comp; int res = comp(std::get<I>(t1), std::get<I>(t2)); if(res != 0) return res; return compareTupleHelper<I - 1, Tuple>::compHelp(t1, t2); @@ -54,12 +52,11 @@ struct compareTupleHelper { template<class Tuple> struct compareTupleHelper<0, Tuple> { static int compHelp(const Tuple& t1, const Tuple& t2) { - compare<typename tuple_element<0, Tuple>::type> comp; + compare<typename std::decay < typename tuple_element<0, Tuple>::type >::type > comp; return comp(std::get<0>(t1), std::get<0>(t2)); } }; - template<typename ... Ts> struct compare<tuple<Ts...>> { int operator()(const tuple<Ts...>& first, const tuple<Ts...>& second) const { @@ -67,37 +64,6 @@ struct compare<tuple<Ts...>> { } }; - - -template<int I, typename Tie> -struct compareTieHelper; - -template<int I, typename Tie> -struct compareTieHelper { - static int compHelp(const Tie& t1, const Tie& t2) { - compare<typename std::remove_const<typename std::remove_reference<typename tuple_element<I, Tie>::type>::type>::type> comp; - int res = comp(std::get<I>(t1), std::get<I>(t2)); - if(res != 0) return res; - return compareTieHelper<I - 1, Tie>::compHelp(t1, t2); - } -}; - -template<class Tie> -struct compareTieHelper<0, Tie> { - static int compHelp(const Tie& t1, const Tie& t2) { - compare<typename std::remove_const<typename std::remove_reference<typename tuple_element<0, Tie>::type>::type>::type> comp; - return comp(std::get<0>(t1), std::get<0>(t2)); - } -}; - - -template<typename ... Ts> -struct compare<tuple<Ts&...>> { - int operator()(const tuple<Ts&...>& first, const tuple<Ts&...>& second) const { - return compareTieHelper<tuple_size<std::tuple<Ts&...>>::value - 1, std::tuple<Ts&...>>::compHelp(first, second); - } -}; - } /* namespace std */ #endif /* __TUPLE_HPP_ */ diff --git a/alib2std/src/extensions/vector.hpp b/alib2std/src/extensions/vector.hpp index 268dfcbbb100be7e22d0cc5a273b9bcedcdd60a8..7efeaba3f70431b6418c407d220e1f0bc3c18fa9 100644 --- a/alib2std/src/extensions/vector.hpp +++ b/alib2std/src/extensions/vector.hpp @@ -10,158 +10,6 @@ namespace std { -template <class Iterator> -class ptr_vector_iterator { - Iterator current; - -public: - typedef Iterator iterator_type; - typedef typename iterator_traits<Iterator>::iterator_category iterator_category; - typedef typename iterator_traits<Iterator>::value_type value_type; - typedef Iterator pointer; - typedef typename std::remove_pointer<value_type>::type& reference; - - explicit ptr_vector_iterator() { - } - - explicit ptr_vector_iterator (Iterator it) : current(it) { - } - - ptr_vector_iterator (const ptr_vector_iterator<Iterator>& it) : current(it.current) { - } - - ptr_vector_iterator& operator= (const ptr_vector_iterator<Iterator>& it) { - current = it.current; - } - - iterator_type base() const { - return current; - } - - pointer operator->() const { - return *current; - } - - reference operator*() const { - return **current; - } - - ptr_vector_iterator& operator++() { - ++current; - return *this; - } - - ptr_vector_iterator& operator--() { - --current; - return *this; - } - - ptr_vector_iterator operator++(int) { - ptr_vector_iterator temp = *this; - ++current; - return temp; - } - - ptr_vector_iterator operator--(int) { - ptr_vector_iterator temp = *this; - --current; - return temp; - } - - bool operator== (const ptr_vector_iterator<Iterator>& other) { - return this->current == other.current; - } - - bool operator!= (const ptr_vector_iterator<Iterator>& other) { - return ! ( *this == other ); - } - -}; - -template<class Iterator> -ptr_vector_iterator<Iterator> make_ptr_vector_iterator (Iterator it) { - return ptr_vector_iterator<Iterator>(it); -} - - -template<class T> -class ptr_vector { - vector<T*> data; - -public: - ptr_vector() {} - - ptr_vector(const ptr_vector<T>& other) { - data.reserve(other.size()); - for(T* ptr : other.data) { - data.push_back(std::clone(ptr)); - } - } - - ptr_vector(ptr_vector<T>&& other) noexcept { - std::swap(this->data, other.data); - } - - ptr_vector<T>& operator=(const ptr_vector<T>& other) { - if(this == *other) return *this; - - *this = ptr_vector(other); - - return *this; - } - - ~ptr_vector() noexcept { - for(T* elem : data) { - delete elem; - } - } - - ptr_vector<T>& operator=(ptr_vector<T>&& other) noexcept { - std::swap(this->data, other.data); - return *this; - } - - T& operator[]( int n ) { - return *data[n]; - } - - const T& operator[]( int n ) const { - return *data[n]; - } - - void push_back(T* elem) { - data.push_back(elem); - } - - unsigned size() const { - return data.size(); - } - - ptr_vector_iterator<typename std::vector<T*>::iterator> begin() { - return make_ptr_vector_iterator(data.begin()); - } - - ptr_vector_iterator<typename std::vector<T*>::iterator> end() { - return make_ptr_vector_iterator(data.end()); - } - - ptr_vector_iterator<typename std::vector<T*>::const_iterator> begin() const { - return make_ptr_vector_iterator(data.cbegin()); - } - - ptr_vector_iterator<typename std::vector<T*>::const_iterator> end() const { - return make_ptr_vector_iterator(data.cend()); - } - - ptr_vector_iterator<typename std::vector<T*>::const_iterator> cbegin() { - return make_ptr_vector_iterator(data.cbegin()); - } - - ptr_vector_iterator<typename std::vector<T*>::const_iterator> cend() { - return make_ptr_vector_iterator(data.cend()); - } -}; - template< class T , class Allocator > std::ostream& operator<<(std::ostream& out, const std::vector<T, Allocator>& vector) { out << "["; @@ -177,21 +25,6 @@ std::ostream& operator<<(std::ostream& out, const std::vector<T, Allocator>& vec return out; } -template< class T > -std::ostream& operator<<(std::ostream& out, const std::ptr_vector<T>& vector) { - out << "["; - - bool first = true; - for(const T& item : vector) { - if(!first) out << ", "; - first = false; - out << item; - } - - out << "]"; - return out; -} - template<class T, class Allocator> struct compare<vector<T, Allocator>> { int operator()(const vector<T, Allocator>& first, const vector<T, Allocator>& second) const { @@ -207,21 +40,6 @@ struct compare<vector<T, Allocator>> { } }; -template<class T> -struct compare<ptr_vector<T>> { - int operator()(const ptr_vector<T>& first, const ptr_vector<T>& second) const { - if(first.size() < second.size()) return -1; - if(first.size() > second.size()) return 1; - - compare<T> comp; - for(auto iterF = first.begin(), iterS = second.begin(); iterF != first.end(); ++iterF, ++iterS) { - int res = comp(*iterF, *iterS); - if(res != 0) return res; - } - return 0; - } -}; - } /* namespace std */ #endif /* __VECTOR_HPP_ */ diff --git a/alib2std/test-src/extensions/VectorTest.cpp b/alib2std/test-src/extensions/VectorTest.cpp index 3a3986d15c9bfa3f361bc6582876c47e534d0a40..e7420bda416ecfb05722454c3428ae4486a048fc 100644 --- a/alib2std/test-src/extensions/VectorTest.cpp +++ b/alib2std/test-src/extensions/VectorTest.cpp @@ -11,46 +11,6 @@ void VectorTest::setUp() { void VectorTest::tearDown() { } -void VectorTest::testVector() { - std::ptr_vector<VectorTest::test> vector; - std::vector<VectorTest::test*> vector2; - - for(int i = 0; i < 10; i++) { - VectorTest::test* tmp = new VectorTest::test(i); - vector.push_back(tmp); - vector2.push_back(tmp); - } - - int i = 0; - for(VectorTest::test& tmp : vector) { - CPPUNIT_ASSERT(tmp.get() == i); - i++; - } - - const decltype(vector)& vector3 = vector; - - i = 0; - for(const VectorTest::test& tmp : vector3) { - CPPUNIT_ASSERT(tmp.get() == i); - i++; - } - - i = 0; - for(VectorTest::test& tmp : vector3) { - CPPUNIT_ASSERT(tmp.get() == i); - i++; - } - - std::ptr_vector<VectorTest::test> vector4; - for(int i = 0; i < 10; i++) { - VectorTest::test* tmp = new VectorTest::test(i+1); - vector4.push_back(tmp); - } - - std::compare<std::ptr_vector<VectorTest::test>> comp; - CPPUNIT_ASSERT(comp(vector, vector4) < 0); -} - void VectorTest::testProperties() { std::vector<int> data = {1, 2, 3, 4}; diff --git a/alib2std/test-src/extensions/VectorTest.h b/alib2std/test-src/extensions/VectorTest.h index b1b31ec93fec64621df1ecddf5d6d4a9b38c146d..4416d62c594727b230a657a0051c9f075195d487 100644 --- a/alib2std/test-src/extensions/VectorTest.h +++ b/alib2std/test-src/extensions/VectorTest.h @@ -7,38 +7,14 @@ class VectorTest : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE( VectorTest ); - CPPUNIT_TEST( testVector ); CPPUNIT_TEST( testProperties ); CPPUNIT_TEST_SUITE_END(); -public: -struct test { - int i; - - test(int i) : i(i) {} - - int get() const { - return i; - } -}; - public: void setUp(); void tearDown(); - void testVector(); void testProperties(); }; - -namespace std { - -template<> -struct compare<VectorTest::test> { - int operator()(const VectorTest::test& first, const VectorTest::test& second) { - return first.get() - second.get(); - } -}; - -} /* namespace std */ #endif // VARIANT_TEST_H_