// ************************************************************************** // * This file is part of the FreeFileSync project. It is distributed under * // * GNU General Public License: http://www.gnu.org/licenses/gpl.html * // * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * // ************************************************************************** #ifndef ZSTRING_H_INCLUDED #define ZSTRING_H_INCLUDED #include "string_base.h" #ifdef FFS_LINUX #include //strcmp #elif defined FFS_MAC #include //strcasecmp #endif #ifndef NDEBUG namespace z_impl { void leakCheckerInsert(const void* ptr, size_t size); void leakCheckerRemove(const void* ptr); } #endif //NDEBUG class AllocatorFreeStoreChecked { public: static void* allocate(size_t size) //throw std::bad_alloc { void* newMem = ::operator new(size); #ifndef NDEBUG z_impl::leakCheckerInsert(newMem, size); //test Zbase for memory leaks #endif return newMem; } static void deallocate(void* ptr) { #ifndef NDEBUG z_impl::leakCheckerRemove(ptr); //check for memory leaks #endif ::operator delete(ptr); } static size_t calcCapacity(size_t length) { return std::max(16, length + length / 2); } //exponential growth + min size }; //############################## helper functions ############################################# #ifdef FFS_WIN //Windows encodes Unicode as UTF-16 wchar_t typedef wchar_t Zchar; #define Zstr(x) L ## x const Zchar FILE_NAME_SEPARATOR = L'\\'; #elif defined FFS_LINUX || defined FFS_MAC //Linux uses UTF-8 typedef char Zchar; #define Zstr(x) x const Zchar FILE_NAME_SEPARATOR = '/'; #endif //"The reason for all the fuss above" - Loki/SmartPtr //a high-performance string for interfacing with native OS APIs and multithreaded contexts typedef zen::Zbase Zstring; //Compare filenames: Windows does NOT distinguish between upper/lower-case, while Linux DOES template