Guest User

Untitled

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