8 #ifndef BOOST_NOWIDE_STACKSTRING_HPP_INCLUDED 9 #define BOOST_NOWIDE_STACKSTRING_HPP_INCLUDED 11 #include <boost/nowide/convert.hpp> 30 template<
typename CharOut =
wchar_t,
typename CharIn =
char,
size_t BufferSize = 256>
34 static const size_t buffer_size = BufferSize;
35 typedef CharOut output_char;
36 typedef CharIn input_char;
60 const size_t len = other.length();
64 data_ =
new output_char[len + 1];
70 std::memcpy(data_, other.data_,
sizeof(output_char) * (len + 1));
80 output_char* convert(
const input_char* input)
83 return convert(input, input + detail::strlen(input));
87 output_char* convert(
const input_char* begin,
const input_char* end)
93 const size_t input_len = end - begin;
95 const size_t min_output_size = input_len + 1;
97 if(min_output_size <= buffer_size && detail::convert_buffer(buffer_, buffer_size, begin, end))
103 const size_t max_output_size = input_len * detail::utf::utf_traits<output_char>::max_width + 1;
104 data_ =
new output_char[max_output_size];
105 const bool success = detail::convert_buffer(data_, max_output_size, begin, end) == data_;
118 const output_char*
get()
const 129 friend void swap(basic_stackstring& lhs, basic_stackstring& rhs)
131 if(lhs.uses_stack_memory())
133 if(rhs.uses_stack_memory())
135 for(
size_t i = 0; i < buffer_size; i++)
136 std::swap(lhs.buffer_[i], rhs.buffer_[i]);
139 lhs.data_ = rhs.data_;
140 rhs.data_ = rhs.buffer_;
141 for(
size_t i = 0; i < buffer_size; i++)
142 rhs.buffer_[i] = lhs.buffer_[i];
144 }
else if(rhs.uses_stack_memory())
146 rhs.data_ = lhs.data_;
147 lhs.data_ = lhs.buffer_;
148 for(
size_t i = 0; i < buffer_size; i++)
149 lhs.buffer_[i] = rhs.buffer_[i];
151 std::swap(lhs.data_, rhs.data_);
158 return data_ == buffer_;
160 size_t length()
const 171 output_char buffer_[buffer_size];
basic_stackstring< wchar_t, char, 256 > wstackstring
Definition: stackstring.hpp:178
bool uses_stack_memory() const
True if the stack memory is used.
Definition: stackstring.hpp:156
basic_stackstring< char, wchar_t, 16 > short_stackstring
Definition: stackstring.hpp:190
basic_stackstring< wchar_t, char, 16 > wshort_stackstring
Definition: stackstring.hpp:186
basic_stackstring< char, wchar_t, 256 > stackstring
Definition: stackstring.hpp:182
const output_char * get() const
Return the converted, NULL-terminated string or NULL if no string was converted.
Definition: stackstring.hpp:118
A class that allows to create a temporary wide or narrow UTF strings from wide or narrow UTF source.
Definition: stackstring.hpp:31
output_char * get()
Return the converted, NULL-terminated string or NULL if no string was converted.
Definition: stackstring.hpp:113