Add string skeleton
This commit is contained in:
parent
b74e5aa4ee
commit
f4b90d8b51
77
source/tanya/container/string.d
Normal file
77
source/tanya/container/string.d
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copyright: Eugene Wissner 2016-2017.
|
||||||
|
* License: $(LINK2 https://www.mozilla.org/en-US/MPL/2.0/,
|
||||||
|
* Mozilla Public License, v. 2.0).
|
||||||
|
* Authors: $(LINK2 mailto:info@caraus.de, Eugene Wissner)
|
||||||
|
*/
|
||||||
|
module tanya.container.string;
|
||||||
|
|
||||||
|
import core.exception;
|
||||||
|
import core.stdc.string;
|
||||||
|
import tanya.memory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UTF-8 string.
|
||||||
|
*/
|
||||||
|
struct String
|
||||||
|
{
|
||||||
|
private char[] data;
|
||||||
|
private size_t length_;
|
||||||
|
|
||||||
|
invariant
|
||||||
|
{
|
||||||
|
assert(length_ <= data.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Ditto.
|
||||||
|
this(const(char)[] str, shared Allocator allocator = defaultAllocator)
|
||||||
|
nothrow @trusted @nogc
|
||||||
|
{
|
||||||
|
this(allocator);
|
||||||
|
|
||||||
|
data = cast(char[]) allocator.allocate(str.length);
|
||||||
|
if (str.length > 0 && data is null)
|
||||||
|
{
|
||||||
|
onOutOfMemoryErrorNoGC();
|
||||||
|
}
|
||||||
|
memcpy(data.ptr, str.ptr, str.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Ditto.
|
||||||
|
this(const(wchar)[] str, shared Allocator allocator = defaultAllocator)
|
||||||
|
nothrow @trusted @nogc
|
||||||
|
{
|
||||||
|
this(allocator);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Ditto.
|
||||||
|
this(const(dchar)[] str, shared Allocator allocator = defaultAllocator)
|
||||||
|
nothrow @trusted @nogc
|
||||||
|
{
|
||||||
|
this(allocator);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Ditto.
|
||||||
|
this(shared Allocator allocator) pure nothrow @safe @nogc
|
||||||
|
in
|
||||||
|
{
|
||||||
|
assert(allocator !is null);
|
||||||
|
}
|
||||||
|
body
|
||||||
|
{
|
||||||
|
allocator_ = allocator;
|
||||||
|
}
|
||||||
|
|
||||||
|
~this() nothrow @trusted @nogc
|
||||||
|
{
|
||||||
|
allocator.deallocate(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
mixin DefaultAllocator;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user