Module: FlowConcreteBuilder
- Defined in:
- lib/builders_examples/ruby_builders/Flow_concrete_builder.rb,
lib/builders_examples/pdm_builders/PhaseI/Flow_concrete_builder.rb,
lib/builders_examples/pdm_builders/PhaseIWithPriorityQueues/Flow_concrete_builder.rb
Instance Method Summary collapse
- #build_cplusplus_definition ⇒ Object
- #build_output_representation ⇒ Object
- #build_parameter_flow_distribution(distribution_name, distribution_variable) ⇒ Object
- #build_scilab_definition ⇒ Object
- #get_string_parameters_from(flow_definition_string, name_of_flow) ⇒ Object
Instance Method Details
#build_cplusplus_definition ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/builders_examples/pdm_builders/PhaseI/Flow_concrete_builder.rb', line 44 def build_cplusplus_definition start_time_of_flow = 0 # flow cplusplus_flows_definition = "\n" cplusplus_flows_definition += "\t ///// definition of flow #{@id} \n" cplusplus_flows_definition += "\t auto flow#{@id}PeriodDistribution = readDistributionParameter(\"flow#{@id}.periodDistribution\"); \n" cplusplus_flows_definition += "\t auto flow#{@id}PacketSizeDistribution = readDistributionParameter(\"flow#{@id}.packetSizeDistribution\"); \n" cplusplus_flows_definition += "\t auto flow#{@id} = std::make_shared<Flow>(\"#{@id}\", #{start_time_of_flow} /*startTime*/, #{priority} /*typeOfService*/, flow#{@id}PeriodDistribution, flow#{@id}PacketSizeDistribution); \n" #routes cplusplus_flows_definition += "\t // routes for flow #{@id} \n" paths.each_with_index do |path, index| # add each route/path in the flow cplusplus_flows_definition += "\t auto flow#{@id}_route#{index} = std::make_shared<Route>( std::deque<Route::Node>{ \n" path.links.each do |link| cplusplus_flows_definition += "\t\t\t {#{link.src_port}, \"#{link.src_element.id}.Routing\"}, \n" end last_link = path.links.last cplusplus_flows_definition += "\t\t\t {#{last_link.dst_port}, \"#{last_link.dst_element.id}.Routing\"} \n" cplusplus_flows_definition += "\t });" cplusplus_flows_definition += "\t \n" end # registrations cplusplus_flows_definition += "\t // register flow #{@id} with its routes\n" unique_sources = paths.map{ |path| path.links.first.src_element.id }.uniq{|id| id} # only add unique sources unique_sources.each do |source| cplusplus_flows_definition += "\t FlowDefinitions::registerFlowSourceNode(flow#{@id}, \"#{source}.GeneratorApplication\"); \n" end paths.each_with_index do |path, index| # register each route/path in the flow for each route cplusplus_flows_definition += "\t FlowDefinitions::registerFlowRoute(flow#{@id}, flow#{@id}_route#{index}); \n" end cplusplus_flows_definition += "\t \n" cplusplus_flows_definition end |
#build_output_representation ⇒ Object
2 3 4 |
# File 'lib/builders_examples/ruby_builders/Flow_concrete_builder.rb', line 2 def build_output_representation "" end |
#build_parameter_flow_distribution(distribution_name, distribution_variable) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/builders_examples/pdm_builders/PhaseI/Flow_concrete_builder.rb', line 16 def build_parameter_flow_distribution(distribution_name, distribution_variable) scilab_flow_parameter_distribution = '' case distribution_variable when ConstantDistribution scilab_flow_parameter_distribution = "flow#{@id}.#{distribution_name} = DISTRIBUTION_CONSTANT;\n" scilab_flow_parameter_distribution += "flow#{@id}.#{distribution_name}_value = #{distribution_variable.value}; // (in bits) value for the constant distribution\n" when ExponentialDistribution scilab_flow_parameter_distribution = "flow#{@id}.#{distribution_name} = DISTRIBUTION_EXPONENTIAL;\n" scilab_flow_parameter_distribution += "flow#{@id}.#{distribution_name}_mu = #{distribution_variable.mu}; // (in seconds) mean for the exponential distribution.\n" when NormalDistribution scilab_flow_parameter_distribution = "flow#{@id}.#{distribution_name} = DISTRIBUTION_NORMAL;\n" scilab_flow_parameter_distribution += "flow#{@id}.#{distribution_name}_mu = #{distribution_variable.mu}; \n" scilab_flow_parameter_distribution += "flow#{@id}.#{distribution_name}_var = #{distribution_variable.var}; \n" when ParetoDistribution scilab_flow_parameter_distribution = "flow#{@id}.#{distribution_name} = DISTRIBUTION_PARETO;\n" scilab_flow_parameter_distribution += "flow#{@id}.#{distribution_name}_val1 = #{distribution_variable.val_1}; \n" scilab_flow_parameter_distribution += "flow#{@id}.#{distribution_name}_val2 = #{distribution_variable.val_2}; \n" scilab_flow_parameter_distribution += "flow#{@id}.#{distribution_name}_mean = #{distribution_variable.mean}; \n" when SplitDistribution scilab_flow_parameter_distribution = "flow#{@id}.#{distribution_name} = DISTRIBUTION_SPLIT;\n" scilab_flow_parameter_distribution += "flow#{@id}.#{distribution_name}_shape = #{distribution_variable.shape}; \n" scilab_flow_parameter_distribution += "flow#{@id}.#{distribution_name}_scale = #{distribution_variable.scale}; \n" else raise "Distribution provided has a class which was unexpected. Class was: #{distribution_variable.class}" end scilab_flow_parameter_distribution end |
#build_scilab_definition ⇒ Object
8 9 10 11 12 13 14 |
# File 'lib/builders_examples/pdm_builders/PhaseI/Flow_concrete_builder.rb', line 8 def build_scilab_definition scilab_flows_definition = '' scilab_flows_definition += "\n" scilab_flows_definition += build_parameter_flow_distribution 'periodDistribution', distribution_rate scilab_flows_definition += build_parameter_flow_distribution 'packetSizeDistribution', distribution_size scilab_flows_definition end |
#get_string_parameters_from(flow_definition_string, name_of_flow) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/builders_examples/pdm_builders/PhaseIWithPriorityQueues/Flow_concrete_builder.rb', line 54 def get_string_parameters_from(flow_definition_string, name_of_flow) output = '' flow_definition_lines = flow_definition_string.split "\n" distribution_line = flow_definition_lines.shift distribution_name = (distribution_line.split "=").last.gsub /\s+/, "" distribution_name.gsub! ';', '' output += "#{name_of_flow} = #{distribution_name};\n" flow_definition_lines.each do |flow_definition_line| flow_definition_line.gsub( /\s+/, "" ) flow_definition_line.gsub! 'flow.', '' flow_definition_line.gsub! '\n', '' flow_definition_line.gsub! '_', '' flow_definition_line.gsub! ';', '' flow_definition_line.gsub! /\/\/.*/,'' #Remove comment from line key_and_value = flow_definition_line.split '=' key_and_value.first.gsub! /.*\./, '' output += "#{name_of_flow}_#{key_and_value.first} = #{key_and_value.last};\n" end output end |