/[eiffelstudio]/FreeELKS/trunk/library/kernel/tuple.e
ViewVC logotype

Diff of /FreeELKS/trunk/library/kernel/tuple.e

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 91476 by ericb, Fri Mar 3 10:19:32 2006 UTC revision 91477 by ericb, Sun Jan 14 09:47:13 2007 UTC
# Line 11  class Line 11  class
11    
12  inherit  inherit
13          HASHABLE          HASHABLE
14                    redefine
15                            is_equal
16                    end
17    
18          MISMATCH_CORRECTOR          MISMATCH_CORRECTOR
19                  redefine                  redefine
20                          correct_mismatch                          correct_mismatch, is_equal
21                  end                  end
22    
23  create  create
# Line 37  feature -- Access Line 40  feature -- Access
40                  do                  do
41                          inspect eif_item_type ($Current, index)                          inspect eif_item_type ($Current, index)
42                          when boolean_code then Result := eif_boolean_item ($Current, index)                          when boolean_code then Result := eif_boolean_item ($Current, index)
43                          when character_code then Result := eif_character_item ($Current, index)                          when character_8_code then Result := eif_character_8_item ($Current, index)
44                          when wide_character_code then Result := eif_wide_character_item ($Current, index)                          when character_32_code then Result := eif_character_32_item ($Current, index)
45                          when real_64_code then Result := eif_real_64_item ($Current, index)                          when real_64_code then Result := eif_real_64_item ($Current, index)
46                          when real_32_code then Result := eif_real_32_item ($Current, index)                          when real_32_code then Result := eif_real_32_item ($Current, index)
47                          when pointer_code then Result := eif_pointer_item ($Current, index)                          when pointer_code then Result := eif_pointer_item ($Current, index)
# Line 72  feature -- Access Line 75  feature -- Access
75                          Result := eif_boolean_item ($Current, index)                          Result := eif_boolean_item ($Current, index)
76                  end                  end
77    
78          character_item (index: INTEGER): CHARACTER is          character_8_item, character_item (index: INTEGER): CHARACTER_8 is
79                          -- Character item at `index'.                          -- Character item at `index'.
80                  require                  require
81                          valid_index: valid_index (index)                          valid_index: valid_index (index)
82                          is_character: is_character_item (index)                          is_character_8: is_character_8_item (index)
83                  do                  do
84                          Result := eif_character_item ($Current, index)                          Result := eif_character_8_item ($Current, index)
85                  end                  end
86    
87          wide_character_item (index: INTEGER): WIDE_CHARACTER is          character_32_item, wide_character_item (index: INTEGER): CHARACTER_32 is
88                          -- Character item at `index'.                          -- Character item at `index'.
89                  require                  require
90                          valid_index: valid_index (index)                          valid_index: valid_index (index)
91                          is_wide_character: is_wide_character_item (index)                          is_character_32: is_character_32_item (index)
92                  do                  do
93                          Result := eif_wide_character_item ($Current, index)                          Result := eif_character_32_item ($Current, index)
94                  end                  end
95    
96          real_64_item, double_item (index: INTEGER): DOUBLE is          real_64_item, double_item (index: INTEGER): DOUBLE is
# Line 189  feature -- Access Line 192  feature -- Access
192                          Result := eif_real_32_item ($Current, index)                          Result := eif_real_32_item ($Current, index)
193                  end                  end
194    
195    feature -- Comparison
196    
197            object_comparison: BOOLEAN is
198                            -- Must search operations use `equal' rather than `='
199                            -- for comparing references? (Default: no, use `='.)
200                    do
201                            Result := eif_boolean_item ($Current, 0)
202                    end
203    
204            is_equal (other: like Current): BOOLEAN is
205                            -- Is `other' attached to an object considered
206                            -- equal to current object?
207                    local
208                            i, nb: INTEGER
209                            l_object_compare: BOOLEAN
210                    do
211                            l_object_compare := object_comparison
212                            if l_object_compare = other.object_comparison then
213                                    if l_object_compare then
214                                            nb := count
215                                            if nb = other.count then
216                                                    from
217                                                            Result := True
218                                                            i := 1
219                                                    until
220                                                            i = nb or not Result
221                                                    loop
222                                                            Result := equal (item (i), other.item (i))
223                                                            i := i + 1
224                                                    end
225                                            end
226                                    else
227                                            Result := Precursor {HASHABLE} (other)
228                                    end
229                            end
230                    end
231    
232    feature -- Status setting
233    
234            compare_objects is
235                            -- Ensure that future search operations will use `equal'
236                            -- rather than `=' for comparing references.
237                    do
238                            eif_put_boolean_item ($Current, 0, True)
239                    ensure
240                            object_comparison: object_comparison
241                    end
242    
243            compare_references is
244                            -- Ensure that future search operations will use `='
245                            -- rather than `equal' for comparing references.
246                    do
247                            eif_put_boolean_item ($Current, 0, False)
248                    ensure
249                            reference_comparison: not object_comparison
250                    end
251    
252  feature -- Status report  feature -- Status report
253    
254          hash_code: INTEGER is          hash_code: INTEGER is
# Line 205  feature -- Status report Line 265  feature -- Status report
265                          loop                          loop
266                                  inspect eif_item_type($Current, i)                                  inspect eif_item_type($Current, i)
267                                  when boolean_code then l_hash := eif_boolean_item ($Current, i).hash_code                                  when boolean_code then l_hash := eif_boolean_item ($Current, i).hash_code
268                                  when character_code then l_hash := eif_character_item ($Current, i).hash_code                                  when character_8_code then l_hash := eif_character_8_item ($Current, i).hash_code
269                                  when wide_character_code then l_hash := eif_wide_character_item ($Current, i).hash_code                                  when character_32_code then l_hash := eif_character_32_item ($Current, i).hash_code
270                                  when real_64_code then l_hash := eif_real_64_item ($Current, i).hash_code                                  when real_64_code then l_hash := eif_real_64_item ($Current, i).hash_code
271                                  when real_32_code then l_hash := eif_real_32_item ($Current, i).hash_code                                  when real_32_code then l_hash := eif_real_32_item ($Current, i).hash_code
272                                  when pointer_code then l_hash := eif_pointer_item ($Current, i).hash_code                                  when pointer_code then l_hash := eif_pointer_item ($Current, i).hash_code
# Line 246  feature -- Status report Line 306  feature -- Status report
306                  local                  local
307                          l_b: BOOLEAN_REF                          l_b: BOOLEAN_REF
308                          l_c: CHARACTER_REF                          l_c: CHARACTER_REF
309                          l_wc: WIDE_CHARACTER_REF                          l_wc: CHARACTER_32_REF
310                          l_d: DOUBLE_REF                          l_d: DOUBLE_REF
311                          l_r: REAL_REF                          l_r: REAL_REF
312                          l_p: POINTER_REF                          l_p: POINTER_REF
# Line 266  feature -- Status report Line 326  feature -- Status report
326                          else                          else
327                                  inspect eif_item_type ($Current, index)                                  inspect eif_item_type ($Current, index)
328                                  when boolean_code then l_b ?= v; Result := l_b /= Void                                  when boolean_code then l_b ?= v; Result := l_b /= Void
329                                  when character_code then l_c ?= v; Result := l_c /= Void                                  when character_8_code then l_c ?= v; Result := l_c /= Void
330                                  when wide_character_code then l_wc ?= v; Result := l_wc /= Void                                  when character_32_code then l_wc ?= v; Result := l_wc /= Void
331                                  when real_64_code then l_d ?= v; Result := l_d /= Void                                  when real_64_code then l_d ?= v; Result := l_d /= Void
332                                  when real_32_code then l_r ?= v; Result := l_r /= Void                                  when real_32_code then l_r ?= v; Result := l_r /= Void
333                                  when pointer_code then l_p ?= v; Result := l_p /= Void                                  when pointer_code then l_p ?= v; Result := l_p /= Void
# Line 279  feature -- Status report Line 339  feature -- Status report
339                                  when integer_16_code then l_i16 ?= v; Result := l_i16 /= Void                                  when integer_16_code then l_i16 ?= v; Result := l_i16 /= Void
340                                  when integer_32_code then l_i32 ?= v; Result := l_i32 /= Void                                  when integer_32_code then l_i32 ?= v; Result := l_i32 /= Void
341                                  when integer_64_code then l_i64 ?= v; Result := l_i64 /= Void                                  when integer_64_code then l_i64 ?= v; Result := l_i64 /= Void
342                                  when Reference_code then                                          when Reference_code then
343                                                  -- Let's check that type of `v' conforms to specified type of `index'-th                                                  -- Let's check that type of `v' conforms to specified type of `index'-th
344                                                  -- arguments of current TUPLE.                                                  -- arguments of current TUPLE.
345                                          create l_int                                          create l_int
# Line 323  feature -- Element change Line 383  feature -- Element change
383                  do                  do
384                          inspect eif_item_type ($Current, index)                          inspect eif_item_type ($Current, index)
385                          when boolean_code then eif_put_boolean_item_with_object ($Current, index, $v)                          when boolean_code then eif_put_boolean_item_with_object ($Current, index, $v)
386                          when character_code then eif_put_character_item_with_object ($Current, index, $v)                          when character_8_code then eif_put_character_8_item_with_object ($Current, index, $v)
387                          when wide_character_code then eif_put_wide_character_item_with_object ($Current, index, $v)                          when character_32_code then eif_put_character_32_item_with_object ($Current, index, $v)
388                          when real_64_code then eif_put_real_64_item_with_object ($Current, index, $v)                          when real_64_code then eif_put_real_64_item_with_object ($Current, index, $v)
389                          when real_32_code then eif_put_real_32_item_with_object ($Current, index, $v)                          when real_32_code then eif_put_real_32_item_with_object ($Current, index, $v)
390                          when pointer_code then eif_put_pointer_item_with_object ($Current, index, $v)                          when pointer_code then eif_put_pointer_item_with_object ($Current, index, $v)
# Line 358  feature -- Element change Line 418  feature -- Element change
418                          eif_put_boolean_item ($Current, index, v)                          eif_put_boolean_item ($Current, index, v)
419                  end                  end
420    
421          put_character (v: CHARACTER; index: INTEGER) is          put_character_8, put_character (v: CHARACTER_8; index: INTEGER) is
422                          -- Put `v' at position `index' in Current.                          -- Put `v' at position `index' in Current.
423                  require                  require
424                          valid_index: valid_index (index)                          valid_index: valid_index (index)
425                          valid_type: is_character_item (index)                          valid_type: is_character_8_item (index)
426                  do                  do
427                          eif_put_character_item ($Current, index, v)                          eif_put_character_8_item ($Current, index, v)
428                  end                  end
429    
430          put_wide_character (v: WIDE_CHARACTER; index: INTEGER) is          put_character_32, put_wide_character (v: CHARACTER_32; index: INTEGER) is
431                          -- Put `v' at position `index' in Current.                          -- Put `v' at position `index' in Current.
432                  require                  require
433                          valid_index: valid_index (index)                          valid_index: valid_index (index)
434                          valid_type: is_wide_character_item (index)                          valid_type: is_character_32_item (index)
435                  do                  do
436                          eif_put_wide_character_item ($Current, index, v)                          eif_put_character_32_item ($Current, index, v)
437                  end                  end
438    
439          put_real_64, put_double (v: DOUBLE; index: INTEGER) is          put_real_64, put_double (v: DOUBLE; index: INTEGER) is
# Line 485  feature -- Type queries Line 545  feature -- Type queries
545                          Result := (eif_item_type ($Current, index) = boolean_code)                          Result := (eif_item_type ($Current, index) = boolean_code)
546                  end                  end
547    
548          is_character_item (index: INTEGER): BOOLEAN is          is_character_8_item, is_character_item (index: INTEGER): BOOLEAN is
549                          -- Is item at `index' a CHARACTER?                          -- Is item at `index' a CHARACTER_8?
550                  require                  require
551                          valid_index: valid_index (index)                          valid_index: valid_index (index)
552                  do                  do
553                          Result := (eif_item_type ($Current, index) = character_code)                          Result := (eif_item_type ($Current, index) = character_8_code)
554                  end                  end
555    
556          is_wide_character_item (index: INTEGER): BOOLEAN is          is_character_32_item, is_wide_character_item (index: INTEGER): BOOLEAN is
557                          -- Is item at `index' a WIDE_CHARACTER?                          -- Is item at `index' a CHARACTER_32?
558                  require                  require
559                          valid_index: valid_index (index)                          valid_index: valid_index (index)
560                  do                  do
561                          Result := (eif_item_type ($Current, index) = wide_character_code)                          Result := (eif_item_type ($Current, index) = character_32_code)
562                  end                  end
563    
564          is_double_item (index: INTEGER): BOOLEAN is          is_double_item (index: INTEGER): BOOLEAN is
# Line 634  feature -- Type queries Line 694  feature -- Type queries
694                          yes_if_empty: (count = 0) implies Result                          yes_if_empty: (count = 0) implies Result
695                  end                  end
696    
697          is_uniform_character: BOOLEAN is          is_uniform_character_8, is_uniform_character: BOOLEAN is
698                          -- Are all items of type CHARACTER?                          -- Are all items of type CHARACTER_8?
699                  do                  do
700                          Result := is_tuple_uniform (character_code)                          Result := is_tuple_uniform (character_8_code)
701                  ensure                  ensure
702                          yes_if_empty: (count = 0) implies Result                          yes_if_empty: (count = 0) implies Result
703                  end                  end
704    
705          is_uniform_wide_character: BOOLEAN is          is_uniforme_character_32, is_uniform_wide_character: BOOLEAN is
706                          -- Are all items of type WIDE_CHARACTER?                          -- Are all items of type CHARACTER_32?
707                  do                  do
708                          Result := is_tuple_uniform (wide_character_code)                          Result := is_tuple_uniform (character_32_code)
709                  ensure                  ensure
710                          yes_if_empty: (count = 0) implies Result                          yes_if_empty: (count = 0) implies Result
711                  end                  end
# Line 860  feature -- Conversion Line 920  feature -- Conversion
920                          same_items: -- Items are the same in same order                          same_items: -- Items are the same in same order
921                  end                  end
922    
923          character_arrayed: ARRAY [CHARACTER] is          character_8_arrayed, character_arrayed: ARRAY [CHARACTER_8] is
924                          -- Items of Current as array                          -- Items of Current as array
925                  obsolete                  obsolete
926                          "Will be removed in future releases"                          "Will be removed in future releases"
# Line 876  feature -- Conversion Line 936  feature -- Conversion
936                          until                          until
937                                  i > cnt                                  i > cnt
938                          loop                          loop
939                                  Result.put (character_item (i), i)                                  Result.put (character_8_item (i), i)
940                                  i := i + 1                                  i := i + 1
941                          end                          end
942                  ensure                  ensure
# Line 1058  feature -- Access Line 1118  feature -- Access
1118    
1119          reference_code: NATURAL_8 is 0x00          reference_code: NATURAL_8 is 0x00
1120          boolean_code: NATURAL_8 is 0x01          boolean_code: NATURAL_8 is 0x01
1121          character_code: NATURAL_8 is 0x02          character_8_code, character_code: NATURAL_8 is 0x02
1122          real_64_code: NATURAL_8 is 0x03          real_64_code: NATURAL_8 is 0x03
1123          real_32_code: NATURAL_8 is 0x04          real_32_code: NATURAL_8 is 0x04
1124          pointer_code: NATURAL_8 is 0x05          pointer_code: NATURAL_8 is 0x05
# Line 1070  feature -- Access Line 1130  feature -- Access
1130          natural_16_code: NATURAL_8 is 0x0B          natural_16_code: NATURAL_8 is 0x0B
1131          natural_32_code: NATURAL_8 is 0x0C          natural_32_code: NATURAL_8 is 0x0C
1132          natural_64_code: NATURAL_8 is 0x0D          natural_64_code: NATURAL_8 is 0x0D
1133          wide_character_code: NATURAL_8 is 0x0E          character_32_code, wide_character_code: NATURAL_8 is 0x0E
1134          any_code: NATURAL_8 is 0xFF          any_code: NATURAL_8 is 0xFF
1135                          -- Code used to identify type in TUPLE.                          -- Code used to identify type in TUPLE.
1136    
# Line 1129  feature {NONE} -- Externals: Access Line 1189  feature {NONE} -- Externals: Access
1189                          "C macro use %"eif_rout_obj.h%""                          "C macro use %"eif_rout_obj.h%""
1190                  end                  end
1191    
1192          eif_character_item (obj: POINTER; pos: INTEGER): CHARACTER is          eif_character_8_item (obj: POINTER; pos: INTEGER): CHARACTER_8 is
1193                          -- Character item at position `pos' in tuple `obj'.                          -- Character item at position `pos' in tuple `obj'.
1194                  external                  external
1195                          "C macro use %"eif_rout_obj.h%""                          "C macro use %"eif_rout_obj.h%""
1196                  end                  end
1197    
1198          eif_wide_character_item (obj: POINTER; pos: INTEGER): WIDE_CHARACTER is          eif_character_32_item (obj: POINTER; pos: INTEGER): CHARACTER_32 is
1199                          -- Wide character item at position `pos' in tuple `obj'.                          -- Wide character item at position `pos' in tuple `obj'.
1200                  external                  external
1201                          "C macro use %"eif_rout_obj.h%""                          "C macro use %"eif_rout_obj.h%""
# Line 1221  feature {NONE} -- Externals: Setting Line 1281  feature {NONE} -- Externals: Setting
1281                          "C macro use %"eif_rout_obj.h%""                          "C macro use %"eif_rout_obj.h%""
1282                  end                  end
1283    
1284          eif_put_character_item_with_object (obj: POINTER; pos: INTEGER; v: POINTER) is          eif_put_character_8_item_with_object (obj: POINTER; pos: INTEGER; v: POINTER) is
1285                          -- Set character item at position `pos' in tuple `obj' with `v'.                          -- Set character item at position `pos' in tuple `obj' with `v'.
1286                  external                  external
1287                          "C macro use %"eif_rout_obj.h%""                          "C macro use %"eif_rout_obj.h%""
1288                  end                  end
1289    
1290          eif_put_wide_character_item_with_object (obj: POINTER; pos: INTEGER; v: POINTER) is          eif_put_character_32_item_with_object (obj: POINTER; pos: INTEGER; v: POINTER) is
1291                          -- Set wide character item at position `pos' in tuple `obj' with `v'.                          -- Set wide character item at position `pos' in tuple `obj' with `v'.
1292                  external                  external
1293                          "C macro use %"eif_rout_obj.h%""                          "C macro use %"eif_rout_obj.h%""
# Line 1311  feature {NONE} -- Externals: Setting Line 1371  feature {NONE} -- Externals: Setting
1371                          "C macro use %"eif_rout_obj.h%""                          "C macro use %"eif_rout_obj.h%""
1372                  end                  end
1373    
1374          eif_put_character_item (obj: POINTER; pos: INTEGER; v: CHARACTER) is          eif_put_character_8_item (obj: POINTER; pos: INTEGER; v: CHARACTER_8) is
1375                          -- Set character item at position `pos' in tuple `obj' with `v'.                          -- Set character_8 item at position `pos' in tuple `obj' with `v'.
1376                  external                  external
1377                          "C macro use %"eif_rout_obj.h%""                          "C macro use %"eif_rout_obj.h%""
1378                  end                  end
1379    
1380          eif_put_wide_character_item (obj: POINTER; pos: INTEGER; v: WIDE_CHARACTER) is          eif_put_character_32_item (obj: POINTER; pos: INTEGER; v: CHARACTER_32) is
1381                          -- Set wide character item at position `pos' in tuple `obj' with `v'.                          -- Set character_32 item at position `pos' in tuple `obj' with `v'.
1382                  external                  external
1383                          "C macro use %"eif_rout_obj.h%""                          "C macro use %"eif_rout_obj.h%""
1384                  end                  end

Legend:
Removed from v.91476  
changed lines
  Added in v.91477

  ViewVC Help
Powered by ViewVC 1.1.23