diff --git a/include/helpers/MaxSizedArray.hpp b/include/helpers/MaxSizedArray.hpp deleted file mode 100644 index 560b6ce..0000000 --- a/include/helpers/MaxSizedArray.hpp +++ /dev/null @@ -1,117 +0,0 @@ -/* Copyright 2015, 2016, Michele Santullo - * This file is part of "dindexer". - * - * "dindexer" is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * "dindexer" is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with "dindexer". If not, see . - */ - -#ifndef idBC9F804ADD33468A9C7657E823FFC706 -#define idBC9F804ADD33468A9C7657E823FFC706 - -#include "implem/AutomemBase.hpp" -#include "implem/IteratorOnPtr.hpp" -#include -#include -#include -#include -#include - -namespace dinhelp { - const size_t MAXSZARR_MAX_STACK_ALLOC_SIZE = MAX_STACK_ALLOC_SIZE; - - //TODO: add a template parameter to force stack allocation regardless of - //sizeof(T) * S - template > - class MaxSizedArray : - private std::conditional< - (sizeof(T) * S > (MAXSZARR_MAX_STACK_ALLOC_SIZE > 4 * sizeof(T*) ? MAXSZARR_MAX_STACK_ALLOC_SIZE - sizeof(T*) : MAXSZARR_MAX_STACK_ALLOC_SIZE)), - AutomemRawBase_heap, - AutomemRawBase_stack - >::type - { - typedef typename std::conditional< - (sizeof(T) * S > (MAXSZARR_MAX_STACK_ALLOC_SIZE > 4 * sizeof(T*) ? MAXSZARR_MAX_STACK_ALLOC_SIZE - sizeof(T*) : MAXSZARR_MAX_STACK_ALLOC_SIZE)), - AutomemRawBase_heap, - AutomemRawBase_stack - >::type parent_type; - - public: - typedef IteratorOnPtr iterator; - typedef IteratorOnPtr const_iterator; - typedef IteratorOnPtr reverse_iterator; - typedef IteratorOnPtr const_reverse_iterator; - typedef T& reference; - typedef T&& mov_reference; - typedef const T& const_reference; - typedef size_t size_type; - typedef ptrdiff_t difference_type; - typedef T value_type; - typedef T* pointer; - typedef const T* const_pointer; - - enum MAX_SIZE_ENUM { - MAX_SIZE = S - }; - - MaxSizedArray ( void ); - MaxSizedArray ( const MaxSizedArray& parOther ); - MaxSizedArray ( MaxSizedArray&& parOther ); - ~MaxSizedArray ( void ); - - bool empty ( void ) const; - size_type size ( void ) const; - size_type capacity ( void ) const { return S; } - size_type max_size ( void ) const { return S; } - void push_back ( const value_type& parNewItem ); - void push_back ( value_type&& parNewItem ); - void pop_back ( void ); - iterator erase ( const iterator& parDele ); - iterator erase ( const iterator& parFrom, const iterator& parToExcl ); - void clear ( void ); - reference operator[] ( size_type parIndex ) &; - mov_reference operator[] ( size_type parIndex ) &&; - const_reference operator[] ( size_type parIndex ) const &; - MaxSizedArray& operator= ( const MaxSizedArray& parOther ); - bool operator== ( const MaxSizedArray& parOther ) const; - bool operator!= ( const MaxSizedArray& parOther ) const; - pointer GetPointer ( void ); - const_pointer GetPointer ( void ) const; - void reserve ( size_type parReserve ); - - iterator begin ( void ); - const_iterator begin ( void ) const; - iterator end ( void ); - const_iterator end ( void ) const; - reverse_iterator rbegin ( void ); - const_reverse_iterator rbegin ( void ) const; - reverse_iterator rend ( void ); - const_reverse_iterator rend ( void ) const; - reference front ( void ) & { return (*this)[0]; } - reference back ( void ) & { return (*this)[size() - 1]; } - mov_reference front ( void ) && { return (*this)[0]; } - mov_reference back ( void ) && { return (*this)[size() - 1]; } - const_reference front ( void ) const & { return (*this)[0]; } - const_reference back ( void ) const & { return (*this)[size() - 1]; } - - private: - pointer GetPointer_NoAssert ( void ) { return m_localMem; } - const_pointer GetPointer_NoAssert ( void ) const { return m_localMem; } - - T* m_localMem; //A copy of memory pointer is required - size_type m_used; - }; -} //namespace dinhelp - -#include "MaxSizedArray.inl" - -#endif diff --git a/include/helpers/MaxSizedArray.inl b/include/helpers/MaxSizedArray.inl deleted file mode 100644 index 17201c1..0000000 --- a/include/helpers/MaxSizedArray.inl +++ /dev/null @@ -1,289 +0,0 @@ -/* Copyright 2015, 2016, Michele Santullo - * This file is part of "dindexer". - * - * "dindexer" is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * "dindexer" is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with "dindexer". If not, see . - */ - -namespace dinhelp { - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - MaxSizedArray::MaxSizedArray() { - m_localMem = this->AllocMemory(); - m_used = 0; - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - MaxSizedArray::MaxSizedArray (const MaxSizedArray& parOther) : - parent_type(), - m_used(0) - { - m_localMem = this->AllocMemory(); - const size_type count = parOther.size(); - for (size_type z = 0; z < count; ++z) { - this->push_back(parOther[z]); - } - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - MaxSizedArray::MaxSizedArray (MaxSizedArray&& parOther) : - parent_type(), - m_used(0) - { - m_localMem = this->AllocMemory(); - const size_type count = parOther.size(); - for (size_type z = 0; z < count; ++z) { - this->push_back(std::move(parOther[z])); - } - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - MaxSizedArray::~MaxSizedArray() { - this->clear(); - this->FreeMemory(); - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - bool MaxSizedArray::empty() const { - return 0 == m_used; - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - typename MaxSizedArray::size_type MaxSizedArray::size() const { - return m_used; - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - void MaxSizedArray::push_back (value_type&& parNewItem) { - assert(size() < capacity()); - this->GetNewT(m_used, std::move(parNewItem)); - ++m_used; - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - void MaxSizedArray::push_back (const value_type& parNewItem) { - assert(size() < capacity()); - this->GetNewT(m_used, parNewItem); - ++m_used; - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - void MaxSizedArray::pop_back() { - assert(not empty()); - m_localMem[m_used - 1].~T(); - --m_used; - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - typename MaxSizedArray::reference MaxSizedArray::operator[] (size_type parIndex) & { - assert(parIndex < size()); - return m_localMem[parIndex]; - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - typename MaxSizedArray::mov_reference MaxSizedArray::operator[] (size_type parIndex) && { - assert(parIndex < size()); - return std::move(m_localMem[parIndex]); - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - typename MaxSizedArray::const_reference MaxSizedArray::operator[] (size_type parIndex) const & { - assert(parIndex < size()); - return m_localMem[parIndex]; - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - MaxSizedArray& MaxSizedArray::operator= (const MaxSizedArray& parOther) { - m_used = parOther.m_used; - std::copy(parOther.GetMemPtr(), parOther.GetMemPtr() + parOther.size(), this->GetMemPtr()); - return *this; - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - bool MaxSizedArray::operator== (const MaxSizedArray& parOther) const { - if (size() != parOther.size()) - return false; - for (size_type z = 0; z < size(); ++z) { - if ((*this)[z] != parOther[z]) - return false; - } - return true; - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - bool MaxSizedArray::operator!= (const MaxSizedArray& parOther) const { - return not (*this == parOther); - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - typename MaxSizedArray::pointer MaxSizedArray::GetPointer() { - assert(size() > 0); - return GetPointer_NoAssert(); - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - typename MaxSizedArray::const_pointer MaxSizedArray::GetPointer() const { - assert(size() > 0); - return GetPointer_NoAssert(); - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - void MaxSizedArray::clear() { - const size_type count = this->size(); - for (size_type z = 0; z < count; ++z) { - (*this)[z].~T(); - } - m_used = 0; - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - typename MaxSizedArray::iterator MaxSizedArray::begin() { - return iterator(GetPointer_NoAssert(), size()); - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - typename MaxSizedArray::const_iterator MaxSizedArray::begin() const { - return const_iterator(GetPointer_NoAssert(), size()); - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - typename MaxSizedArray::iterator MaxSizedArray::end() { - return iterator(GetPointer_NoAssert() + size(), 0); - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - typename MaxSizedArray::const_iterator MaxSizedArray::end() const { - return const_iterator(GetPointer_NoAssert() + size(), 0); - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - typename MaxSizedArray::reverse_iterator MaxSizedArray::rbegin() { - return reverse_iterator(GetPointer_NoAssert() + size() - 1, size()); - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - typename MaxSizedArray::const_reverse_iterator MaxSizedArray::rbegin() const { - return const_reverse_iterator(GetPointer_NoAssert() + size() - 1, size()); - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - typename MaxSizedArray::reverse_iterator MaxSizedArray::rend() { - return reverse_iterator(GetPointer_NoAssert() - 1, 0); - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - typename MaxSizedArray::const_reverse_iterator MaxSizedArray::rend() const { - return const_reverse_iterator(GetPointer_NoAssert() - 1, 0); - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - typename MaxSizedArray::iterator MaxSizedArray::erase (const iterator& parDele) { - assert(end() != parDele); - return erase(parDele, parDele + 1); - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - typename MaxSizedArray::iterator MaxSizedArray::erase (const iterator& parFrom, const iterator& parToExcl) { - assert(parFrom >= begin()); - assert(parToExcl <= end()); - assert(parToExcl >= parFrom); - - //I'm doing this in two passes: first, I'm deleting as many elements as - //the ones that would be left at the end (that is, delete and move), - //then delete everything to the end of the buffer, if necessary. - const size_type deleCount = static_cast(parToExcl - parFrom); - const size_type firstIndexToDele = static_cast(parFrom - begin()); - const size_type& sz = m_used; - assert(firstIndexToDele + deleCount <= sz); - const size_type deleAndCopyCount = sz - (firstIndexToDele + deleCount); - - //As said, make room and copy from the cut tail - for (size_type z = firstIndexToDele; z < firstIndexToDele + deleAndCopyCount; z++) { - (*this)[z].~T(); - new(&(*this)[z]) T((*this)[z + deleCount]); - } - - //Any leftover is rubbish - for (size_type z = firstIndexToDele + deleAndCopyCount; z < sz; z++) { - (*this)[z].~T(); - } - - m_used -= deleCount; - return begin() + firstIndexToDele; - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - void MaxSizedArray::reserve (size_type parReserve) { - assert(parReserve <= S); - if (parReserve > S) { - throw std::length_error("Unable to reserve more memory than the build-time size for MaxSizedArray"); - } - } -} //namespace dinhelp diff --git a/include/helpers/cmake_on_off.h b/include/helpers/cmake_on_off.h deleted file mode 100644 index 165ab95..0000000 --- a/include/helpers/cmake_on_off.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright 2015, 2016, Michele Santullo - * This file is part of "dindexer". - * - * "dindexer" is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * "dindexer" is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with "dindexer". If not, see . - */ - -#ifndef id9B6B373E88404330ADEE51A4EC861787 -#define id9B6B373E88404330ADEE51A4EC861787 - -#if !defined(CMAKE_ON) -# define CMAKE_ON 1 -# define CMAKE_on 1 -# define CMAKE_On 1 -# define CMAKE_oN 1 -#endif -#if !defined(CMAKE_OFF) -# define CMAKE_OFF 0 -# define CMAKE_OFf 0 -# define CMAKE_OfF 0 -# define CMAKE_Off 0 -# define CMAKE_oFF 0 -# define CMAKE_oFf 0 -# define CMAKE_ofF 0 -# define CMAKE_off 0 -#endif - -#endif diff --git a/include/helpers/compatibility.h b/include/helpers/compatibility.h deleted file mode 100644 index e59a560..0000000 --- a/include/helpers/compatibility.h +++ /dev/null @@ -1,62 +0,0 @@ -/* Copyright 2015, 2016, Michele Santullo - * This file is part of "dindexer". - * - * "dindexer" is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * "dindexer" is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with "dindexer". If not, see . - */ - -#ifndef id45CDD1DAEF4F42968E3C89F68FDDA9BC -#define id45CDD1DAEF4F42968E3C89F68FDDA9BC - -#if defined(__GNUC__) -# if defined(__clang__) -# if !defined(__has_attribute) - //Fall back to version number comparing -# else -# if __has_attribute(flatten) -# define a_flatten __attribute__((flatten)) -# else -# define a_flatten -# endif -# if __has_attribute(always_inline) -# define a_always_inline __attribute__((always_inline)) -# else -# define a_always_inline -# endif -# if __has_attribute(pure) -# define a_pure __attribute__((pure)) -# else -# define a_pure -# endif -# if __has_attribute(deprecated) -# define a_deprecated __attribute__((deprecated)) -# else -# define a_deprecated -#endif -# endif -# else - //Fix here if you get warnings about unsupported attributes on your compiler -# define a_flatten __attribute__((flatten)) -# define a_always_inline __attribute__((always_inline)) -# define a_pure __attribute__((pure)) -# define a_deprecated __attribute__((deprecated)) -# endif -#else -# warning "Unsupported compiler, please fill this section or file a bug" -# define a_flatten -# define a_always_inline -# define a_pure -# define a_deprecated -#endif - -#endif diff --git a/include/helpers/has_method.hpp b/include/helpers/has_method.hpp deleted file mode 100644 index d641771..0000000 --- a/include/helpers/has_method.hpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2015 Michele "King_DuckZ" Santullo - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef idFBC29C5127784D35BE62F7BAC16E3687 -#define idFBC29C5127784D35BE62F7BAC16E3687 - -#define define_has_method(method_name,pretty_name) \ - template \ - struct Has ## pretty_name ## Method { \ - private: \ - struct TrueType { int a[2]; }; \ - typedef int FalseType; \ - template static TrueType has_method ( decltype(&C::method_name) ); \ - template static FalseType has_method ( ... ); \ - public: \ - enum { value = sizeof(has_method(0)) == sizeof(TrueType) }; \ - } -#define define_has_typedef(typedef_name,pretty_name) \ - template \ - struct Has ## pretty_name ## Typedef { \ - private: \ - struct TrueType { int a[2]; }; \ - typedef int FalseType; \ - template static TrueType has_typedef ( const typename C::typedef_name* ); \ - template static FalseType has_typedef ( ... ); \ - public: \ - enum { value = sizeof(has_typedef(nullptr)) == sizeof(TrueType) }; \ - } -#define define_has_enum(enum_name,pretty_name) \ - template \ - struct Has ## pretty_name ## Enum { \ - private: \ - struct TrueType { int a[2]; }; \ - typedef int FalseType; \ - template static TrueType has_enum ( decltype(C::enum_name)* ); \ - template static FalseType has_enum ( ... ); \ - public:\ - enum { value = sizeof(has_enum(nullptr)) == sizeof(TrueType) }; \ - } - -#endif diff --git a/include/helpers/implem/AutomemBase.hpp b/include/helpers/implem/AutomemBase.hpp deleted file mode 100644 index c632976..0000000 --- a/include/helpers/implem/AutomemBase.hpp +++ /dev/null @@ -1,91 +0,0 @@ -/* Copyright 2015, 2016, Michele Santullo - * This file is part of "dindexer". - * - * "dindexer" is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * "dindexer" is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with "dindexer". If not, see . - */ - -#ifndef idDB299AE3079F4830BB1D543C07F7B594 -#define idDB299AE3079F4830BB1D543C07F7B594 - -//Classes in this file are low level and only intended to be used by library -//code. They don't do much by themselves and shoud never be used from outside. - -#include -#include -#include -#include - -#if !defined(NDEBUG) -# define ASSERTIONSENABLED -#endif - -namespace dinhelp { - const size_t MAX_STACK_ALLOC_SIZE = 128; - - ///------------------------------------------------------------------------- - ///Heap-based allocation, only gets raw memory - ///------------------------------------------------------------------------- - template > - class AutomemRawBase_heap { - protected: - AutomemRawBase_heap ( void ); - AutomemRawBase_heap ( const AutomemRawBase_heap& ) = delete; //Copy ctor can't be implemented at this level - AutomemRawBase_heap ( AutomemRawBase_heap&& parOther ); - - template - T* GetNewT ( size_t parIndex, Args&&... parArgs ); - T* AllocMemory ( void ); - void FreeMemory ( void ) noexcept; - void swap ( AutomemRawBase_heap& parOther ) noexcept { std::swap(m_localMem, parOther.m_localMem); } - private: - void operator= (const AutomemRawBase_heap&); - -#if defined(ASSERTIONSENABLED) - typedef uintptr_t PTR_INT_TYPE; - static_assert(sizeof(PTR_INT_TYPE) == sizeof(char*), "Wrong uintptr_t size"); -#endif - T* m_localMem; - }; - - ///------------------------------------------------------------------------- - ///Stack-based allocation, only gets raw memory - ///------------------------------------------------------------------------- - template - class AutomemRawBase_stack { - protected: - AutomemRawBase_stack ( void ) = default; - AutomemRawBase_stack ( const AutomemRawBase_stack& ) = delete; //Copy ctor can't be implemented at this level - AutomemRawBase_stack ( AutomemRawBase_stack&& ) = delete; - ~AutomemRawBase_stack ( void ) = default; - - template - T* GetNewT ( size_t parIndex, Args&&... parArgs ); - T* AllocMemory ( void ); - void FreeMemory ( void ) noexcept { return; } - private: -#if defined(ASSERTIONSENABLED) - typedef uintptr_t PTR_INT_TYPE; - static_assert(sizeof(PTR_INT_TYPE) == sizeof(char*), "Wrong uintptr_t size"); -#endif - void operator= (const AutomemRawBase_stack&); - typename std::aligned_storage::type m_localMem[S]; - }; -} //namespace dinhelp - -#include "AutomemBase.inl" - -#if defined(ASSERTIONSENABLED) -# undef ASSERTIONSENABLED -#endif -#endif diff --git a/include/helpers/implem/AutomemBase.inl b/include/helpers/implem/AutomemBase.inl deleted file mode 100644 index 03c63da..0000000 --- a/include/helpers/implem/AutomemBase.inl +++ /dev/null @@ -1,118 +0,0 @@ -/* Copyright 2015, 2016, Michele Santullo - * This file is part of "dindexer". - * - * "dindexer" is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * "dindexer" is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with "dindexer". If not, see . - */ - -namespace dinhelp { - namespace { -#if defined(ASSERTIONSENABLED) - const char g_guard = 0xAB; -#endif - } //unnamed namespace - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - AutomemRawBase_heap::AutomemRawBase_heap() { -#if !defined(NDEBUG) - m_localMem = nullptr; -#endif - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - AutomemRawBase_heap::AutomemRawBase_heap (AutomemRawBase_heap&& parOther) { -#if !defined(NDEBUG) - m_localMem = nullptr; -#endif - this->swap(parOther); - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - T* AutomemRawBase_heap::AllocMemory() { -#if !defined(NDEBUG) - assert(nullptr == m_localMem); -#endif - m_localMem = A().allocate(S); -#if defined(ASSERTIONSENABLED) - assert(reinterpret_cast(m_localMem) % alignof(T) == 0); //Make sure alignment is correct - std::fill( - reinterpret_cast(&m_localMem[0]), - reinterpret_cast(&m_localMem[0]) + sizeof(m_localMem), - g_guard - ); -#endif - return m_localMem; - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - void AutomemRawBase_heap::FreeMemory() noexcept { -#if !defined(NDEBUG) - assert(nullptr != m_localMem); -#endif - A().deallocate(m_localMem, S); -#if !defined(NDEBUG) - m_localMem = nullptr; -#endif - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - template - T* AutomemRawBase_heap::GetNewT (size_t parIndex, Args&&... parArgs) { - assert(parIndex < S); - T* const location = m_localMem + parIndex; -#if defined(ASSERTIONSENABLED) - assert(reinterpret_cast(location) % alignof(T) == 0); - assert(g_guard == *reinterpret_cast(location)); -#endif - return new(location) T(std::forward(parArgs)...); - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - T* AutomemRawBase_stack::AllocMemory() { -#if defined(ASSERTIONSENABLED) - assert(reinterpret_cast(m_localMem) % alignof(T) == 0); //Make sure alignment is correct - std::fill( - reinterpret_cast(&m_localMem[0]), - reinterpret_cast(&m_localMem[0]) + sizeof(m_localMem), - g_guard - ); -#endif - return reinterpret_cast(&m_localMem[0]); - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - template - T* AutomemRawBase_stack::GetNewT (size_t parIndex, Args&&... parArgs) { - assert(parIndex < S); - auto* const location = &m_localMem[parIndex]; -#if defined(ASSERTIONSENABLED) - assert(reinterpret_cast(location) % alignof(T) == 0); - assert(g_guard == *reinterpret_cast(location)); -#endif - return new(location) T(std::forward(parArgs)...); - } -} //namespace dinhelp diff --git a/include/helpers/implem/IteratorOnPtr.hpp b/include/helpers/implem/IteratorOnPtr.hpp deleted file mode 100644 index 4845592..0000000 --- a/include/helpers/implem/IteratorOnPtr.hpp +++ /dev/null @@ -1,314 +0,0 @@ -/* Copyright 2015, 2016, Michele Santullo - * This file is part of "dindexer". - * - * "dindexer" is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * "dindexer" is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with "dindexer". If not, see . - */ - -#ifndef id1B822B1775424D879AA6AD1739B5BC91 -#define id1B822B1775424D879AA6AD1739B5BC91 - -#include -#include -#include -#include - -namespace dinhelp { - namespace implem_iop { - template - class IteratorOnPtr_base : public std::iterator { - typedef std::iterator parent_type; - public: - //Typedefs to be STL-compliant - typedef typename parent_type::iterator_category iterator_category; - typedef typename parent_type::value_type value_type; - typedef typename parent_type::difference_type difference_type; - typedef typename parent_type::pointer pointer; - typedef typename std::remove_reference::type& reference; - - IteratorOnPtr_base ( P parPointer, difference_type parSize ); - IteratorOnPtr_base ( const IteratorOnPtr_base& parOther ); - template - explicit IteratorOnPtr_base ( const IteratorOnPtr_base& parOther ); - ~IteratorOnPtr_base ( void ); - - difference_type operator- ( const IteratorOnPtr_base& parOther ) const; - - bool operator== ( const IteratorOnPtr_base& parOther ) const { return m_pointer == parOther.m_pointer; } - bool operator!= ( const IteratorOnPtr_base& parOther ) const { return not operator==(parOther); } - bool operator< ( const IteratorOnPtr_base& parOther ) const { return m_pointer < parOther.m_pointer; } - bool operator>= ( const IteratorOnPtr_base& parOther ) const { return not operator<(parOther); } - bool operator> ( const IteratorOnPtr_base& parOther ) const { return parOther < *this; } - bool operator<= ( const IteratorOnPtr_base& parOther ) const { return not operator>(parOther); } - - P GetPointer ( void ) { return m_pointer; } - const P GetPointer ( void ) const { return m_pointer; } -#if !defined(NDEBUG) - difference_type GetSize ( void ) const { return GetSize(0); } -#endif - - protected: - enum { - STEP = (I < 0 ? -I : I) - }; - -#if !defined(NDEBUG) - difference_type GetSize ( difference_type parAdvance ) const; - bool CanAdvance ( difference_type parAdvance ) const; - void AlterSize ( difference_type parAdvance ); -#endif - void MoveIterator ( difference_type parAdvance ); - - P m_pointer; - - private: -#if !defined(NDEBUG) - difference_type m_size; -#endif - }; - } //namespace implem_iop - - template - class IteratorOnPtr : public implem_iop::IteratorOnPtr_base { - typedef implem_iop::IteratorOnPtr_base parent_type; - enum { - STEP = parent_type::STEP - }; - public: - typedef typename parent_type::iterator_category iterator_category; - typedef typename parent_type::value_type value_type; - typedef typename parent_type::difference_type difference_type; - typedef typename parent_type::pointer pointer; - typedef typename parent_type::reference reference; - - IteratorOnPtr ( void ); - IteratorOnPtr ( P parPointer, difference_type parSize ); - IteratorOnPtr ( const IteratorOnPtr& parOther ) : parent_type(parOther) { return; } - template - IteratorOnPtr ( const IteratorOnPtr& parOther ) : parent_type(parOther) {} - ~IteratorOnPtr ( void ); - - IteratorOnPtr& operator++ ( void ); //pre - IteratorOnPtr operator++ ( int ); //post - IteratorOnPtr& operator-- ( void ); - IteratorOnPtr operator-- ( int ); - reference operator* ( void ); - pointer operator-> ( void ); - - using parent_type::operator-; - IteratorOnPtr operator+ ( difference_type parOther ) const; - IteratorOnPtr operator- ( difference_type parOther ) const; - IteratorOnPtr& operator+= ( difference_type parOther ); - IteratorOnPtr& operator-= ( difference_type parOther ); - protected: - private: - }; - - namespace implem_iop { - ///--------------------------------------------------------------------- - ///--------------------------------------------------------------------- - template -#if !defined(NDEBUG) - IteratorOnPtr_base::IteratorOnPtr_base (P parPointer, difference_type parSize) : - m_pointer(parPointer), - m_size(parSize) -#else - IteratorOnPtr_base::IteratorOnPtr_base (P parPointer, difference_type) : - m_pointer(parPointer) -#endif - { - static_assert(I != 0, "Step must be non-zero"); - } - - ///--------------------------------------------------------------------- - ///--------------------------------------------------------------------- - template - template - IteratorOnPtr_base::IteratorOnPtr_base (const IteratorOnPtr_base& parOther) { - m_pointer = parOther.GetPointer(); -#if !defined(NDEBUG) - m_size = parOther.GetSize(); -#endif - } - - ///--------------------------------------------------------------------- - ///--------------------------------------------------------------------- - template - IteratorOnPtr_base::IteratorOnPtr_base (const IteratorOnPtr_base& parOther) { - m_pointer = parOther.m_pointer; -#if !defined(NDEBUG) - m_size = parOther.m_size; -#endif - } - - ///--------------------------------------------------------------------- - ///--------------------------------------------------------------------- - template - IteratorOnPtr_base::~IteratorOnPtr_base() { - } - - ///--------------------------------------------------------------------- - ///--------------------------------------------------------------------- - template - typename IteratorOnPtr_base::difference_type IteratorOnPtr_base::operator- (const IteratorOnPtr_base& parOther) const { - if (I > 0) - return m_pointer - parOther.m_pointer; - else - return parOther.m_pointer - m_pointer; - } - -#if !defined(NDEBUG) - ///--------------------------------------------------------------------- - ///--------------------------------------------------------------------- - template - typename IteratorOnPtr_base::difference_type IteratorOnPtr_base::GetSize (difference_type parAdvance) const { - return m_size - STEP * parAdvance; - } - - ///--------------------------------------------------------------------- - ///--------------------------------------------------------------------- - template - bool IteratorOnPtr_base::CanAdvance (difference_type parAdvance) const { - return (m_size >= STEP * parAdvance); - } - - ///--------------------------------------------------------------------- - ///--------------------------------------------------------------------- - template - void IteratorOnPtr_base::AlterSize (difference_type parAdvance) { - m_size = GetSize(parAdvance); - } -#endif - - ///--------------------------------------------------------------------- - ///--------------------------------------------------------------------- - template - void IteratorOnPtr_base::MoveIterator (difference_type parAdvance) { -#if !defined(NDEBUG) - assert(CanAdvance(parAdvance)); - AlterSize(parAdvance); -#endif - m_pointer += I * parAdvance; - } - } //namespace implem_iop - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - IteratorOnPtr::IteratorOnPtr() : - parent_type(NULL, 0) - { - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - IteratorOnPtr::IteratorOnPtr (P parPointer, difference_type parSize) : - parent_type(parPointer, parSize) - { - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - IteratorOnPtr::~IteratorOnPtr() { - } - - ///------------------------------------------------------------------------- - ///Pre-increment. - ///------------------------------------------------------------------------- - template - IteratorOnPtr& IteratorOnPtr::operator++() { - this->MoveIterator(1); - return *this; - } - - ///------------------------------------------------------------------------- - ///Post-increment. - ///------------------------------------------------------------------------- - template - IteratorOnPtr IteratorOnPtr::operator++ (int) { - IteratorOnPtr retVal(*this); - this->MoveIterator(1); - return retVal; - } - - ///------------------------------------------------------------------------- - ///Pre-decrement. - ///------------------------------------------------------------------------- - template - IteratorOnPtr& IteratorOnPtr::operator--() { - this->MoveIterator(-1); - return *this; - } - - ///------------------------------------------------------------------------- - ///Post-decrement. - ///------------------------------------------------------------------------- - template - IteratorOnPtr IteratorOnPtr::operator-- (int) { - IteratorOnPtr retVal(*this); - this->MoveIterator(-1); - return retVal; - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - typename IteratorOnPtr::reference IteratorOnPtr::operator*() { - return *(this->m_pointer); - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - typename IteratorOnPtr::pointer IteratorOnPtr::operator->() { - return this->m_pointer; - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - IteratorOnPtr IteratorOnPtr::operator+ (difference_type parOther) const { - IteratorOnPtr retVal(*this); - retVal += parOther; - return retVal; - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - IteratorOnPtr IteratorOnPtr::operator- (difference_type parOther) const { - IteratorOnPtr retVal(*this); - retVal -= parOther; - return retVal; - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - IteratorOnPtr& IteratorOnPtr::operator+= (difference_type parOther) { - this->MoveIterator(parOther); - return *this; - } - - ///------------------------------------------------------------------------- - ///------------------------------------------------------------------------- - template - IteratorOnPtr& IteratorOnPtr::operator-= (difference_type parOther) { - this->MoveIterator(-parOther); - return *this; - } -} //namespace dinhelp - -#endif diff --git a/include/helpers/infix_iterator.hpp b/include/helpers/infix_iterator.hpp deleted file mode 100644 index ca65e34..0000000 --- a/include/helpers/infix_iterator.hpp +++ /dev/null @@ -1,48 +0,0 @@ -// see http://stackoverflow.com/questions/3496982/printing-lists-with-commas-c/3497021#3497021 -// infix_iterator.h -// -// Lifted from Jerry Coffin's 's prefix_ostream_iterator -#if !defined(INFIX_ITERATOR_H_) -#define INFIX_ITERATOR_H_ -#include -#include -template > -class infix_ostream_iterator : - public std::iterator -{ - std::basic_ostream *os; - charT const* delimiter; - bool first_elem; -public: - typedef charT char_type; - typedef traits traits_type; - typedef std::basic_ostream ostream_type; - infix_ostream_iterator(ostream_type& s) - : os(&s),delimiter(0), first_elem(true) - {} - infix_ostream_iterator(ostream_type& s, charT const *d) - : os(&s),delimiter(d), first_elem(true) - {} - infix_ostream_iterator& operator=(T const &item) - { - // Here's the only real change from ostream_iterator: - // Normally, the '*os << item;' would come before the 'if'. - if (!first_elem && delimiter != 0) - *os << delimiter; - *os << item; - first_elem = false; - return *this; - } - infix_ostream_iterator &operator*() { - return *this; - } - infix_ostream_iterator &operator++() { - return *this; - } - infix_ostream_iterator &operator++(int) { - return *this; - } -}; -#endif diff --git a/include/helpers/lengthof.h b/include/helpers/lengthof.h deleted file mode 100644 index 45e78c3..0000000 --- a/include/helpers/lengthof.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright 2015, 2016, Michele Santullo - * This file is part of "dindexer". - * - * "dindexer" is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * "dindexer" is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with "dindexer". If not, see . - */ - -#ifndef id19B690A53A9546D5BD95D89FFF388283 -#define id19B690A53A9546D5BD95D89FFF388283 - -#if defined(__cplusplus) -# include -#else -# include -#endif - -#if defined(lengthof) -# undef lengthof -#endif -//http://stackoverflow.com/questions/4415524/common-array-length-macro-for-c#4415646 -#if defined(__cplusplus) -# define lengthof(x) ((sizeof(x)/sizeof(0[x])) / ((std::size_t)(!(sizeof(x) % sizeof(0[x]))))) -#else -# define lengthof(x) ((sizeof(x)/sizeof(0[x])) / ((size_t)(!(sizeof(x) % sizeof(0[x]))))) -#endif - -#endif diff --git a/include/helpers/lexical_cast.hpp b/include/helpers/lexical_cast.hpp deleted file mode 100644 index f5bced8..0000000 --- a/include/helpers/lexical_cast.hpp +++ /dev/null @@ -1,304 +0,0 @@ -/* Copyright 2015, 2016, Michele Santullo - * This file is part of "dindexer". - * - * "dindexer" is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * "dindexer" is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with "dindexer". If not, see . - */ - -#ifndef id942A6B5AB2AF443C82D4321775BFC9E8 -#define id942A6B5AB2AF443C82D4321775BFC9E8 - -#include "compatibility.h" -#include "helpers/sequence_bt.hpp" -#include "helpers/MaxSizedArray.hpp" -#include "sprout/math/log10.hpp" -#include "sprout/math/log2.hpp" -#include "sprout/math/pow.hpp" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace dinhelp { - namespace customize { - template - struct index_array_to_string; - - template - struct char_to_int; - } //namespace customize - - namespace implem { - template - typename std::make_unsigned::type abs ( T parValue ) a_pure; - - template int count_leading_zeroes ( typename std::enable_if::is_signed, T>::type parValue ) a_always_inline; - template int count_leading_zeroes ( typename std::enable_if::is_signed, T>::type parValue ) a_always_inline; - int count_leading_zeroes_overload ( unsigned char parValue ) a_always_inline; - int count_leading_zeroes_overload ( unsigned short int parValue ) a_always_inline; - int count_leading_zeroes_overload ( unsigned int parValue ) a_always_inline; - int count_leading_zeroes_overload ( unsigned long parValue ) a_always_inline; - int count_leading_zeroes_overload ( unsigned long long parValue ) a_always_inline; - - template - struct power { - enum { value = Base * power::value }; - }; - template - struct power { - enum { value = 1 }; - }; - - template ::is_signed> - struct is_negative; - template - struct is_negative { - static int check (T parValue) { return (parValue < 0 ? 1 : 0); } - }; - template - struct is_negative { - static constexpr int check (T) { return 0; } - }; - - template