indexing description: "Parent class for classes that use an" "EM_PROCEDURE to fill a field with values" author: "" date: "$Date$" revision: "$Revision$" deferred class EM_PROC_FIELD_GENERATOR[VI -> EM_ABSTRACT_VECTOR[INTEGER], VD -> EM_ABSTRACT_VECTOR[DOUBLE], P -> EM_PROCEDURE[VD]] inherit EM_CONSTANTS export {NONE} all end EM_TIME_SINGLETON export {NONE} all end feature make(a_procedure: P) is -- Create the object using 'a_procedure' do set_procedure(a_procedure) -- Set a default color mapper set_color_mapper(create {EM_COLOR_MAPPER_GRAYSCALE}) -- As a default, let's schedule 80 percent of the event loop for us set_time_for_processing((0.7 * Em_default_time_for_eventprocessing).floor) evaluation_area_set := false field_dimension_set := false field_internal := void end generate_field is -- Generate the field and save in in last_field -- Be aware: this generates whole the field and -- can therefore be very time consuming require evaluation_area_set: evaluation_area_set = true field_dimension_set: field_dimension_set = true do from start_generating_field until is_finished loop continue_generating_field end ensure is_finished: is_finished = true end start_generating_field is require evaluation_area_set: evaluation_area_set = true texture_dimension_set: field_dimension_set = true deferred end continue_generating_field is require not_yet_finished: is_finished = false evaluation_area_set: evaluation_area_set = true field_dimension_set: field_dimension_set = true deferred end set_procedure(a_procedure: P) is -- Set the procedure to be used require a_procedure /= void do procedure := a_procedure ensure procedure = a_procedure end set_field_dimension(dimension: VI) is -- Set the dimension of the texture do field_dimension := dimension ensure field_dimension = dimension field_dimension_set = true end set_evaluation_area(an_eval_from, an_eval_to: VD) is -- Set the area where the function should be evaluated do eval_from := an_eval_from eval_to := an_eval_to evaluation_area_set := true ensure eval_from_set: eval_from = an_eval_from eval_from_to: eval_to = an_eval_to evaluation_area_set = true end set_time_for_processing(a_time_in_ms: INTEGER) is -- set the time that is used per 'continue_generating_field' require a_time_valid: a_time_in_ms > 0 do time_for_processing := a_time_in_ms end set_color_mapper(a_color_mapper: EM_COLOR_MAPPER) is -- set the color mapper used to generate a color from a function value require a_color_mapper /= void do color_mapper := a_color_mapper ensure color_mapper_set: color_mapper = a_color_mapper end feature -- Access procedure: P color_mapper: EM_COLOR_MAPPER last_field: ANY is -- return the last created field require is_finished = true deferred ensure Result = field_internal end time_for_processing: INTEGER eval_from, eval_to: VD field_dimension: VI is_finished: BOOLEAN progress: DOUBLE evaluation_area_set: BOOLEAN field_dimension_set: BOOLEAN feature {NONE} -- Implementation store_field_value(position: VI; value: DOUBLE) is -- store 'value' at (x,y) in the field require value_valid: value >= 0.0 and value <= 1.0 deferred end field_internal: ANY on_start is -- feature executed before field generation starts require not_started: is_finished = false deferred end on_finish is -- feature executed after field generation is finished require already_finished: is_finished = true deferred end invariant procedure_set: procedure /= void color_mapper_set: color_mapper /= void is_finished_implies_full_progress: is_finished implies progress = 1.0 progress_valid: progress >= 0 and progress <= 1.0 field_set_when_finished: is_finished implies last_field /= void end