-- This file is free software, which comes along with SmartEiffel. This -- software is distributed in the hope that it will be useful, but WITHOUT -- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -- FITNESS FOR A PARTICULAR PURPOSE. You can modify it as you want, provided -- this header is kept unaltered, and a notification of the changes is added. -- You are allowed to redistribute it and sell it, alone or as a part of -- another product. -- Copyright (C) 1994-2002 LORIA - INRIA - U.H.P. Nancy 1 - FRANCE -- Dominique COLNET and Suzanne COLLIN - SmartEiffel@loria.fr -- http://SmartEiffel.loria.fr -- expanded class POINTER -- -- References to objects meant to be exchanged with non-Eiffel software. -- -- Note : An Eiffel POINTER is mapped as C type "void *" or as -- Java "java.lang.Object" type. -- inherit HASHABLE redefine out_in_tagged_out_memory, fill_tagged_out_memory end STRING_HANDLER feature is_null: BOOLEAN is -- Is the external POINTER a NULL pointer ? do Result := not is_not_null end is_not_null: BOOLEAN is -- Is the external POINTER a non-NULL pointer ? external "SmartEiffel" end to_string: STRING is do string_buffer.clear Current.append_in(string_buffer) Result := string_buffer.twin end append_in(buffer: STRING) is -- Append on `str' a viewable version of `Current'. local storage: NATIVE_ARRAY[CHARACTER]; i: INTEGER do from storage := string_buffer.storage basic_sprintf_pointer(storage, Current) i := 0 until storage.item(i) = '%U' loop buffer.extend(storage.item(i)) i := i + 1 end end out_in_tagged_out_memory, fill_tagged_out_memory is do Current.append_in(tagged_out_memory) end hash_code: INTEGER is do Result := basic_pointer_hash_code(Current) end infix "+" (offset: INTEGER): POINTER is -- `Current' moved by an offset of `offset' bytes. do Result := basic_pointer_plus(Current,offset) end to_any: ANY is -- Dangerous forced conversion. This function assume that `Current' -- is really a reference to some Eiffel allocated object. do Result := basic_pointer_to_any(Current) end feature -- For compatibility with the obsolete INTEGER_REF style: item: POINTER set_item(value: like item) is do item := value ensure item = value end feature {NONE} basic_sprintf_pointer(native_array: NATIVE_ARRAY[CHARACTER];p: POINTER) is external "SmartEiffel" end basic_pointer_hash_code(p: POINTER): INTEGER is external "SmartEiffel" end basic_pointer_to_any(p: POINTER): ANY is -- Dangerous forced conversion. This function assume that `p' is -- really a reference to some Eiffel allocated object. external "SmartEiffel" end basic_pointer_plus(p: POINTER; offset: INTEGER): POINTER is -- Pointer `p' moved by an offset of `offset' bytes. external "SmartEiffel" end string_buffer: STRING is once create Result.make(64) end end -- POINTER