/tutorial/external/Java/example3.e

http://github.com/tybor/Liberty · Specman e · 519 lines · 428 code · 63 blank · 28 comment · 0 complexity · ab06eba2be7c016f7ee4d1d407221000 MD5 · raw file

  1. class EXAMPLE3
  2. -- Compilation:
  3. -- compile_to_jvm example3
  4. -- Execution:
  5. -- java example3
  6. -- This example demonstrates how to use Java arrays from Eiffel.
  7. creation {ANY}
  8. make
  9. feature {ANY}
  10. make is
  11. do
  12. boolean_array
  13. byte_array
  14. char_array
  15. short_array
  16. int_array
  17. long_array
  18. float_array
  19. double_array
  20. java_lang_String_array
  21. end
  22. feature {ANY}
  23. boolean_array is
  24. local
  25. a: POINTER; i: INTEGER; length: INTEGER; z: BOOLEAN
  26. do
  27. -- create an array of booleans
  28. a := new_aZ(5) -- fill the array
  29. length := arraylength_aZ(checkcast_aZ(a))
  30. from
  31. i := 0
  32. until
  33. i >= length
  34. loop
  35. put_aZ(checkcast_aZ(a), i, i.even)
  36. i := i + 1
  37. end
  38. -- read the array
  39. length := arraylength_aZ(checkcast_aZ(a))
  40. io.put_string("array of booleans: ")
  41. from
  42. i := 0
  43. until
  44. i >= length
  45. loop
  46. z := item_aZ(checkcast_aZ(a), i)
  47. io.put_string(z.to_string + " ")
  48. i := i + 1
  49. end
  50. io.put_string("%N")
  51. end
  52. byte_array is
  53. local
  54. a: POINTER; i: INTEGER; length: INTEGER; b: INTEGER_8
  55. do
  56. -- create an array of bytes
  57. a := new_aB(5) -- fill the array
  58. length := arraylength_aB(checkcast_aB(a))
  59. from
  60. i := 0
  61. until
  62. i >= length
  63. loop
  64. put_aB(checkcast_aB(a), i, i.to_integer_8)
  65. i := i + 1
  66. end
  67. -- read the array
  68. length := arraylength_aB(checkcast_aB(a))
  69. io.put_string("array of bytes: ")
  70. from
  71. i := 0
  72. until
  73. i >= length
  74. loop
  75. b := item_aB(checkcast_aB(a), i)
  76. io.put_string(b.to_string + " ")
  77. i := i + 1
  78. end
  79. io.put_string("%N")
  80. end
  81. char_array is
  82. -- note that Java characters are 16 bits long and are
  83. -- not equivalent to Eiffel characters
  84. -- Eiffel integers are used to hold Java characters
  85. local
  86. a: POINTER; i: INTEGER; length: INTEGER; c: INTEGER; s: STRING; javaString: POINTER
  87. do
  88. -- create an array of chars
  89. a := new_aC(5) -- fill the array
  90. s := "Meyer"
  91. javaString := new_java_lang_String(checkcast_aB(s.to_external), 0, s.count)
  92. length := arraylength_aC(checkcast_aC(a))
  93. from
  94. i := 0
  95. until
  96. i >= length
  97. loop
  98. c := charAt(checkcast_java_lang_String(javaString), i)
  99. put_aC(checkcast_aC(a), i, c)
  100. i := i + 1
  101. end
  102. -- read the array
  103. length := arraylength_aC(checkcast_aC(a))
  104. io.put_string("array of chars: ")
  105. from
  106. i := 0
  107. until
  108. i >= length
  109. loop
  110. c := item_aC(checkcast_aC(a), i)
  111. io.put_string(c.to_string + " ")
  112. i := i + 1
  113. end
  114. io.put_string("%N")
  115. end
  116. short_array is
  117. local
  118. a: POINTER; i: INTEGER; length: INTEGER; s: INTEGER_16
  119. do
  120. -- create an array of shorts
  121. a := new_aS(5) -- fill the array
  122. length := arraylength_aS(checkcast_aS(a))
  123. from
  124. i := 0
  125. until
  126. i >= length
  127. loop
  128. put_aS(checkcast_aS(a), i, i.to_integer_16)
  129. i := i + 1
  130. end
  131. -- read the array
  132. length := arraylength_aS(checkcast_aS(a))
  133. io.put_string("array of shorts: ")
  134. from
  135. i := 0
  136. until
  137. i >= length
  138. loop
  139. s := item_aS(checkcast_aS(a), i)
  140. io.put_string(s.out + " ")
  141. i := i + 1
  142. end
  143. io.put_string("%N")
  144. end
  145. int_array is
  146. local
  147. a: POINTER; i: INTEGER; length: INTEGER; i1: INTEGER
  148. do
  149. -- create an array of ints
  150. a := new_aI(5) -- fill the array
  151. length := arraylength_aI(checkcast_aI(a))
  152. from
  153. i := 0
  154. until
  155. i >= length
  156. loop
  157. put_aI(checkcast_aI(a), i, i)
  158. i := i + 1
  159. end
  160. -- read the array
  161. length := arraylength_aI(checkcast_aI(a))
  162. io.put_string("array of ints: ")
  163. from
  164. i := 0
  165. until
  166. i >= length
  167. loop
  168. i1 := item_aI(checkcast_aI(a), i)
  169. io.put_string(i1.to_string + " ")
  170. i := i + 1
  171. end
  172. io.put_string("%N")
  173. end
  174. long_array is
  175. local
  176. a: POINTER; i: INTEGER; length: INTEGER; j: INTEGER_64
  177. do
  178. -- create an array of longs
  179. a := new_aJ(5) -- fill the array
  180. length := arraylength_aJ(checkcast_aJ(a))
  181. from
  182. i := 0
  183. until
  184. i >= length
  185. loop
  186. put_aJ(checkcast_aJ(a), i, i.to_integer_64)
  187. i := i + 1
  188. end
  189. -- read the array
  190. length := arraylength_aJ(checkcast_aJ(a))
  191. io.put_string("array of longs: ")
  192. from
  193. i := 0
  194. until
  195. i >= length
  196. loop
  197. j := item_aJ(checkcast_aJ(a), i)
  198. io.put_string(j.to_string + " ")
  199. i := i + 1
  200. end
  201. io.put_string("%N")
  202. end
  203. float_array is
  204. local
  205. a: POINTER; i: INTEGER; length: INTEGER; f: REAL
  206. do
  207. -- create an array of floats
  208. a := new_aF(5) -- fill the array
  209. length := arraylength_aF(checkcast_aF(a))
  210. from
  211. i := 0
  212. until
  213. i >= length
  214. loop
  215. put_aF(checkcast_aF(a), i, i * 1.0)
  216. i := i + 1
  217. end
  218. -- read the array
  219. length := arraylength_aF(checkcast_aF(a))
  220. io.put_string("array of floats: ")
  221. from
  222. i := 0
  223. until
  224. i >= length
  225. loop
  226. f := item_aF(checkcast_aF(a), i)
  227. io.put_string(f.to_string + " ")
  228. i := i + 1
  229. end
  230. io.put_string("%N")
  231. end
  232. double_array is
  233. local
  234. a: POINTER; i: INTEGER; length: INTEGER; d: DOUBLE
  235. do
  236. -- create an array of doubles
  237. a := new_aD(5) -- fill the array
  238. length := arraylength_aD(checkcast_aD(a))
  239. from
  240. i := 0
  241. until
  242. i >= length
  243. loop
  244. put_aD(checkcast_aD(a), i, i * 1.0)
  245. i := i + 1
  246. end
  247. -- read the array
  248. length := arraylength_aD(checkcast_aD(a))
  249. io.put_string("array of doubles: ")
  250. from
  251. i := 0
  252. until
  253. i >= length
  254. loop
  255. d := item_aD(checkcast_aD(a), i)
  256. io.put_string(d.to_string + " ")
  257. i := i + 1
  258. end
  259. io.put_string("%N")
  260. end
  261. java_lang_String_array is
  262. local
  263. a: POINTER; i: INTEGER; length: INTEGER; s: STRING; javaString: POINTER; javaStringBytes: POINTER
  264. string_length: INTEGER
  265. do
  266. -- create an array of java.lang.Strings
  267. a := new_a_java_lang_String(5) -- fill the array
  268. length := arraylength_a_java_lang_String(checkcast_a_java_lang_String(a))
  269. from
  270. i := 0
  271. until
  272. i >= length
  273. loop
  274. create s.make(3)
  275. s.append("<")
  276. s.append(i.out)
  277. s.append(">")
  278. javaString := new_java_lang_String(checkcast_aB(s.to_external), 0, s.count)
  279. put_a_java_lang_String(checkcast_a_java_lang_String(a), i, checkcast_java_lang_String(javaString))
  280. i := i + 1
  281. end
  282. -- read the array
  283. length := arraylength_a_java_lang_String(checkcast_a_java_lang_String(a))
  284. io.put_string("array of strings: ")
  285. from
  286. i := 0
  287. until
  288. i >= length
  289. loop
  290. javaString := item_a_java_lang_String(checkcast_a_java_lang_String(a), i)
  291. string_length := length_java_lang_String(checkcast_java_lang_String(javaString))
  292. create s.make_filled('%U', string_length)
  293. javaStringBytes := getBytes(checkcast_java_lang_String(javaString))
  294. arraycopy(javaStringBytes, 0, s.to_external, 0, string_length)
  295. io.put_string(s.to_string + " ")
  296. i := i + 1
  297. end
  298. io.put_string("%N")
  299. end
  300. feature {ANY}
  301. -- externals
  302. -- boolean
  303. new_aZ (a_length: INTEGER): POINTER is
  304. external "Java array boolean new"
  305. end
  306. checkcast_aZ (p: POINTER): POINTER is
  307. external "Java class boolean[] checkcast"
  308. end
  309. arraylength_aZ (p: POINTER): INTEGER is
  310. external "Java array boolean length"
  311. end
  312. put_aZ (p: POINTER; i: INTEGER; a: BOOLEAN) is
  313. external "Java array boolean set"
  314. end
  315. item_aZ (p: POINTER; i: INTEGER): BOOLEAN is
  316. external "Java array boolean get"
  317. end -- byte
  318. new_aB (a_length: INTEGER): POINTER is
  319. external "Java array byte new"
  320. end
  321. checkcast_aB (p: POINTER): POINTER is
  322. external "Java class byte[] checkcast"
  323. end
  324. arraylength_aB (p: POINTER): INTEGER is
  325. external "Java array byte length"
  326. end
  327. put_aB (p: POINTER; i: INTEGER; a: INTEGER_8) is
  328. external "Java array byte set"
  329. end
  330. item_aB (p: POINTER; i: INTEGER): INTEGER_8 is
  331. external "Java array byte get"
  332. end -- char
  333. new_aC (a_length: INTEGER): POINTER is
  334. external "Java array char new"
  335. end
  336. checkcast_aC (p: POINTER): POINTER is
  337. external "Java class char[] checkcast"
  338. end
  339. arraylength_aC (p: POINTER): INTEGER is
  340. external "Java array char length"
  341. end
  342. put_aC (p: POINTER; i: INTEGER; a: INTEGER) is
  343. external "Java array char set"
  344. end
  345. item_aC (p: POINTER; i: INTEGER): INTEGER is
  346. external "Java array char get"
  347. end
  348. new_java_lang_String (a1: POINTER; a2: INTEGER; a3: INTEGER): POINTER is
  349. external "Java class java.lang.String new (byte[],int,int)"
  350. end
  351. checkcast_java_lang_String (p: POINTER): POINTER is
  352. external "Java class java.lang.String checkcast"
  353. end
  354. charAt (p: POINTER; a1: INTEGER): INTEGER is
  355. external "Java class java.lang.String method char charAt(int)"
  356. end -- short
  357. new_aS (a_length: INTEGER): POINTER is
  358. external "Java array short new"
  359. end
  360. checkcast_aS (p: POINTER): POINTER is
  361. external "Java class short[] checkcast"
  362. end
  363. arraylength_aS (p: POINTER): INTEGER is
  364. external "Java array short length"
  365. end
  366. put_aS (p: POINTER; i: INTEGER; a: INTEGER_16) is
  367. external "Java array short set"
  368. end
  369. item_aS (p: POINTER; i: INTEGER): INTEGER_16 is
  370. external "Java array short get"
  371. end -- int
  372. new_aI (a_length: INTEGER): POINTER is
  373. external "Java array int new"
  374. end
  375. checkcast_aI (p: POINTER): POINTER is
  376. external "Java class int[] checkcast"
  377. end
  378. arraylength_aI (p: POINTER): INTEGER is
  379. external "Java array int length"
  380. end
  381. put_aI (p: POINTER; i: INTEGER; a: INTEGER) is
  382. external "Java array int set"
  383. end
  384. item_aI (p: POINTER; i: INTEGER): INTEGER is
  385. external "Java array int get"
  386. end -- long
  387. new_aJ (a_length: INTEGER): POINTER is
  388. external "Java array long new"
  389. end
  390. checkcast_aJ (p: POINTER): POINTER is
  391. external "Java class long[] checkcast"
  392. end
  393. arraylength_aJ (p: POINTER): INTEGER is
  394. external "Java array long length"
  395. end
  396. put_aJ (p: POINTER; i: INTEGER; a: INTEGER_64) is
  397. external "Java array long set"
  398. end
  399. item_aJ (p: POINTER; i: INTEGER): INTEGER_64 is
  400. external "Java array long get"
  401. end -- float
  402. new_aF (a_length: INTEGER): POINTER is
  403. external "Java array float new"
  404. end
  405. checkcast_aF (p: POINTER): POINTER is
  406. external "Java class float[] checkcast"
  407. end
  408. arraylength_aF (p: POINTER): INTEGER is
  409. external "Java array float length"
  410. end
  411. put_aF (p: POINTER; i: INTEGER; a: REAL) is
  412. external "Java array float set"
  413. end
  414. item_aF (p: POINTER; i: INTEGER): REAL is
  415. external "Java array float get"
  416. end -- double
  417. new_aD (a_length: INTEGER): POINTER is
  418. external "Java array double new"
  419. end
  420. checkcast_aD (p: POINTER): POINTER is
  421. external "Java class double[] checkcast"
  422. end
  423. arraylength_aD (p: POINTER): INTEGER is
  424. external "Java array double length"
  425. end
  426. put_aD (p: POINTER; i: INTEGER; a: DOUBLE) is
  427. external "Java array double set"
  428. end
  429. item_aD (p: POINTER; i: INTEGER): DOUBLE is
  430. external "Java array double get"
  431. end -- java.lang.String
  432. length_java_lang_String (p: POINTER): INTEGER is
  433. external "Java class java.lang.String method int length()"
  434. end
  435. new_a_java_lang_String (a_length: INTEGER): POINTER is
  436. external "Java array java.lang.String new"
  437. end
  438. checkcast_a_java_lang_String (p: POINTER): POINTER is
  439. external "Java class java.lang.String[] checkcast"
  440. end
  441. arraylength_a_java_lang_String (p: POINTER): INTEGER is
  442. external "Java array java.lang.String length"
  443. end
  444. put_a_java_lang_String (p: POINTER; i: INTEGER; a: POINTER) is
  445. external "Java array java.lang.String set"
  446. end
  447. item_a_java_lang_String (p: POINTER; i: INTEGER): POINTER is
  448. external "Java array java.lang.String get"
  449. end
  450. getBytes (p: POINTER): POINTER is
  451. external "Java class java.lang.String method byte[] getBytes()"
  452. end
  453. arraycopy (a1: POINTER; a2: INTEGER; a3: POINTER; a4: INTEGER; a5: INTEGER) is
  454. external "Java class java.lang.System method static void arraycopy(java.lang.Object,int,java.lang.Object,int,int)"
  455. end
  456. end -- class EXAMPLE3