variant.inc 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. {
  2. $Id$
  3. This file is part of the Free Pascal run time library.
  4. Copyright (c) 2001 by the Free Pascal development team
  5. This include file contains the implementation for variants
  6. support in FPC as far as it is part of the system unit
  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. procedure variant_init(var v : variant);[Public,Alias:'FPC_VARIANT_INIT'];
  14. begin
  15. variantmanager.varinit(v);
  16. end;
  17. procedure variant_clear(var v : variant);[Public,Alias:'FPC_VARIANT_CLEAR'];
  18. begin
  19. variantmanager.varclear(v);
  20. end;
  21. { Integer }
  22. operator :=(const source : byte) dest : variant;
  23. begin
  24. end;
  25. operator :=(const source : shortint) dest : variant;
  26. begin
  27. end;
  28. operator :=(const source : word) dest : variant;
  29. begin
  30. end;
  31. operator :=(const source : smallint) dest : variant;
  32. begin
  33. end;
  34. operator :=(const source : dword) dest : variant;
  35. begin
  36. end;
  37. operator :=(const source : longint) dest : variant;
  38. begin
  39. end;
  40. operator :=(const source : qword) dest : variant;
  41. begin
  42. end;
  43. operator :=(const source : int64) dest : variant;
  44. begin
  45. end;
  46. { Boolean }
  47. operator :=(const source : boolean) dest : variant;
  48. begin
  49. end;
  50. operator :=(const source : wordbool) dest : variant;
  51. begin
  52. end;
  53. operator :=(const source : longbool) dest : variant;
  54. begin
  55. end;
  56. { Chars }
  57. operator :=(const source : char) dest : variant;
  58. begin
  59. end;
  60. operator :=(const source : widechar) dest : variant;
  61. begin
  62. end;
  63. { Strings }
  64. operator :=(const source : shortstring) dest : variant;
  65. begin
  66. end;
  67. operator :=(const source : ansistring) dest : variant;
  68. begin
  69. end;
  70. operator :=(const source : widestring) dest : variant;
  71. begin
  72. end;
  73. { Floats }
  74. operator :=(const source : single) dest : variant;
  75. begin
  76. end;
  77. operator :=(const source : double) dest : variant;
  78. begin
  79. end;
  80. operator :=(const source : extended) dest : variant;
  81. begin
  82. end;
  83. operator :=(const source : comp) dest : variant;
  84. begin
  85. end;
  86. { Misc. }
  87. { Fixme!!!
  88. operator :=(const source : currency) dest : variant;
  89. begin
  90. end;
  91. operator :=(const source : tdatetime) dest : variant;
  92. begin
  93. end;
  94. }
  95. {**********************************************************************
  96. from Variant assignments
  97. **********************************************************************}
  98. { Integer }
  99. operator :=(const source : variant) dest : byte;
  100. begin
  101. dest:=variantmanager.vartoint(source);
  102. end;
  103. operator :=(const source : variant) dest : shortint;
  104. begin
  105. dest:=variantmanager.vartoint(source);
  106. end;
  107. operator :=(const source : variant) dest : word;
  108. var
  109. l : longint;
  110. begin
  111. dest:=variantmanager.vartoint(source);
  112. end;
  113. operator :=(const source : variant) dest : smallint;
  114. var
  115. l : longint;
  116. begin
  117. dest:=variantmanager.vartoint(source);
  118. end;
  119. operator :=(const source : variant) dest : dword;
  120. begin
  121. dest:=variantmanager.vartoint(source);
  122. end;
  123. operator :=(const source : variant) dest : longint;
  124. begin
  125. dest:=variantmanager.vartoint(source);
  126. end;
  127. operator :=(const source : variant) dest : qword;
  128. begin
  129. dest:=variantmanager.vartoword64(source);
  130. end;
  131. operator :=(const source : variant) dest : int64;
  132. begin
  133. dest:=variantmanager.vartoint64(source);
  134. end;
  135. { Boolean }
  136. operator :=(const source : variant) dest : boolean;
  137. begin
  138. dest:=variantmanager.vartobool(source);
  139. end;
  140. operator :=(const source : variant) dest : wordbool;
  141. begin
  142. dest:=variantmanager.vartobool(source);
  143. end;
  144. operator :=(const source : variant) dest : longbool;
  145. begin
  146. dest:=variantmanager.vartobool(source);
  147. end;
  148. { Chars }
  149. operator :=(const source : variant) dest : char;
  150. begin
  151. end;
  152. operator :=(const source : variant) dest : widechar;
  153. begin
  154. end;
  155. { Strings }
  156. operator :=(const source : variant) dest : shortstring;
  157. begin
  158. end;
  159. operator :=(const source : variant) dest : ansistring;
  160. begin
  161. variantmanager.vartolstr(dest,source);
  162. end;
  163. operator :=(const source : variant) dest : widestring;
  164. begin
  165. variantmanager.vartowstr(dest,source);
  166. end;
  167. { Floats }
  168. operator :=(const source : variant) dest : single;
  169. begin
  170. dest:=variantmanager.vartoreal(source);
  171. end;
  172. operator :=(const source : variant) dest : double;
  173. begin
  174. dest:=variantmanager.vartoreal(source);
  175. end;
  176. operator :=(const source : variant) dest : extended;
  177. begin
  178. dest:=variantmanager.vartoreal(source);
  179. end;
  180. operator :=(const source : variant) dest : comp;
  181. begin
  182. dest:=comp(variantmanager.vartoreal(source));
  183. end;
  184. { Misc. }
  185. { FIXME !!!!!!!
  186. operator :=(const source : variant) dest : currency;
  187. begin
  188. dest:=variantmanager.vartocurr(source);
  189. end;
  190. operator :=(const source : variant) dest : tdatetime;
  191. begin
  192. end;
  193. }
  194. procedure invalidvariantop;
  195. begin
  196. Runerror(221);
  197. end;
  198. procedure varclear(var v : tvardata);
  199. begin
  200. if not(v.vtype in [varempty,varerror,varnull]) then
  201. invalidvariantop;
  202. end;
  203. procedure initvariantmanager;
  204. var
  205. i : longint;
  206. begin
  207. for i:=0 to (sizeof(tvariantmanager) div sizeof(pointer))-1 do
  208. ppointer(@variantmanager+i*sizeof(pointer))^:=@invalidvariantop;
  209. pointer(variantmanager.varclear):=@varclear
  210. end;
  211. {
  212. $Log$
  213. Revision 1.1 2001-08-19 21:02:01 florian
  214. * fixed and added a lot of stuff to get the Jedi DX( headers
  215. compiled
  216. }