/* Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. This program 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; version 2 of the License. This program 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 this program; see the file COPYING. If not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */ /* mySTL helpers implements misc constructs for vector and list * */ #ifndef mySTL_HELPERS_HPP #define mySTL_HELPERS_HPP #include #ifdef _MSC_VER #include #endif /* Workaround for the lack of operator new(size_t, void*) in IBM VA C++ 6.0 Also used as a workaround to avoid including */ struct Dummy {}; inline void* operator new(size_t size, Dummy* d) { return static_cast(d); } // for compilers that want matching delete inline void operator delete(void* ptr, Dummy* d) { } typedef Dummy* yassl_pointer; namespace mySTL { template inline void construct(T* p, const T2& value) { new (reinterpret_cast(p)) T(value); } template inline void construct(T* p) { new (reinterpret_cast(p)) T(); } template inline void destroy(T* p) { p->~T(); } template void destroy(Iter first, Iter last) { while (first != last) { destroy(&*first); ++first; } } template PlaceIter uninit_copy(Iter first, Iter last, PlaceIter place) { while (first != last) { construct(&*place, *first); ++first; ++place; } return place; } template PlaceIter uninit_fill_n(PlaceIter place, Size n, const T& value) { while (n) { construct(&*place, value); --n; ++place; } return place; } template T* GetArrayMemory(size_t items) { unsigned char* ret; #ifdef YASSL_LIB ret = NEW_YS unsigned char[sizeof(T) * items]; #else ret = NEW_TC unsigned char[sizeof(T) * items]; #endif return reinterpret_cast(ret); } template void FreeArrayMemory(T* ptr) { unsigned char* p = reinterpret_cast(ptr); #ifdef YASSL_LIB yaSSL::ysArrayDelete(p); #else TaoCrypt::tcArrayDelete(p); #endif } inline void* GetMemory(size_t bytes) { return GetArrayMemory(bytes); } inline void FreeMemory(void* ptr) { FreeArrayMemory(ptr); } } // namespace mySTL #endif // mySTL_HELPERS_HPP