18template <
int KIND>
class Character {
19 using Word = Scalar<Type<TypeCategory::Character, KIND>>;
20 using CharT =
typename Word::value_type;
24 ~Character() =
default;
25 Character(
const Character &v) : word_(v) {}
26 Character(Character &&v) : word_(std::move(v)) {}
27 Character &operator=(
const Character &v) {
31 Character &operator=(Character &&v) {
32 word_ = std::move(v.word_);
37 Character() =
default;
38 Character(
const Word &v) : word_(v) {}
39 Character(Word &&v) : word_(std::move(v)) {}
40 Character &operator=(
const Word &v) { word_ = v; }
41 Character &operator=(Word &&v) { word_ = std::move(v); }
44 auto size()
const {
return word_.size(); }
49 CHECK(
size %
sizeof(CharT) == 0);
52 s.assign(
static_cast<const CharT *
>(raw),
size /
sizeof(CharT));
64 CHECK(
size %
sizeof(CharT) == 0);
66 std::size_t payloadSize{std::min(
size,
sizeof(CharT) * word_.size())};
67 std::size_t padSize{
size - payloadSize};
70 Word strWithPadding{word_};
71 strWithPadding.append(padSize /
sizeof(CharT),
static_cast<CharT
>(
' '));
74 if (std::memcmp(dst, strWithPadding.data(),
size) == 0) {
79 std::memcpy(dst, strWithPadding.data(),
size);