00001 //-------------------------------------------------- 00012 //--------------------------------------------------- 00013 00014 #include "algorithm_definition.h" 00015 00016 namespace imedgine 00017 { 00018 //--------------------------------------------------- 00019 00020 AlgorithmDefinition::AlgorithmDefinition() 00021 { 00022 } 00023 00024 //--------------------------------------------------- 00025 00026 AlgorithmDefinition::~AlgorithmDefinition() 00027 { 00028 } 00029 00030 //--------------------------------------------------- 00031 00032 void AlgorithmDefinition::setName(std::string name) 00033 { 00034 name_ = name; 00035 } 00036 00037 //--------------------------------------------------- 00038 00039 void AlgorithmDefinition::setClassification(std::string classification) 00040 { 00041 classification_ = classification; 00042 } 00043 00044 //--------------------------------------------------- 00045 00046 void AlgorithmDefinition::setLibraryName(std::string library_name) 00047 { 00048 library_name_ = library_name; 00049 } 00050 00051 //--------------------------------------------------- 00052 00053 std::string AlgorithmDefinition::getName() 00054 { 00055 return name_; 00056 } 00057 00058 //--------------------------------------------------- 00059 00060 std::string AlgorithmDefinition::getClassification() 00061 { 00062 return classification_; 00063 } 00064 00065 //--------------------------------------------------- 00066 00067 std::string AlgorithmDefinition::getLibraryName() 00068 { 00069 return library_name_; 00070 } 00071 00072 //--------------------------------------------------- 00073 00074 void AlgorithmDefinition::setDatasetCombinations(AlgorithmDefinition::combinations_definition_list_type combinations) 00075 { 00076 dataset_combinations_ = combinations; 00077 } 00078 00079 //--------------------------------------------------- 00080 00081 AlgorithmDefinition::combinations_definition_list_type AlgorithmDefinition::getDatasetCombinations() 00082 { 00083 return dataset_combinations_; 00084 } 00085 00086 //--------------------------------------------------- 00087 00088 AlgorithmDefinition::accepted_datasets_type 00089 AlgorithmDefinition::getPossibleCombinations(std::string name, AlgorithmDefinition::already_set_datasets_type already_set_datasets) 00090 { 00091 accepted_datasets_type possible_dataset_types; 00092 //iterate over list of combinations 00093 for (combinations_definition_list_type::const_iterator iter = dataset_combinations_.begin();iter != dataset_combinations_.end();++iter) 00094 { 00095 //the acccepted datasets for this combination 00096 accepted_datasets_collection_type accepted_datasets = *iter; 00097 bool do_remove = false; 00098 for(already_set_datasets_type::const_iterator ds_iter=already_set_datasets.begin();ds_iter != already_set_datasets.end();++ds_iter) 00099 { 00100 std::string dataset_name = ds_iter->first; 00101 dataset_type dataset_type = ds_iter->second; 00102 accepted_datasets_collection_type::const_iterator accepted_datasets_iterator = accepted_datasets.find(dataset_name); 00103 if (accepted_datasets_iterator != accepted_datasets.end()) 00104 { 00105 accepted_datasets_type accepted = accepted_datasets_iterator->second; 00106 //not found in combination 00107 if (accepted.find(dataset_type) == accepted.end()) 00108 { 00109 do_remove = true; 00110 } 00111 } 00112 } 00113 00114 //only if the dataset shan't be removed 00115 if (!do_remove) 00116 { 00117 accepted_datasets_collection_type::const_iterator datasets_iterator = accepted_datasets.find(name); 00118 if (datasets_iterator != accepted_datasets.end()) 00119 { 00120 accepted_datasets_type datasets = datasets_iterator->second; 00121 possible_dataset_types.insert(datasets.begin(),datasets.end()); 00122 } 00123 } 00124 } 00125 return possible_dataset_types; 00126 } 00127 00128 //--------------------------------------------------- 00129 00130 std::string AlgorithmDefinition::toString() 00131 { 00132 std::stringstream output; 00133 output << "name: " << name_ << std::endl; 00134 output << "classification: " << classification_ << std::endl; 00135 output << "library name: " << library_name_ << std::endl; 00136 return output.str(); 00137 } 00138 00139 //--------------------------------------------------- 00140 00141 void AlgorithmDefinition::addOutputDataset(AlgorithmDefinition::dataset_definition_pointer_type dataset) 00142 { 00143 output_datasets_.insert(std::make_pair(dataset->getName(), dataset)); 00144 } 00145 00146 //--------------------------------------------------- 00147 00148 void AlgorithmDefinition::addInputDataset(AlgorithmDefinition::dataset_definition_pointer_type dataset) 00149 { 00150 input_datasets_.insert(std::make_pair(dataset->getName(), dataset)); 00151 } 00152 00153 //--------------------------------------------------- 00154 00155 AlgorithmDefinition::dataset_definition_pointer_type AlgorithmDefinition::getInputDataset(std::string name) 00156 { 00157 dataset_definition_collection_type::const_iterator iter = input_datasets_.find(name); 00158 if (iter != input_datasets_.end()) 00159 { 00160 return iter->second; 00161 } 00162 else 00163 { 00164 //TODO throw exception 00165 return dataset_definition_pointer_type(); 00166 } 00167 } 00168 00169 //--------------------------------------------------- 00170 00171 AlgorithmDefinition::dataset_definition_collection_type AlgorithmDefinition::getInputDatasets() 00172 { 00173 return input_datasets_; 00174 } 00175 00176 //--------------------------------------------------- 00177 00178 AlgorithmDefinition::dataset_definition_collection_type AlgorithmDefinition::getOutputDatasets() 00179 { 00180 return output_datasets_; 00181 } 00182 00183 //--------------------------------------------------- 00184 00185 void AlgorithmDefinition::setOutputDatasetIds(config_dataset_id_to_output_map_type &dataset_id_map) 00186 { 00187 for(dataset_definition_collection_type::const_iterator output_ds_def_iterator=output_datasets_.begin(); 00188 output_ds_def_iterator!=output_datasets_.end(); 00189 ++output_ds_def_iterator) 00190 { 00191 dataset_definition_pointer_type output_ds_def = output_ds_def_iterator->second; 00192 dataset_id_map.insert(std::make_pair(output_ds_def->getName(), output_ds_def->getType())); 00193 } 00194 } 00195 } 00196