generics.helpers.pas 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. {
  2. This file is part of the Free Pascal/NewPascal run time library.
  3. Copyright (c) 2014 by Maciej Izak (hnb)
  4. member of the NewPascal development team (http://newpascal.org)
  5. Copyright(c) 2004-2018 DaThoX
  6. It contains the generics collections library
  7. See the file COPYING.FPC, included in this distribution,
  8. for details about the copyright.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  12. **********************************************************************}
  13. {$IFNDEF FPC_DOTTEDUNITS}
  14. unit Generics.Helpers;
  15. {$ENDIF FPC_DOTTEDUNITS}
  16. {$MODE DELPHI}{$H+}
  17. {$MODESWITCH TYPEHELPERS}
  18. {$OVERFLOWCHECKS OFF}
  19. {$RANGECHECKS OFF}
  20. interface
  21. {$IFDEF FPC_DOTTEDUNITS}
  22. uses
  23. System.Classes, System.SysUtils;
  24. {$ELSE FPC_DOTTEDUNITS}
  25. uses
  26. Classes, SysUtils;
  27. {$ENDIF FPC_DOTTEDUNITS}
  28. type
  29. { TValueAnsiStringHelper }
  30. TValueAnsiStringHelper = record helper for AnsiString
  31. function ToLower: AnsiString; inline;
  32. end;
  33. { TValuewideStringHelper }
  34. TValueWideStringHelper = record helper for WideString
  35. function ToLower: WideString; inline;
  36. end;
  37. { TValueUnicodeStringHelper }
  38. TValueUnicodeStringHelper = record helper for UnicodeString
  39. function ToLower: UnicodeString; inline;
  40. end;
  41. { TValueShortStringHelper }
  42. TValueShortStringHelper = record helper for ShortString
  43. function ToLower: ShortString; inline;
  44. end;
  45. { TValueUTF8StringHelper }
  46. TValueUTF8StringHelper = record helper for UTF8String
  47. function ToLower: UTF8String; inline;
  48. end;
  49. { TValueRawByteStringHelper }
  50. TValueRawByteStringHelper = record helper for RawByteString
  51. function ToLower: RawByteString; inline;
  52. end;
  53. { TValueUInt32Helper }
  54. TValueUInt32Helper = record helper for UInt32
  55. class function GetSignMask: UInt32; static; inline;
  56. class function GetSizedSignMask(ABits: Byte): UInt32; static; inline;
  57. class function GetBitsLength: Byte; static; inline;
  58. const
  59. SIZED_SIGN_MASK: array[1..32] of UInt32 = (
  60. $80000000, $C0000000, $E0000000, $F0000000, $F8000000, $FC000000, $FE000000, $FF000000,
  61. $FF800000, $FFC00000, $FFE00000, $FFF00000, $FFF80000, $FFFC0000, $FFFE0000, $FFFF0000,
  62. $FFFF8000, $FFFFC000, $FFFFE000, $FFFFF000, $FFFFF800, $FFFFFC00, $FFFFFE00, $FFFFFF00,
  63. $FFFFFF80, $FFFFFFC0, $FFFFFFE0, $FFFFFFF0, $FFFFFFF8, $FFFFFFFC, $FFFFFFFE, $FFFFFFFF);
  64. BITS_LENGTH = 32;
  65. end;
  66. implementation
  67. { TRawDataStringHelper }
  68. function TValueAnsiStringHelper.ToLower: AnsiString;
  69. begin
  70. Result := LowerCase(Self);
  71. end;
  72. { TValueWideStringHelper }
  73. function TValueWideStringHelper.ToLower: WideString;
  74. begin
  75. Result := LowerCase(Self);
  76. end;
  77. { TValueUnicodeStringHelper }
  78. function TValueUnicodeStringHelper.ToLower: UnicodeString;
  79. begin
  80. Result := LowerCase(Self);
  81. end;
  82. { TValueShortStringHelper }
  83. function TValueShortStringHelper.ToLower: ShortString;
  84. begin
  85. Result := LowerCase(Self);
  86. end;
  87. { TValueUTF8StringHelper }
  88. function TValueUTF8StringHelper.ToLower: UTF8String;
  89. begin
  90. Result := LowerCase(Self);
  91. end;
  92. { TValueRawByteStringHelper }
  93. function TValueRawByteStringHelper.ToLower: RawByteString;
  94. begin
  95. Result := LowerCase(Self);
  96. end;
  97. { TValueUInt32Helper }
  98. class function TValueUInt32Helper.GetSignMask: UInt32;
  99. begin
  100. Result := $80000000;
  101. end;
  102. class function TValueUInt32Helper.GetSizedSignMask(ABits: Byte): UInt32;
  103. begin
  104. Result := SIZED_SIGN_MASK[ABits];
  105. end;
  106. class function TValueUInt32Helper.GetBitsLength: Byte;
  107. begin
  108. Result := BITS_LENGTH;
  109. end;
  110. end.