module FlowConcreteBuilder
Public Instance Methods
build_cplusplus_definition()
click to toggle source
# 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()
click to toggle source
# File lib/builders_examples/pdm_builders/PhaseI/Flow_concrete_builder.rb, line 2 def build_output_representation scilab_definition = build_scilab_definition cplusplus_definition = build_cplusplus_definition {'scilab'=>scilab_definition, 'cplusplus'=>cplusplus_definition} end
build_parameter_flow_distribution(distribution_name, distribution_variable)
click to toggle source
# 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()
click to toggle source
# 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)
click to toggle source
# 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