20#ifndef FASTCDR_UTILS_FIXED_SIZE_STRING_HPP_
21#define FASTCDR_UTILS_FIXED_SIZE_STRING_HPP_
27#define MEMCCPY _memccpy
29#define MEMCCPY memccpy
43template <
size_t MAX_CHARS>
54 memset(string_data, 0,
sizeof(string_data));
67 size_t n_chars)
noexcept
80 size_t n_chars)
noexcept
82 string_len = (
nullptr == c_array) ? 0 :
83 (MAX_CHARS < n_chars) ? MAX_CHARS : n_chars;
86 memcpy(string_data, c_array, string_len);
88 string_data[string_len] =
'\0';
97 const char* c_string) noexcept
100 set(c_string !=
nullptr ? c_string :
"");
109 const char* c_string)
noexcept
111 set(c_string !=
nullptr ? c_string :
"");
120 const std::string& str) noexcept
132 const std::string& str)
noexcept
165 return std::string(string_data);
174 const char* rhs)
const noexcept
176 return strncmp(string_data, rhs, MAX_CHARS) == 0;
185 const std::string& rhs)
const noexcept
187 return strncmp(string_data, rhs.c_str(), MAX_CHARS) == 0;
198 return strncmp(string_data, rhs.c_str(), MAX_CHARS) == 0;
207 const char* rhs)
const noexcept
209 return !(*
this == rhs);
218 const std::string& rhs)
const noexcept
220 return !(*
this == rhs);
231 return !(*
this == rhs);
262 const std::string& rhs)
const noexcept
273 const std::string& rhs)
const noexcept
281 operator const char* ()
const noexcept {
300 const char* str)
const noexcept
302 return strncmp(string_data, str, MAX_CHARS);
311 const std::string& str)
const noexcept
313 return strncmp(string_data, str.c_str(), MAX_CHARS);
324 return strncmp(string_data, str.c_str(), MAX_CHARS);
330 const char* c_string)
noexcept
332 char* result =
static_cast<char*
>(MEMCCPY(string_data, c_string,
'\0', MAX_CHARS));
333 string_len = (result ==
nullptr) ? MAX_CHARS : static_cast<size_t>(result - string_data) - 1u;
336 char string_data[MAX_CHARS + 1];
fixed_string< 255 > string_255
Definition fixed_size_string.hpp:340
Template class for non-alloc strings.
Definition fixed_size_string.hpp:45
fixed_string & operator=(const char *c_string) noexcept
Assigns from a C string.
Definition fixed_size_string.hpp:108
fixed_string() noexcept
Default constructor.
Definition fixed_size_string.hpp:52
size_t size() const noexcept
Returns the size of the string.
Definition fixed_size_string.hpp:289
fixed_string(const std::string &str) noexcept
Constructs from a std::string.
Definition fixed_size_string.hpp:119
bool operator==(const char *rhs) const noexcept
Compares equality with a C string.
Definition fixed_size_string.hpp:173
static constexpr size_t max_size
Definition fixed_size_string.hpp:49
int compare(const std::string &str) const noexcept
Compares with a std::string.
Definition fixed_size_string.hpp:310
std::string to_string() const
Converts to std::string.
Definition fixed_size_string.hpp:163
fixed_string(const char *c_array, size_t n_chars) noexcept
Constructs from a char array.
Definition fixed_size_string.hpp:65
const char * c_str() const noexcept
Converts to C string.
Definition fixed_size_string.hpp:154
fixed_string(const char *c_string) noexcept
Constructs from a C string.
Definition fixed_size_string.hpp:96
int compare(const fixed_string< N > &str) const noexcept
Compares with a fixed_string.
Definition fixed_size_string.hpp:321
bool operator>(const fixed_string< N > &rhs) const noexcept
Compares relational greater than with a fixed_string of any size.
Definition fixed_size_string.hpp:250
fixed_string & assign(const char *c_array, size_t n_chars) noexcept
Assigns from a char array.
Definition fixed_size_string.hpp:78
bool operator<(const fixed_string< N > &rhs) const noexcept
Compares relational less than with a fixed_string of any size.
Definition fixed_size_string.hpp:239
int compare(const char *str) const noexcept
Compares with a C string.
Definition fixed_size_string.hpp:299
bool operator!=(const char *rhs) const noexcept
Compares inequality with a C string.
Definition fixed_size_string.hpp:206