note

	description:

		"Member wrapper that provides native mapping"

	library: "Eiffel Wrapper Generator Library"
	copyright: "Copyright (c) 1999, Andreas Leitner and others"
	license: "Eiffel Forum License v2 (see forum.txt)"
	date: "$Date$"
	revision: "$Revision$"

class EWG_NATIVE_MEMBER_WRAPPER

inherit

	EWG_MEMBER_WRAPPER
		rename
			make as make_member_wrapper
		end

	KL_IMPORTED_STRING_ROUTINES
		export {NONE} all end

create

	make

feature {NONE} -- Initialization

	make (a_mapped_eiffel_name: STRING; a_header_file_name: STRING;
			a_c_declaration: EWG_C_AST_DECLARATION)
		require
			a_mapped_eiffel_name_not_void: a_mapped_eiffel_name /= Void
			a_mapped_eiffel_name_not_empty: not a_mapped_eiffel_name.is_empty
			a_header_file_name_not_void: a_header_file_name /= Void
			a_header_file_name_not_empty: not a_header_file_name.is_empty
			a_c_declaration_not_void: a_c_declaration /= Void
		do
			make_member_wrapper (a_mapped_eiffel_name, a_header_file_name)
			c_declaration := a_c_declaration
		ensure
			mapped_eiffel_name_set: mapped_eiffel_name = a_mapped_eiffel_name
			header_file_name_set: header_file_name = a_header_file_name
			c_declaration_set: c_declaration = a_c_declaration
		end

feature -- Access

	proposed_feature_name_list: DS_LINEAR [STRING]
		local
			old_getter_name: STRING
			setter_name: STRING
			list: DS_LINKED_LIST [STRING]
		do
			create old_getter_name.make (mapped_eiffel_name.count + 4)
			old_getter_name.append_string ("get_")
			old_getter_name.append_string (mapped_eiffel_name)

			create setter_name.make (mapped_eiffel_name.count + 4)
			setter_name.append_string ("set_")
			setter_name.append_string (mapped_eiffel_name)

			create list.make
			list.put_last (mapped_eiffel_name)
			list.put_last (old_getter_name)
			list.put_last (setter_name)
			Result := list
		end

	c_declaration: EWG_C_AST_DECLARATION
			-- C declaration to wrap

	eiffel_type: STRING
		do
			Result := c_declaration.type.corresponding_eiffel_type
		ensure
			result_not_void: Result /= Void
		end

invariant

	c_declaration_not_void: c_declaration /= Void

end