Wolfgang Thallergcc 15.1.0ada185d1 year agoHistory
119 lines · 2.9 KB · D
RawDownload
/** * D header file for interaction with C++ std::string_view. * * Copyright: Copyright (c) 2018 D Language Foundation * License: Distributed under the *      $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0). *    (See accompanying file LICENSE) * Authors:   Manu Evans * Source:    $(DRUNTIMESRC core/stdcpp/string_view.d) */ module core.stdcpp.string_view; import core.stdc.stddef : wchar_t;import core.stdcpp.xutility : StdNamespace; extern(C++, (StdNamespace)):@nogc: ///alias string_view = basic_string_view!char;///alias u16string_view = basic_string_view!wchar;///alias u32string_view = basic_string_view!dchar;///alias wstring_view = basic_string_view!wchar_t;  /** * Character traits classes specify character properties and provide specific * semantics for certain operations on characters and sequences of characters. */extern(C++, struct) struct char_traits(CharT) {}  /*** D language counterpart to C++ std::basic_string_view.** C++ reference: $(LINK2 https://en.cppreference.com/w/cpp/string/basic_string_view, std::basic_string_view)*/extern(C++, class) struct basic_string_view(T, Traits = char_traits!T){extern(D):pragma(inline, true):pure nothrow @nogc:     ///    enum size_type npos = size_type.max;     ///    alias size_type = size_t;    ///    alias difference_type = ptrdiff_t;    ///    alias value_type = T;    ///    alias pointer = T*;    ///    alias const_pointer = const(T)*;     ///    alias as_array this;    ///    alias toString = as_array;     ///    this(const(T)[] str) @trusted                   { __data = str.ptr; __size = str.length; }     ///    alias length = size;    ///    alias opDollar = length;    ///    size_type size() const @safe                    { return __size; }    ///    bool empty() const @safe                        { return __size == 0; }     ///    const(T)* data() const @safe                    { return __data; }    ///    const(T)[] as_array() const @trusted            { return __data[0 .. __size]; }     ///    ref const(T) at(size_type i) const @trusted     { return __data[0 .. __size][i]; }     ///    ref const(T) front() const @safe                { return this[0]; }    ///    ref const(T) back() const @safe                 { return this[$-1]; } private:    // use the proper field names from C++ so debugging doesn't get weird    version (CppRuntime_Microsoft)    {        const_pointer _Mydata;        size_type _Mysize;         alias __data = _Mydata;        alias __size = _Mysize;    }    else version (CppRuntime_GNU)    {        size_t _M_len;        const(T)* _M_str;         alias __data = _M_str;        alias __size = _M_len;    }    else version (CppRuntime_LLVM)    {        const value_type* __data;        size_type __size;    }    else    {        static assert(false, "C++ runtime not supported");    }}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t