note description: "Files, viewed as persistent sequences of bytes" library: "Free implementation of ELKS library" status: "See notice at end of class." legal: "See notice at end of class." date: "$Date: 2019-01-10 14:55:46 +0000 (Thu, 10 Jan 2019) $" revision: "$Revision: 102700 $" class RAW_FILE inherit FILE rename index as position redefine file_reopen, file_open, file_dopen, read_to_managed_pointer end create make, make_with_name, make_with_path, make_open_read, make_open_write, make_open_append, make_open_read_write, make_create_read_write, make_open_read_append, make_open_temporary, make_open_temporary_with_prefix feature -- Status report Support_storable: BOOLEAN = True -- Can medium be used to an Eiffel structure? feature -- Output put_integer (i: INTEGER_32) -- Write binary value of i at current position. -- Was declared in RAW_FILE as synonym of putint and put_integer_32. do file_pib (file_pointer, i) end putint (i: INTEGER_32) -- Write binary value of i at current position. -- Was declared in RAW_FILE as synonym of put_integer and put_integer_32. do file_pib (file_pointer, i) end put_integer_32 (i: INTEGER_32) -- Write binary value of i at current position. -- Was declared in RAW_FILE as synonym of put_integer and putint. do file_pib (file_pointer, i) end put_integer_8 (i: INTEGER_8) -- Write binary value of i at current position. do integer_buffer.put_integer_8 (i, 0) put_managed_pointer (integer_buffer, 0, 1) end put_integer_16 (i: INTEGER_16) -- Write binary value of i at current position. do integer_buffer.put_integer_16 (i, 0) put_managed_pointer (integer_buffer, 0, 2) end put_integer_64 (i: INTEGER_64) -- Write binary value of i at current position. do integer_buffer.put_integer_64 (i, 0) put_managed_pointer (integer_buffer, 0, 8) end put_natural_8 (i: NATURAL_8) -- Write binary value of i at current position. do integer_buffer.put_natural_8 (i, 0) put_managed_pointer (integer_buffer, 0, 1) end put_natural_16 (i: NATURAL_16) -- Write binary value of i at current position. do integer_buffer.put_natural_16 (i, 0) put_managed_pointer (integer_buffer, 0, 2) end put_natural (i: NATURAL_32) -- Write binary value of i at current position. -- Was declared in RAW_FILE as synonym of put_natural_32. do integer_buffer.put_natural_32 (i, 0) put_managed_pointer (integer_buffer, 0, 4) end put_natural_32 (i: NATURAL_32) -- Write binary value of i at current position. -- Was declared in RAW_FILE as synonym of put_natural. do integer_buffer.put_natural_32 (i, 0) put_managed_pointer (integer_buffer, 0, 4) end put_natural_64 (i: NATURAL_64) -- Write binary value of i at current position. do integer_buffer.put_natural_64 (i, 0) put_managed_pointer (integer_buffer, 0, 8) end put_boolean (b: BOOLEAN) -- Write binary value of b at current position. -- Was declared in RAW_FILE as synonym of putbool. do if b then put_character ('%/1/') else put_character ('%U') end end putbool (b: BOOLEAN) -- Write binary value of b at current position. -- Was declared in RAW_FILE as synonym of put_boolean. do if b then put_character ('%/1/') else put_character ('%U') end end put_real (r: REAL_32) -- Write binary value of r at current position. -- Was declared in RAW_FILE as synonym of putreal. do file_prb (file_pointer, r) end putreal (r: REAL_32) -- Write binary value of r at current position. -- Was declared in RAW_FILE as synonym of put_real. do file_prb (file_pointer, r) end put_double (d: REAL_64) -- Write binary value d at current position. -- Was declared in RAW_FILE as synonym of putdouble. do file_pdb (file_pointer, d) end putdouble (d: REAL_64) -- Write binary value d at current position. -- Was declared in RAW_FILE as synonym of put_double. do file_pdb (file_pointer, d) end put_data (p: POINTER; size: INTEGER_32) obsolete "Use `put_managed_pointer' instead. [2017-05-31]" -- Put data of length size pointed by p at -- current position. require p_not_null: p /= default_pointer extendible: extendible do file_ps (file_pointer, p, size) end feature -- Input read_integer -- Read the binary representation of a new 32-bit integer -- from file. Make result available in last_integer. -- Was declared in RAW_FILE as synonym of readint and read_integer_32. do last_integer := file_gib (file_pointer) end readint -- Read the binary representation of a new 32-bit integer -- from file. Make result available in last_integer. -- Was declared in RAW_FILE as synonym of read_integer and read_integer_32. do last_integer := file_gib (file_pointer) end read_integer_32 -- Read the binary representation of a new 32-bit integer -- from file. Make result available in last_integer. -- Was declared in RAW_FILE as synonym of read_integer and readint. do last_integer := file_gib (file_pointer) end read_integer_8 -- Read the binary representation of a new 8-bit integer -- from file. Make result available in last_integer_8. do read_to_managed_pointer (integer_buffer, 0, 1) last_integer_8 := integer_buffer.read_integer_8 (0) end read_integer_16 -- Read the binary representation of a new 16-bit integer -- from file. Make result available in last_integer_16. do read_to_managed_pointer (integer_buffer, 0, 2) last_integer_16 := integer_buffer.read_integer_16 (0) end read_integer_64 -- Read the binary representation of a new 64-bit integer -- from file. Make result available in last_integer_64. do read_to_managed_pointer (integer_buffer, 0, 8) last_integer_64 := integer_buffer.read_integer_64 (0) end read_natural_8 -- Read the binary representation of a new 8-bit natural -- from file. Make result available in last_natural_8. do read_to_managed_pointer (integer_buffer, 0, 1) last_natural_8 := integer_buffer.read_natural_8 (0) end read_natural_16 -- Read the binary representation of a new 16-bit natural -- from file. Make result available in last_natural_16. do read_to_managed_pointer (integer_buffer, 0, 2) last_natural_16 := integer_buffer.read_natural_16 (0) end read_natural -- Read the binary representation of a new 32-bit natural -- from file. Make result available in last_natural. -- Was declared in RAW_FILE as synonym of read_natural_32. do read_to_managed_pointer (integer_buffer, 0, 4) last_natural := integer_buffer.read_natural_32 (0) end read_natural_32 -- Read the binary representation of a new 32-bit natural -- from file. Make result available in last_natural. -- Was declared in RAW_FILE as synonym of read_natural. do read_to_managed_pointer (integer_buffer, 0, 4) last_natural := integer_buffer.read_natural_32 (0) end read_natural_64 -- Read the binary representation of a new 64-bit natural -- from file. Make result available in last_natural_64. do read_to_managed_pointer (integer_buffer, 0, 8) last_natural_64 := integer_buffer.read_natural_64 (0) end read_real -- Read the binary representation of a new real -- from file. Make result available in last_real. -- Was declared in RAW_FILE as synonym of readreal. do last_real := file_grb (file_pointer) end readreal -- Read the binary representation of a new real -- from file. Make result available in last_real. -- Was declared in RAW_FILE as synonym of read_real. do last_real := file_grb (file_pointer) end read_double -- Read the binary representation of a new double -- from file. Make result available in last_double. -- Was declared in RAW_FILE as synonym of readdouble. do last_double := file_gdb (file_pointer) end readdouble -- Read the binary representation of a new double -- from file. Make result available in last_double. -- Was declared in RAW_FILE as synonym of read_double. do last_double := file_gdb (file_pointer) end read_data (p: POINTER; nb_bytes: INTEGER_32) obsolete "Use `read_to_managed_pointer' instead. [2017-05-31]" -- Read a string of at most nb_bytes bound bytes -- or until end of file. -- Make result available in p. require p_not_null: p /= default_pointer is_readable: file_readable do bytes_read := file_fread (p, 1, nb_bytes, file_pointer) end read_to_managed_pointer (p: MANAGED_POINTER; start_pos, nb_bytes: INTEGER_32) -- Read at most nb_bytes bound bytes and make result -- available in p at position start_pos. do bytes_read := file_fread (p.item + start_pos, 1, nb_bytes, file_pointer) end read_to_string (a_string: STRING_8; pos, nb: INTEGER_32): INTEGER_32 -- Fill a_string, starting at position pos with at -- most nb characters read from current file. -- Return the number of characters actually read. do Result := file_gss (file_pointer, a_string.area.item_address (pos - 1), nb) a_string.reset_hash_codes end feature {FILE_ITERATION_CURSOR} -- Iteration file_fread (dest: POINTER; elem_size, nb_elems: INTEGER_32; file: POINTER): INTEGER_32 -- Read nb_elems of size elem_size in file file and store them -- in location dest. external "C signature (void *, size_t, size_t, FILE *): EIF_INTEGER use <stdio.h>" alias "fread" end feature {NONE} -- Implementation integer_buffer: MANAGED_POINTER -- Buffer used to read INTEGER_64, INTEGER_16, INTEGER_8 do Result := internal_integer_buffer if Result = Void then create Result.make (16) internal_integer_buffer := Result end end internal_integer_buffer: detachable MANAGED_POINTER -- Internal integer buffer file_gib (file: POINTER): INTEGER_32 -- Get an integer from file external "C signature (FILE *): EIF_INTEGER use %"eif_file.h%"" alias "eif_file_gib" end file_grb (file: POINTER): REAL_32 -- Read a real from file external "C signature (FILE *): EIF_REAL_32 use %"eif_file.h%"" alias "eif_file_grb" end file_gdb (file: POINTER): REAL_64 -- Read a double from file external "C signature (FILE *): EIF_REAL_64 use %"eif_file.h%"" alias "eif_file_gdb" end file_open (f_name: POINTER; how: INTEGER_32): POINTER -- File pointer for file f_name, in mode how. external "C signature (EIF_FILENAME, int): EIF_POINTER use %"eif_file.h%"" alias "eif_file_binary_open" end file_dopen (fd, how: INTEGER_32): POINTER -- File pointer for file of descriptor fd in mode how -- (which must fit the way fd was obtained). external "C signature (int, int): EIF_POINTER use %"eif_file.h%"" alias "eif_file_binary_dopen" end file_reopen (fname: POINTER; how: INTEGER_32; file: POINTER): POINTER -- File pointer to file, reopened to have new name f_name -- in a mode specified by how. external "C signature (EIF_FILENAME, int, FILE *): EIF_POINTER use %"eif_file.h%"" alias "eif_file_binary_reopen" end file_pib (file: POINTER; n: INTEGER_32) -- Put n to end of file. external "C signature (FILE *, EIF_INTEGER) use %"eif_file.h%"" alias "eif_file_pib" end file_prb (file: POINTER; r: REAL_32) -- Put r to end of file. external "C signature (FILE *, EIF_REAL_32) use %"eif_file.h%"" alias "eif_file_prb" end file_pdb (file: POINTER; d: REAL_64) -- Put d to end of file. external "C signature (FILE *, EIF_REAL_64) use %"eif_file.h%"" alias "eif_file_pdb" end invariant not_plain_text: not is_plain_text note copyright: "Copyright (c) 1984-2019, Eiffel Software and others" license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" source: "[ Eiffel Software 5949 Hollister Ave., Goleta, CA 93117 USA Telephone 805-685-1006, Fax 805-685-6869 Website http://www.eiffel.com Customer support http://support.eiffel.com ]" end -- class RAW_FILE
Generated by ISE EiffelStudio