Home | History | Annotate | Line # | Download | only in root
      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