1 1.1 mrg 2 1.1.1.2 mrg /* Copyright (C) 1999-2022 by The D Language Foundation, All Rights Reserved 3 1.1 mrg * written by Walter Bright 4 1.1.1.2 mrg * https://www.digitalmars.com 5 1.1 mrg * Distributed under the Boost Software License, Version 1.0. 6 1.1.1.2 mrg * https://www.boost.org/LICENSE_1_0.txt 7 1.1 mrg * https://github.com/dlang/dmd/blob/master/src/dmd/root/dcompat.h 8 1.1 mrg */ 9 1.1 mrg 10 1.1 mrg #pragma once 11 1.1 mrg 12 1.1 mrg #include "dsystem.h" 13 1.1 mrg 14 1.1 mrg /// Represents a D [ ] array 15 1.1 mrg template<typename T> 16 1.1 mrg struct DArray 17 1.1 mrg { 18 1.1 mrg size_t length; 19 1.1 mrg T *ptr; 20 1.1.1.2 mrg 21 1.1.1.2 mrg DArray() : length(0), ptr(NULL) { } 22 1.1.1.2 mrg 23 1.1.1.2 mrg DArray(size_t length_in, T *ptr_in) 24 1.1.1.2 mrg : length(length_in), ptr(ptr_in) { } 25 1.1.1.2 mrg }; 26 1.1.1.2 mrg 27 1.1.1.2 mrg struct DString : public DArray<const char> 28 1.1.1.2 mrg { 29 1.1.1.2 mrg DString() : DArray<const char>() { } 30 1.1.1.2 mrg 31 1.1.1.2 mrg DString(const char *ptr) 32 1.1.1.2 mrg : DArray<const char>(ptr ? strlen(ptr) : 0, ptr) { } 33 1.1.1.2 mrg 34 1.1.1.2 mrg DString(size_t length, const char *ptr) 35 1.1.1.2 mrg : DArray<const char>(length, ptr) { } 36 1.1 mrg }; 37 1.1.1.2 mrg 38 1.1.1.2 mrg /// Corresponding C++ type that maps to D size_t 39 1.1.1.2 mrg #if __APPLE__ && __i386__ 40 1.1.1.2 mrg // size_t is 'unsigned long', which makes it mangle differently than D's 'uint' 41 1.1.1.2 mrg typedef unsigned d_size_t; 42 1.1.1.2 mrg #elif MARS && DMD_VERSION >= 2079 && DMD_VERSION <= 2081 && \ 43 1.1.1.2 mrg __APPLE__ && __SIZEOF_SIZE_T__ == 8 44 1.1.1.2 mrg // DMD versions between 2.079 and 2.081 mapped D ulong to uint64_t on OS X. 45 1.1.1.2 mrg typedef uint64_t d_size_t; 46 1.1.1.2 mrg #elif defined(__OpenBSD__) && !defined(__LP64__) 47 1.1.1.2 mrg // size_t is 'unsigned long', which makes it mangle differently than D's 'uint' 48 1.1.1.2 mrg typedef unsigned d_size_t; 49 1.1.1.2 mrg #else 50 1.1.1.2 mrg typedef size_t d_size_t; 51 1.1.1.2 mrg #endif 52