ALib C++ Library
by
Library Version:
2412 R0
Documentation generated by
Loading...
Searching...
No Matches
home
dev
A-Worx
ALib
src
alib
strings
stringnzt.hpp
Go to the documentation of this file.
1
//==================================================================================================
2
/// \file
3
/// This header file is part of module \alib_strings of the \aliblong.
4
///
5
/// \emoji :copyright: 2013-2024 A-Worx GmbH, Germany.
6
/// Published under \ref mainpage_license "Boost Software License".
7
//==================================================================================================
8
#ifndef HPP_ALIB_STRINGS_STRINGNZT
9
#define HPP_ALIB_STRINGS_STRINGNZT 1
10
#pragma once
11
#include "
alib/strings/string.hpp
"
12
13
14
namespace
alib
{
namespace
strings {
15
16
//==================================================================================================
17
/// This is rather a helper-class than a genuine string class. While derived from class \b String,
18
/// no extension of its interface is offered. Instead, the templated constructor is limited to
19
/// accept only string-types that are not zero-terminated.
20
///
21
/// The class is designed to be used to create API interfaces (i.e., overloaded methods) that accept
22
/// zero-terminated strings of type \alib{strings;TCString;CString} independently from
23
/// non-zero-terminated strings: If two overloaded methods accepted type \c String and \c CString
24
/// alternatively, compilation would be ambiguous because the \b String version would accept
25
/// zero-terminated strings as well. Therefore, overloaded methods rather must accept this class
26
/// and \b CString.
27
///
28
/// \see
29
/// Details and a quick sample are given in chapter
30
/// \ref alib_strings_nzt "4. Non-Zero-Terminated String Detection" of the
31
/// \ref alib_mod_strings "Programmer's Manual" of module \alib_strings_nl.
32
///
33
/// @tparam TChar The \ref alib_characters_chars "character type" of this string.
34
/// Alias names of this class using different character types are provided
35
/// with in namespace #alib with type definitions
36
/// \alib{StringNZT},
37
/// \alib{NStringNZT},
38
/// \alib{WStringNZT}, and
39
/// \alib{XStringNZT}.
40
//==================================================================================================
41
template
<
typename
TChar>
42
class
TStringNZT
:
public
TString
<TChar>
43
{
44
public
:
45
46
//==========================================================================================
47
/// Constructor accepting a pointer to a character array and a string length.
48
///
49
/// @param pBuffer Pointer to the start of the character string to represent.
50
/// @param pLength The length of the character string to represent.
51
//==========================================================================================
52
constexpr
53
TStringNZT
(
const
TChar* pBuffer,
integer
pLength )
54
:
TString
<TChar>( pBuffer, pLength)
55
{}
56
57
58
#if DOXYGEN
59
//==========================================================================================
60
/// Templated constructor that accepts C++ string-types which are not zero-terminated.
61
///
62
/// @tparam TCharArray Type that comprises a non-zero-terminated character array.
63
/// @param src The source object.
64
//==========================================================================================
65
template
<
typename
TCharArray>
66
inline
67
constexpr
68
TStringNZT
(
const
TCharArray& src );
69
70
71
#else
// doxygen end
72
73
ATMP_SELECT_IF_1TP
(
typename
T,
characters::T_CharArray
<
ATMP_RCV
(T),TChar>::Access ==
characters::AccessType::Implicit
74
&&
characters::T_ZTCharArray
<
ATMP_RCV
(T),TChar>::Access !=
characters::AccessType::Implicit
)
75
constexpr
76
TStringNZT
(
const
T& src)
77
:
TString
<TChar>( characters::T_CharArray<
ATMP_RCV
(T),TChar>::
Buffer
( src ),
78
characters::T_CharArray<
ATMP_RCV
(T),TChar>::
Length
( src ) )
79
{}
80
81
ATMP_SELECT_IF_1TP
(
typename
T,
characters::T_CharArray
<
ATMP_RCV
(T),TChar>::Access ==
characters::AccessType::Implicit
82
&&
characters::T_ZTCharArray
<
ATMP_RCV
(T),TChar>::Access !=
characters::AccessType::Implicit
)
83
constexpr
84
TStringNZT
(
const
T* src)
85
:
TString
<TChar>( characters::T_CharArray<
ATMP_RCV
(T),TChar>::
Buffer
( *src ),
86
characters::T_CharArray<
ATMP_RCV
(T),TChar>::
Length
( *src ) )
87
{}
88
89
ATMP_SELECT_IF_1TP
(
typename
T,
characters::T_CharArray
<
ATMP_RCV
(T),TChar>::Access ==
characters::AccessType::ExplicitOnly
)
90
constexpr
91
explicit
92
TStringNZT
(
const
T& src)
93
:
TString
<TChar>( characters::T_CharArray<
ATMP_RCV
(T),TChar>::
Buffer
( src ),
94
characters::T_CharArray<
ATMP_RCV
(T),TChar>::
Length
( src ) )
95
{}
96
97
ATMP_SELECT_IF_1TP
(
typename
T, characters::T_CharArray<
ATMP_RCV
(T),TChar>::Access ==
characters::AccessType::ExplicitOnly
)
98
constexpr
99
explicit
100
TStringNZT
(
const
T* src)
101
:
TString
<TChar>( characters::T_CharArray<
ATMP_RCV
(T),TChar>::
Buffer
( *src ),
102
characters::T_CharArray<
ATMP_RCV
(T),TChar>::
Length
( *src ) )
103
{}
104
105
ATMP_SELECT_IF_1TP
(
typename
T, characters::T_CharArray<
ATMP_RCV
(T),TChar>::Access ==
characters::AccessType::MutableOnly
&& !std::is_const<T>::value )
106
constexpr
107
explicit
108
TStringNZT
( T& src)
109
:
TString
<TChar>( characters::T_CharArray<
ATMP_RCV
(T),TChar>::
Buffer
( const_cast<T&>( src ) ),
110
characters::T_CharArray<
ATMP_RCV
(T),TChar>::
Length
( const_cast<T&>( src ) ) )
111
{}
112
113
ATMP_SELECT_IF_1TP
(
typename
T, characters::T_CharArray<
ATMP_RCV
(T),TChar>::Access ==
characters::AccessType::MutableOnly
&& !std::is_const<T>::value )
114
constexpr
115
explicit
116
TStringNZT
( T* src)
117
:
TString
<TChar>( characters::T_CharArray<
ATMP_RCV
(T),TChar>::
Buffer
( const_cast<T&>( *src ) ),
118
characters::T_CharArray<
ATMP_RCV
(T),TChar>::
Length
( const_cast<T&>( *src ) ) )
119
{}
120
121
#endif
// doxygen
122
};
// class TStringNZT
123
124
125
}}
// namespace [alib::strings]
126
127
128
#endif
// HPP_ALIB_STRINGS_STRINGNZT
129
alib::strings::TStringNZT
Definition
stringnzt.hpp:43
alib::strings::TStringNZT::TStringNZT
constexpr TStringNZT(const TChar *pBuffer, integer pLength)
Definition
stringnzt.hpp:53
alib::strings::TStringNZT::TStringNZT
constexpr TStringNZT(const TCharArray &src)
alib::strings::TString
Definition
string.hpp:63
alib::strings::TString::Length
constexpr integer Length() const
Definition
string.hpp:326
alib::strings::TString::TString
constexpr TString() noexcept=default
Defaulted default constructor.
alib::strings::TString::Buffer
constexpr const TChar * Buffer() const
Definition
string.hpp:319
ATMP_RCV
#define ATMP_RCV( T)
Definition
tmp.hpp:35
ATMP_SELECT_IF_1TP
#define ATMP_SELECT_IF_1TP(TParam, ...)
Definition
tmp.hpp:58
alib::characters::AccessType::ExplicitOnly
@ ExplicitOnly
Allows explicit access of the character array data from mutable or constant objects.
alib::characters::AccessType::Implicit
@ Implicit
alib::characters::AccessType::MutableOnly
@ MutableOnly
Allows explicit access of the character array data from mutable objects.
alib
Definition
alib.cpp:69
alib::integer
lang::integer integer
Type alias in namespace alib.
Definition
integers.hpp:273
string.hpp
alib::characters::T_CharArray
Definition
chartraits.hpp:254
alib::characters::T_ZTCharArray
Definition
chartraits.hpp:336