
indexing

	description: "A mask level"
	author: "David Hollenberg"
	date: "July 27, 2004"

deferred class ABSTRACT_LEVEL
inherit
	NULL_VALUE_CHECK_ACCESS

feature -- Properties

	level_no: INTEGER is
			-- Mask level number
		deferred
		end

	level_name: STRING is
			-- Mask level name
		deferred
		end

	mebes_extension: STRING is
			-- Mebes file extension for level
		deferred
		end

	is_null_mebes_extension: BOOLEAN is
			-- Is `mebes_extension' null?
		deferred
		end

	non_null_mebes_extension: like mebes_extension is
			-- Value of `mebes_extension', with error check 
			-- for nullness
		do
			check_not_null ("mebes_extension", is_null_mebes_extension, Current)
			Result := mebes_extension
		end

	wafer_vendor_level_id: STRING is
			-- Wafer vendor level identifier
		deferred
		end

	is_null_wafer_vendor_level_id: BOOLEAN is
			-- Is `wafer_vendor_level_id' null?
		deferred
		end

	non_null_wafer_vendor_level_id: like wafer_vendor_level_id is
			-- Value of `wafer_vendor_level_id', with error check 
			-- for nullness
		do
			check_not_null ("wafer_vendor_level_id", is_null_wafer_vendor_level_id, Current)
			Result := wafer_vendor_level_id
		end

	mirroring: STRING is
			-- Type of mirroring for levels
		deferred
		end

	is_null_mirroring: BOOLEAN is
			-- Is `mirroring' null?
		deferred
		end

	non_null_mirroring: like mirroring is
			-- Value of `mirroring', with error check 
			-- for nullness
		do
			check_not_null ("mirroring", is_null_mirroring, Current)
			Result := mirroring
		end

	geometry_mirrored: BOOLEAN is
			-- Should geometry on this level be mirrored on mask?
		local
			val: STRING
			mirror: MIRRORING_VALUES
		do
			val := non_null_mirroring
			Result := val.is_equal (mirror.All_) or val.is_equal (mirror.Geometry)
		end

	titles_mirrored: BOOLEAN is
			-- Should titles on this level be mirrored on mask?
		local
			val: STRING
			mirror: MIRRORING_VALUES
		do
			val := non_null_mirroring
			Result := val.is_equal (mirror.All_) or val.is_equal (mirror.Titles)
		end

	titles_xor_geometry_mirrored: BOOLEAN is
			-- Should either the geometry or the titles (but not
			-- both) be mirrored on mask?  
			-- Needed because job Mirror option mirrors
			-- both titles and geometry, while Title
			-- mirror option mirrors just the titles
		do
			Result := geometry_mirrored xor titles_mirrored
		end

	polarity: STRING is
			-- Polarity of level
		deferred
		end

	is_null_polarity: BOOLEAN is
			-- Is `polarity' null?
		deferred
		end

	non_null_polarity: like polarity is
			-- Value of `polarity', with error check 
			-- for nullness
		do
			check_not_null ("polarity", is_null_polarity, Current)
			Result := polarity
		end

	merged_pattern_file_spot_size: DOUBLE is
			-- Resolution for merged pattern file for level
		deferred
		end

	is_null_merged_pattern_file_spot_size: BOOLEAN is
			-- Is `merged_pattern_file_spot_size' null?
		deferred
		end

	non_null_merged_pattern_file_spot_size: like merged_pattern_file_spot_size is
			-- Value of `merged_pattern_file_spot_size', with error check 
			-- for nullness
		do
			check_not_null ("merged_pattern_file_spot_size", is_null_merged_pattern_file_spot_size, Current)
			Result := merged_pattern_file_spot_size
		end

	minimum_density: DOUBLE is
			-- Minimum density for level
		deferred
		end

	is_null_minimum_density: BOOLEAN is
			-- Is `minimum_density' null?
		deferred
		end

	non_null_minimum_density: like minimum_density is
			-- Value of `minimum_density', with error check 
			-- for nullness
		do
			check_not_null ("minimum_density", is_null_minimum_density, Current)
			Result := minimum_density
		end

	maximum_density: DOUBLE is
			-- Maximum density for level
		deferred
		end

	is_null_maximum_density: BOOLEAN is
			-- Is `maximum_density' null?
		deferred
		end

	non_null_maximum_density: like maximum_density is
			-- Value of `maximum_density', with error check 
			-- for nullness
		do
			check_not_null ("maximum_density", is_null_maximum_density, Current)
			Result := maximum_density
		end

	needs_density_report: BOOLEAN is
			-- Does level need to be included in a density
			-- report?
		do
			Result := not is_null_minimum_density
		end

	fill_pattern_gds_layer: INTEGER is
			-- GDS layer in fill pattern file to be used for 
			-- adding fill to level
		deferred
		end

	is_null_fill_pattern_gds_layer: BOOLEAN is
			-- Is `fill_pattern_gds_layer' null?
		deferred
		end

	non_null_fill_pattern_gds_layer: like fill_pattern_gds_layer is
			-- Value of `fill_pattern_gds_layer', with error check 
			-- for nullness
		do
			check_not_null ("fill_pattern_gds_layer", is_null_fill_pattern_gds_layer, Current)
			Result := fill_pattern_gds_layer
		end

	fill_pattern_sizing: DOUBLE is
			-- Total amount of sizing to be applied to fill
			-- pattern GDS layer, in microns at 1X
		deferred
		end

	is_null_fill_pattern_sizing: BOOLEAN is
			-- Is `fill_pattern_sizing' null?
		deferred
		end

	non_null_fill_pattern_sizing: like fill_pattern_sizing is
			-- Value of `fill_pattern_sizing', with error check 
			-- for nullness
		do
			check_not_null ("fill_pattern_sizing", is_null_fill_pattern_sizing, Current)
			Result := fill_pattern_sizing
		end

	mask_litho_type: STRING is
			-- Mask lithography type
		deferred
		end

	is_null_mask_litho_type: BOOLEAN is
			-- Is `mask_litho_type' null?
		deferred
		end

	non_null_mask_litho_type: like mask_litho_type is
			-- Value of `mask_litho_type', with error check 
			-- for nullness
		do
			check_not_null ("mask_litho_type", is_null_mask_litho_type, Current)
			Result := mask_litho_type
		end

	scale_factor: DOUBLE is
		deferred
		end

	filled_layer: BOOLEAN is
			-- Is layer filled?
		deferred
		end

feature	-- filtering tests

	is_my_level_name(a_nam: STRING): BOOLEAN is
	do  Result := equal(level_name, a_nam)
	end;

	is_my_level_no(a_no: INTEGER): BOOLEAN is
	do  Result := level_no = a_no
	end;

end
