Advertisement
Guest User

Untitled

a guest
Nov 16th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
D 4.10 KB | None | 0 0
  1. import std;
  2.  
  3. void main()
  4. {
  5.     writeln("Hello D");
  6. }
  7.  
  8. // UnqualArray
  9. /++
  10.  +  Given an array of qualified elements, aliases itself to one such of
  11.  +  unqualified elements.
  12.  +
  13.  +  Params:
  14.  +      QualArray = Qualified array type.
  15.  +      QualType = Qualified type, element of `QualArray`.
  16.  +/
  17. template UnqualArray(QualArray : QualType[], QualType)
  18. if (!isAssociativeArray!QualType)
  19. {
  20.     alias UnqualArray = Unqual!QualType[];
  21. }
  22.  
  23. ///
  24. unittest
  25. {
  26.     alias ConstStrings = const(string)[];
  27.     alias UnqualStrings = UnqualArray!ConstStrings;
  28.     static assert(is(UnqualStrings == string[]));
  29.  
  30.     alias ImmChars = string;
  31.     alias UnqualChars = UnqualArray!ImmChars;
  32.     static assert(is(UnqualChars == char[]));
  33.  
  34.     alias InoutBools = inout(bool)[];
  35.     alias UnqualBools = UnqualArray!InoutBools;
  36.     static assert(is(UnqualBools == bool[]));
  37.  
  38.     alias ConstChars = const(char)[];
  39.     alias UnqualChars2 = UnqualArray!ConstChars;
  40.     static assert(is(UnqualChars2 == char[]));
  41. }
  42.  
  43.  
  44. // UnqualArray
  45. /++
  46.  +  Given an associative array with elements that have a storage class, aliases
  47.  +  itself to an associative array with elements without the storage classes.
  48.  +
  49.  +  Params:
  50.  +      QualArray = Qualified associative array type.
  51.  +      QualElem = Qualified type, element of `QualArray`.
  52.  +      QualKey = Qualified type, key of `QualArray`.
  53.  +/
  54. template UnqualArray(QualArray : QualElem[QualKey], QualElem, QualKey)
  55. if (!isArray!QualElem)
  56. {
  57.     alias UnqualArray = Unqual!QualElem[Unqual!QualKey];
  58. }
  59.  
  60. ///
  61. unittest
  62. {
  63.     alias ConstStringAA = const(string)[int];
  64.     alias UnqualStringAA = UnqualArray!ConstStringAA;
  65.     static assert (is(UnqualStringAA == string[int]));
  66.  
  67.     alias ImmIntAA = immutable(int)[char];
  68.     alias UnqualIntAA = UnqualArray!ImmIntAA;
  69.     static assert(is(UnqualIntAA == int[char]));
  70.  
  71.     alias InoutBoolAA = inout(bool)[long];
  72.     alias UnqualBoolAA = UnqualArray!InoutBoolAA;
  73.     static assert(is(UnqualBoolAA == bool[long]));
  74.  
  75.     alias ConstCharAA = const(char)[string];
  76.     alias UnqualCharAA = UnqualArray!ConstCharAA;
  77.     static assert(is(UnqualCharAA == char[string]));
  78. }
  79.  
  80.  
  81. // UnqualArray
  82. /++
  83.  +  Given an associative array of arrays with a storage class, aliases itself to
  84.  +  an associative array with array elements without the storage classes.
  85.  +
  86.  +  Params:
  87.  +      QualArray = Qualified associative array type.
  88.  +      QualElem = Qualified type, element of `QualArray`.
  89.  +      QualKey = Qualified type, key of `QualArray`.
  90.  +/
  91. template UnqualArray(QualArray : QualElem[QualKey], QualElem, QualKey)
  92. if (isArray!QualElem)
  93. {
  94.     static if (isTrulyString!(Unqual!QualElem))
  95.     {
  96.         alias UnqualArray = Unqual!QualElem[Unqual!QualKey];
  97.     }
  98.     else
  99.     {
  100.         alias UnqualArray = UnqualArray!QualElem[Unqual!QualKey];
  101.     }
  102. }
  103.  
  104. ///
  105. unittest
  106. {
  107.     alias ConstStringArrays = const(string[])[int];
  108.     alias UnqualStringArrays = UnqualArray!ConstStringArrays;
  109.     static assert (is(UnqualStringArrays == string[][int]));
  110.  
  111.     alias ImmIntArrays = immutable(int[])[char];
  112.     alias UnqualIntArrays = UnqualArray!ImmIntArrays;
  113.     static assert(is(UnqualIntArrays == int[][char]));
  114.  
  115.     alias InoutBoolArrays = inout(bool)[][long];
  116.     alias UnqualBoolArrays = UnqualArray!InoutBoolArrays;
  117.     static assert(is(UnqualBoolArrays == bool[][long]));
  118.  
  119.     alias ConstCharArrays = const(char)[][string];
  120.     alias UnqualCharArrays = UnqualArray!ConstCharArrays;
  121.     static assert(is(UnqualCharArrays == char[][string]));
  122. }
  123.  
  124. // isTrulyString
  125. /++
  126.  +  True if a type is `string`, `dstring` or `wstring`; otherwise false.
  127.  +
  128.  +  Does not consider e.g. `char[]` a string, as `std.traits.isSomeString` does.
  129.  +
  130.  +  Params:
  131.  +      S = String type to introspect.
  132.  +/
  133. enum isTrulyString(S) = is(S == string) || is(S == dstring) || is(S == wstring);
  134.  
  135. ///
  136. unittest
  137. {
  138.     static assert(isTrulyString!string);
  139.     static assert(isTrulyString!dstring);
  140.     static assert(isTrulyString!wstring);
  141.     static assert(!isTrulyString!(char[]));
  142.     static assert(!isTrulyString!(dchar[]));
  143.     static assert(!isTrulyString!(wchar[]));
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement