83#if defined( _MSC_VER )
84# define NFX_STRINGBUILDER_FORCE_INLINE __forceinline
85#elif defined( __GNUC__ ) || defined( __clang__ )
86# define NFX_STRINGBUILDER_FORCE_INLINE __attribute__( ( always_inline ) ) inline
88# define NFX_STRINGBUILDER_FORCE_INLINE inline
171 [[nodiscard]]
inline size_t size() const noexcept;
179 [[nodiscard]] inline
size_t capacity() const noexcept;
186 [[nodiscard]] inline
bool isEmpty() const noexcept;
198 [[nodiscard]] inline
char*
data() noexcept;
206 [[nodiscard]] inline const
char*
data() const noexcept;
214 inline
char& operator[](
size_t index );
222 inline const
char& operator[](
size_t index ) const;
518 template <typename T, typename... Args, typename = std::enable_if_t<( sizeof...( Args ) > 0 )>>
544 template <typename Container>
561 template <typename Container>
689 template <typename... Args>
701 [[nodiscard]] inline std::
string toString() const&;
788 static constexpr
size_t STACK_BUFFER_SIZE = 256;
801 static constexpr
size_t GROWTH_THRESHOLD = 8192;
802 static constexpr
double AGGRESSIVE_GROWTH_FACTOR = 2.0;
803 static constexpr
double STANDARD_GROWTH_FACTOR = 1.5;
806 alignas( 32 )
char m_stackBuffer[STACK_BUFFER_SIZE];
809 std::unique_ptr<
char[]> m_heapBuffer;
831 void ensureCapacity(
size_t neededCapacity );
835#include "nfx/detail/string/StringBuilder.inl"
#define NFX_STRINGBUILDER_FORCE_INLINE
Cross-platform forced inline macro for critical hot-path methods.
void push_back(char c)
Appends single character to the buffer (for STL compatibility).
size_t capacity() const noexcept
Get current buffer capacity in bytes.
char * Iterator
Mutable iterator type for buffer traversal.
StringBuilder & format(std::format_string< Args... > fmt, Args &&... args)
Format and append text using std::format.
StringBuilder & appendLine(std::string_view str="")
Appends string_view contents followed by a newline character.
char * data() noexcept
Get mutable pointer to buffer data.
StringBuilder & prepend(std::string_view str)
Prepends string_view contents to the buffer.
size_t size() const noexcept
Get current buffer size in bytes.
std::string toString() const &
Convert buffer content to std::string.
ConstIterator const_iterator
Type alias for const iterator.
bool isEmpty() const noexcept
Check if buffer is empty.
StringBuilder(const StringBuilder &other)
Copy constructor.
StringBuilder & operator=(const StringBuilder &other)
Copy assignment operator.
StringBuilder(StringBuilder &&other) noexcept
Move constructor.
std::string_view toStringView() const noexcept
Get string_view of buffer content.
Iterator begin() noexcept
Get mutable iterator to beginning of buffer.
StringBuilder(size_t initialCapacity)
Constructor with specified initial capacity.
const char * ConstIterator
Immutable iterator type for buffer traversal.
void reserve(size_t newCapacity)
Reserve minimum capacity for buffer.
StringBuilder & join(const Container &items, std::string_view delimiter)
Join container elements with delimiter.
char value_type
Character type for iterator compatibility.
StringBuilder & operator=(StringBuilder &&other) noexcept
Move assignment operator.
void resize(size_t newSize)
Resize buffer to specified size.
~StringBuilder()=default
Destructor.
Iterator end() noexcept
Get mutable iterator to end of buffer.
void clear() noexcept
Clear buffer content without deallocating memory.
StringBuilder & append(std::string_view str)
Appends string_view contents to the buffer efficiently.
StringBuilder()
Default constructor.
Iterator iterator
Type alias for iterator.