Add protocol property to the transport
Transport should be protocol aware because it should be possible to switch the protocol if the operation is supported, for example for upgrading HTTP to web sockets or HTTP 1.1 to HTTP/2.
This commit is contained in:
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;
|
||||
}
|
Reference in New Issue
Block a user