ALib C++ Library
Library Version: 2510 R0
Documentation generated by doxygen
Loading...
Searching...
No Matches
strings.prepro.hpp
Go to the documentation of this file.
1//==================================================================================================
2/// \file
3/// This header-file is part of the \aliblong.
4///
5/// \emoji :copyright: 2013-2025 A-Worx GmbH, Germany.
6/// Published under \ref mainpage_license "Boost Software License".
7//==================================================================================================
8#ifndef HPP_ALIB_STRINGS_PP
9#define HPP_ALIB_STRINGS_PP
10#pragma once
11#ifndef INL_ALIB
12# include "alib/alib.inl"
13#endif
14
15
16// #################################################################################################
17// Symbols introduced by module ALib.Strings
18// #################################################################################################
19
20// ALIB_DEBUG_STRINGS
21#if !ALIB_STRINGS
22# define ALIB_DEBUG_STRINGS 0
23#elif !defined(ALIB_DEBUG_STRINGS)
24# define ALIB_DEBUG_STRINGS 0
25#elif !ALIB_DEBUG && ALIB_DEBUG_STRINGS
26# undef ALIB_DEBUG_STRINGS
27# define ALIB_DEBUG_STRINGS 0
28# pragma message "Symbol ALIB_DEBUG_STRINGS set (from outside!) while ALIB_DEBUG is not. The symbol got disabled."
29#endif
30
31#if ALIB_STRINGS
32
33#if ALIB_DEBUG_STRINGS
34# define ALIB_STRING_DBG_CHK(instance) { (instance)->dbgCheck(); }
35#else
36# define ALIB_STRING_DBG_CHK(instance)
37#endif
38
39
40#if !ALIB_CHARACTERS_WIDE
41# define ALIB_STRINGS_TO_NARROW( src,dest,bufSize ) decltype(src)& dest(src);
42# define ALIB_STRINGS_TO_NARROW_ARG( src,bufSize ) src;
43# define ALIB_STRINGS_TO_WIDE( src,dest,bufSize ) alib::strings::TLocalString<wchar,bufSize> dest(src);
44# define ALIB_STRINGS_TO_WIDE_ARG( src,bufSize ) alib::strings::TLocalString<wchar,bufSize>(src);
45# define ALIB_STRINGS_FROM_NARROW( src,dest,bufSize ) decltype(src)& dest(src);
46# define ALIB_STRINGS_FROM_NARROW_ARG( src,bufSize ) src;
47# define ALIB_STRINGS_FROM_WIDE( src,dest,bufSize ) alib::strings::TLocalString<nchar,bufSize> dest(src);
48# define ALIB_STRINGS_FROM_WIDE_ARG src,bufSize ) alib::strings::TLocalString<nchar,bufSize>(src);
49#else
50# define ALIB_STRINGS_TO_NARROW( src,dest,bufSize ) alib::strings::TLocalString<nchar,bufSize> dest(src);
51# define ALIB_STRINGS_TO_NARROW_ARG( src,bufSize ) alib::strings::TLocalString<nchar,bufSize>(src);
52# define ALIB_STRINGS_TO_WIDE( src,dest,bufSize ) decltype(src)& dest= src;
53# define ALIB_STRINGS_TO_WIDE_ARG( src,bufSize ) src;
54# define ALIB_STRINGS_FROM_NARROW( src,dest,bufSize ) alib::strings::TLocalString<wchar,bufSize> dest(src);
55# define ALIB_STRINGS_FROM_NARROW_ARG( src,bufSize ) alib::strings::TLocalString<wchar,bufSize>(src);
56# define ALIB_STRINGS_FROM_WIDE( src,dest,bufSize ) decltype(src)& dest= src;
57# define ALIB_STRINGS_FROM_WIDE_ARG( src,bufSize ) src;
58#endif
59
60#define ALIB_STRINGS_APPENDABLE_TYPE(TYPE) \
61namespace alib::strings { \
62template<> struct AppendableTraits<TYPE, alib::character, alib::lang::HeapAllocator> {\
63 ALIB_DLL void operator()(TAString<alib::character, alib::lang::HeapAllocator>&, const TYPE& ); \
64};}
65
66#define ALIB_STRINGS_APPENDABLE_TYPE_N(TYPE) \
67namespace alib::strings { \
68template<> struct AppendableTraits<TYPE, alib::nchar, alib::lang::HeapAllocator> {\
69 ALIB_DLL void operator()( TAString<alib::nchar, alib::lang::HeapAllocator>&, const TYPE& ); \
70};}
71
72#define ALIB_STRINGS_APPENDABLE_TYPE_W(TYPE) \
73namespace alib::strings { \
74template<> struct AppendableTraits<TYPE, alib::wchar, alib::lang::HeapAllocator> {\
75 ALIB_DLL void operator()( TAString<alib::wchar, alib::lang::HeapAllocator>&, const TYPE&); \
76};}
77
78#define ALIB_STRINGS_APPENDABLE_TYPE_DEF(TYPE, IMPL) \
79void alib::strings::AppendableTraits<TYPE,alib::character, alib::lang::HeapAllocator> \
80 ::operator()( TAString<alib::character, alib::lang::HeapAllocator>& target, const TYPE& src){IMPL}
81
82#define ALIB_STRINGS_APPENDABLE_TYPE_DEF_N(TYPE, IMPL) \
83void alib::strings::AppendableTraits<TYPE,alib::nchar, alib::lang::HeapAllocator> \
84 ::operator()( TAString<alib::nchar, alib::lang::HeapAllocator>& target, const TYPE& src) {IMPL}
85
86#define ALIB_STRINGS_APPENDABLE_TYPE_DEF_W(TYPE, IMPL) \
87void alib::strings::AppendableTraits<TYPE,alib::wchar, alib::lang::HeapAllocator> \
88 ::operator()( TAString<alib::wchar, alib::lang::HeapAllocator>& target, const TYPE& src) {IMPL}
89
90
91#define ALIB_STRINGS_APPENDABLE_TYPE_INLINE(TYPE, IMPL) \
92namespace alib::strings { \
93template<> struct AppendableTraits<TYPE,alib::character, alib::lang::HeapAllocator> {\
94 void operator()(TAString<alib::character, lang::HeapAllocator>& target, const TYPE& src) {IMPL}\
95};}
96
97#define ALIB_STRINGS_APPENDABLE_TYPE_INLINE_N(TYPE, IMPL) \
98namespace alib::strings { \
99template<> struct AppendableTraits<TYPE,alib::nchar, alib::lang::HeapAllocator> {\
100 void operator()(TAString<alib::nchar, alib::lang::HeapAllocator>& target, const TYPE& src){IMPL}\
101};}
102
103#define ALIB_STRINGS_APPENDABLE_TYPE_INLINE_W(TYPE, IMPL) \
104namespace alib::strings { \
105template<> struct AppendableTraits<TYPE,alib::wchar, alib::lang::HeapAllocator> {\
106 void operator()(TAString<alib::wchar, alib::lang::HeapAllocator>& target, const TYPE& src){IMPL}\
107};}
108
109#define ALIB_STRING_RESETTER(astring) \
110alib::strings::TStringLengthResetter< \
111 std::remove_reference_t<decltype(astring)>::value_type, \
112 std::remove_reference_t<decltype(astring)>::AllocatorType > \
113 ALIB_IDENTIFIER(astring)(astring)
114
115
116// #################################################################################################
117// Symbols introduced by module ALib.Strings.StdIOStream
118// #################################################################################################
119
120#define ALIB_STRINGS_SUPPRESS_STD_OSTREAM_OPERATOR(TYPE) \
121 namespace alib::strings::compatibility::std { \
122 template<> struct SuppressStdOStreamOpTraits<TYPE> : ::std::true_type {}; }
123
124
125
126#endif
127#endif // HPP_ALIB_STRINGS_PP
128
129