Report a bug
If you spot a problem with this page, click here to create a GitHub issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.

mir.small_string

Small String

The module contains self-contained generic small string implementaton.
SmallString supports ASDF - Json Serialisation Library.
See also include/mir/small_series.h for a C++ version of this type. Both C++ and D implementations have the same ABI and name mangling.
Authors:
Ilia Ki
struct SmallString(uint maxLength) if (maxLength);
Self-contained generic Small String implementaton.
Examples:
SmallString!16 s16;
assert(s16.empty);

auto s8 = SmallString!8("Hellow!!");
assert(s8 == "Hellow!!");
assert(s8[] == "Hellow!!");
assert(s8[0 .. $] == "Hellow!!");
assert(s8[1 .. 4] == "ell");

s16 = s8;
assert(s16 == "Hellow!!");
s16[7] = '@';
s8 = null;
assert(s8.empty);
s8 = s16;
assert(s8 == "Hellow!@");

auto s8_2 = s8;
assert(s8_2 == "Hellow!@");
assert(s8_2 == s8);

assert(s8 < "Hey");
assert(s8 > "Hellow!");

assert(s8.opCmp("Hey") < 0);
assert(s8.opCmp(s8) == 0);
Examples:
Concatenation
auto a = SmallString!16("asdf");
a ~= " ";
auto b = a ~ "qwerty";
static assert(is(typeof(b) == SmallString!16));
assert(b == "asdf qwerty");
b.put('!');
b.put("!");
assert(b == "asdf qwerty!!");
this(typeof(null)) scope;

this(scope const(char)[] str) scope;

this(uint n)(auto ref scope const SmallString!n str) scope;

this(Range)(auto ref scope Range str) scope
if (isIterable!Range);
Constructor
ref typeof(this) opAssign(typeof(null)) scope return;

ref @trusted typeof(this) opAssign(scope const(char)[] str) scope return;

ref typeof(this) opAssign(uint n)(auto ref scope const SmallString!n rhs) scope return
if (n != maxLength);

ref typeof(this) opAssign(uint n)(const SmallString!n rhs) scope return
if (n != maxLength);

nothrow @trusted void trustedAssign(scope const(char)[] str) return;
= operator
ref @trusted typeof(this) append(char c);
ref @trusted typeof(this) append(scope const(char)[] str);

alias put = append;

template opOpAssign(string op : "~")
const SmallString concat(scope const(char)[] str) scope;

template opBinary(string op : "~")
const nothrow @safe size_t toHash();
inout @trusted inout(char)[] opIndex() scope return;
Returns an scope common string.
The method implement with [] operation.
inout ref inout(char) opIndex(size_t index) scope return;
inout @trusted inout(char)[] opIndex(size_t[2] range) scope return;

size_t[2] opSlice(size_t pos : 0)(size_t i, size_t j);
Returns a common scope string.
The method implement with [i .. j] operation.
@property bool empty();
@property size_t length();

template opDollar(size_t pos : 0)
alias toString = opIndex;
bool opEquals(ref scope const SmallString rhs);

bool opEquals(SmallString rhs);

bool opEquals(uint rhsMaxLength)(auto ref scope const SmallString!rhsMaxLength rhs)
if (rhsMaxLength != maxLength);

bool opEquals()(scope const(char)[] str);

int opCmp(uint rhsMaxLength)(auto ref scope const SmallString!rhsMaxLength rhs);

int opCmp()(scope const(char)[] str);
Comparisons operator overloads