Changeset 1686 for XIOS/dev/dev_olga/src/node/field.cpp
- Timestamp:
- 07/31/19 13:51:01 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_olga/src/node/field.cpp
r1654 r1686 46 46 , mustAutoTrigger(false) 47 47 , isEOF(false), nstepMaxRead(false) 48 { setVirtualVariableGroup(CVariableGroup::create(getId() + "_virtual_variable_group")); } 48 { setVirtualVariableGroup(CVariableGroup::create(getId() + "_virtual_variable_group")); 49 field_graph_start = -2; 50 field_graph_end = -2; 51 } 49 52 50 53 CField::CField(const StdString& id) … … 64 67 , mustAutoTrigger(false) 65 68 , isEOF(false), nstepMaxRead(false) 66 { setVirtualVariableGroup(CVariableGroup::create(getId() + "_virtual_variable_group")); } 69 { setVirtualVariableGroup(CVariableGroup::create(getId() + "_virtual_variable_group")); 70 field_graph_start = -2; 71 field_graph_end = -2; 72 } 73 67 74 68 75 CField::~CField(void) … … 1107 1114 * read by the client or/and written to a file 1108 1115 */ 1109 void CField::buildFilterGraph(CGarbageCollector& gc, bool enableOutput )1116 void CField::buildFilterGraph(CGarbageCollector& gc, bool enableOutput, Time start_graph, Time end_graph) 1110 1117 TRY 1111 1118 { 1112 1113 1119 if (!isReferenceSolvedAndTransformed) solveAllEnabledFieldsAndTransform(); 1120 if (!isGridChecked) checkGridOfEnabledFields(); 1114 1121 1115 1122 const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); 1123 1116 1124 const bool buildWorkflowGraph = (!build_workflow_graph.isEmpty() && build_workflow_graph == true); 1125 1126 1117 1127 const double defaultValue = detectMissingValues ? default_value : (!default_value.isEmpty() ? default_value : 0.0); 1118 1128 1119 1129 CContext* context = CContext::getCurrent(); 1130 1131 Time filter_start; 1132 if(!build_workflow_graph_start.isEmpty() && buildWorkflowGraph) filter_start = context->calendar->getInitDate()+build_workflow_graph_start; 1133 else if(build_workflow_graph_start.isEmpty() && buildWorkflowGraph) filter_start = 0; 1134 else filter_start = -1; 1135 1136 Time filter_end; 1137 if(!build_workflow_graph_end.isEmpty() && buildWorkflowGraph) filter_end = context->calendar->getInitDate()+build_workflow_graph_end; 1138 else if(build_workflow_graph_end.isEmpty() && buildWorkflowGraph) filter_end = 9223372036854775807; 1139 else filter_end = -1; 1140 1141 if(this->field_graph_start==-2) this->field_graph_start = filter_start; 1142 if(this->field_graph_end==-2) this->field_graph_end = filter_end; // init 1143 1144 // if(CXios::isClient) std::cout<<"****************** buildFilterGraph : field_id = "<<this->getId()<<" BEFORE: this->field_graph_start = "<<this->field_graph_start<<" this->field_graph_end = "<<this->field_graph_end<<std::endl; 1145 1146 if(start_graph == -1) 1147 { 1148 //nothing 1149 // if(CXios::isClient) std::cout<<"buildFilterGraph field_id = "<<this->getId()<<" case1: this->field_graph_start = "<<this->field_graph_start<<std::endl; 1150 } 1151 else //if(start_graph != -1) 1152 { 1153 if(this->field_graph_start == -1) this->field_graph_start = start_graph; 1154 else this->field_graph_start = min(this->field_graph_start, start_graph); 1155 1156 // if(CXios::isClient) std::cout<<"buildFilterGraph field_id = "<<this->getId()<<" case2: this->field_graph_start = "<<this->field_graph_start<<std::endl; 1157 } 1158 1159 1160 if(end_graph == -1) 1161 { 1162 //nothing 1163 // if(CXios::isClient) std::cout<<"buildFilterGraph field_id = "<<this->getId()<<" case1: this->field_graph_end = "<<this->field_graph_end<<std::endl; 1164 } 1165 else 1166 { 1167 if(this->field_graph_end == -1) this->field_graph_end = end_graph; 1168 else this->field_graph_end = max(this->field_graph_end, end_graph); 1169 1170 // if(CXios::isClient) std::cout<<"buildFilterGraph field_id = "<<this->getId()<<" case2: this->field_graph_end = "<<this->field_graph_end<<std::endl; 1171 } 1172 1173 1174 filter_start = this->field_graph_start; 1175 filter_end = this->field_graph_end; 1176 1177 1178 // if(CXios::isClient) std::cout<<"****************** buildFilterGraph : field_id = "<<this->getId()<<" AFTER: this->field_graph_start = "<<this->field_graph_start<<" this->field_graph_end = "<<this->field_graph_end<<std::endl; 1179 1180 1181 1182 1183 1120 1184 bool hasWriterServer = context->hasServer && !context->hasClient; 1121 1185 bool hasIntermediateServer = context->hasServer && context->hasClient; … … 1124 1188 { 1125 1189 if (!instantDataFilter) 1126 {1127 1190 instantDataFilter = clientSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true, false)); 1128 } 1191 1129 1192 1130 1193 // If the field data is to be read by the client or/and written to a file … … 1141 1204 { 1142 1205 if (!instantDataFilter) 1143 {1144 1206 instantDataFilter = clientSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, false, false)); 1145 } 1207 1146 1208 // If the field data is to be read by the client or/and written to a file 1147 1209 if (enableOutput && !storeFilter && !fileWriterFilter) … … 1163 1225 { 1164 1226 boost::scoped_ptr<IFilterExprNode> expr(parseExpr(getExpression() + '\0')); 1165 std::shared_ptr<COutputPin> filter = expr->reduce(gc, *this );1227 std::shared_ptr<COutputPin> filter = expr->reduce(gc, *this, filter_start, filter_end); 1166 1228 1167 1229 // Check if a spatial transformation is needed 1168 1230 if (!field_ref.isEmpty()) 1169 1231 { 1170 CField* fieldRef = CField::get(field_ref); 1171 fieldRef->build_workflow_graph.setValue(buildWorkflowGraph); 1172 CGrid* gridRef = fieldRef->grid; 1232 CGrid* gridRef = CField::get(field_ref)->grid; 1173 1233 1174 1234 if (grid && grid != gridRef && grid->hasTransform()) 1175 1235 { 1176 std::pair<std::shared_ptr<CFilter>, std::shared_ptr<CFilter> > filters = CSpatialTransformFilter::buildFilterGraph(gc, gridRef, grid, 1177 detectMissingValues, defaultValue, buildWorkflowGraph); 1236 std::pair<std::shared_ptr<CFilter>, std::shared_ptr<CFilter> > filters = CSpatialTransformFilter::buildFilterGraph(gc, gridRef, grid, detectMissingValues, defaultValue); 1178 1237 1179 1238 filter->connectOutput(filters.first, 0); 1180 1181 if (buildWorkflowGraph)1182 {1183 int filterOut = filter->getFilterId();1184 int filterIn = (std::static_pointer_cast<COutputPin>(filters.second))->getFilterId();1185 CWorkflowGraph::mapFieldToFilters[this->getId()].push_back(filterOut);1186 CWorkflowGraph::mapFieldToFilters[this->getId()].push_back(filterIn);1187 CWorkflowGraph::mapFilters[filterOut] = filter->GetName();1188 CWorkflowGraph::mapFilters[filterIn] = filters.second->GetName();1189 }1190 1239 filter = filters.second; 1191 1240 } … … 1193 1242 1194 1243 instantDataFilter = filter; 1244 instantDataFilter->field = this; 1245 filter->tag = buildWorkflowGraph; 1246 1247 filter->start_graph = filter_start; 1248 filter->end_graph = filter_end; 1249 1250 for(int i=0; i<filter->parent_filters.size(); i++) 1251 { 1252 filter->tag = filter->tag || filter->parent_filters[i]->tag; 1253 } 1195 1254 } 1196 1255 // Check if we have a reference on another field 1197 1256 else if (!field_ref.isEmpty()) 1198 1257 { 1199 CField::get(field_ref)->build_workflow_graph.setValue(buildWorkflowGraph); 1200 instantDataFilter = getFieldReference(gc); 1258 instantDataFilter = getFieldReference(gc, filter_start, filter_end); 1259 instantDataFilter->tag = buildWorkflowGraph; 1260 instantDataFilter->start_graph = filter_start; 1261 instantDataFilter->end_graph = filter_end; 1201 1262 } 1202 1263 // Check if the data is to be read from a file … … 1205 1266 checkTimeAttributes(); 1206 1267 instantDataFilter = serverSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true, false, freq_offset, true, 1207 detectMissingValues, defaultValue, buildWorkflowGraph)); 1268 detectMissingValues, defaultValue)); 1269 instantDataFilter->tag = buildWorkflowGraph; 1270 instantDataFilter->start_graph = filter_start; 1271 instantDataFilter->end_graph = filter_end; 1272 instantDataFilter->field = this; 1273 1208 1274 } 1209 1275 else // The data might be passed from the model … … 1211 1277 if (check_if_active.isEmpty()) check_if_active = false; 1212 1278 instantDataFilter = clientSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, false, true, NoneDu, false, 1213 detectMissingValues, defaultValue, buildWorkflowGraph)); 1214 if (buildWorkflowGraph) CWorkflowGraph::mapFilters[instantDataFilter->getFilterId()] = instantDataFilter->GetName(); 1279 detectMissingValues, defaultValue)); 1280 instantDataFilter->tag = buildWorkflowGraph; 1281 instantDataFilter->start_graph = filter_start; 1282 instantDataFilter->end_graph = filter_end; 1283 instantDataFilter->field = this; 1284 // if(CXios::isClient) std::cout<<"***********************buildFilterGraph init source filter : field_id = "<<this->getId()<<" sourcefilter->start_graph = "<<clientSourceFilter->start_graph<<" sourcefilter->end_graph = "<<clientSourceFilter->end_graph<<std::endl; 1215 1285 } 1216 1286 } … … 1224 1294 detectMissingValues, defaultValue)); 1225 1295 instantDataFilter->connectOutput(storeFilter, 0); 1296 1297 storeFilter->tag = (instantDataFilter->tag || buildWorkflowGraph); 1298 instantDataFilter->start_graph = filter_start; 1299 instantDataFilter->end_graph = filter_end; 1300 1301 instantDataFilter->setParentFiltersTag(); 1302 storeFilter->start_graph = filter_start; 1303 storeFilter->end_graph = filter_end; 1304 storeFilter->field = this; 1305 storeFilter->distance = instantDataFilter->distance+1; 1226 1306 } 1227 1307 1228 1308 if (file && (file->mode.isEmpty() || file->mode == CFile::mode_attr::write)) 1229 1309 { 1230 fileWriterFilter = std::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this , buildWorkflowGraph));1310 fileWriterFilter = std::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this)); 1231 1311 getTemporalDataFilter(gc, file->output_freq)->connectOutput(fileWriterFilter, 0); 1232 if (buildWorkflowGraph) 1233 { 1234 int filterOut = getTemporalDataFilter(gc, file->output_freq)->getFilterId(); 1235 int filterIn = fileWriterFilter->getFilterId(); 1236 CWorkflowGraph::mapFieldToFilters[this->getId()].push_back(filterOut); 1237 CWorkflowGraph::mapFieldToFilters[this->getId()].push_back(filterIn); 1238 CWorkflowGraph::mapFilters[filterOut] = "Temporal filter"; 1239 CWorkflowGraph::mapFilters[filterIn] = fileWriterFilter->GetName(); 1240 } 1312 1313 fileWriterFilter->tag = (getTemporalDataFilter(gc, file->output_freq)->tag || buildWorkflowGraph); 1314 getTemporalDataFilter(gc, file->output_freq)->start_graph = filter_start; 1315 getTemporalDataFilter(gc, file->output_freq)->end_graph = filter_end; 1316 getTemporalDataFilter(gc, file->output_freq)->tag = buildWorkflowGraph; 1317 getTemporalDataFilter(gc, file->output_freq)->setParentFiltersTag(); 1318 fileWriterFilter->start_graph = filter_start; 1319 fileWriterFilter->end_graph = filter_end; 1320 fileWriterFilter->distance = getTemporalDataFilter(gc, file->output_freq)->distance+1; 1321 1322 // std::cout<<"CFileWriterFilter filter start = "<<filter_start<<" end = "<<filter_end<<" field = "<<this->getId()<<std::endl; 1323 1241 1324 } 1242 1325 } … … 1252 1335 * \return the output pin corresponding to the field reference 1253 1336 */ 1254 std::shared_ptr<COutputPin> CField::getFieldReference(CGarbageCollector& gc )1337 std::shared_ptr<COutputPin> CField::getFieldReference(CGarbageCollector& gc, Time start_graph, Time end_graph) 1255 1338 TRY 1256 1339 { … … 1260 1343 1261 1344 CField* fieldRef = CField::get(field_ref); 1262 fieldRef->buildFilterGraph(gc, false); 1263 bool buildWorkflowGraph = (!build_workflow_graph.isEmpty() && build_workflow_graph == true); 1345 fieldRef->buildFilterGraph(gc, false, start_graph, end_graph); 1346 const bool buildWorkflowGraph = (!build_workflow_graph.isEmpty() && build_workflow_graph == true); 1347 1348 CContext* context = CContext::getCurrent(); 1349 1350 Time filter_start; 1351 if(!build_workflow_graph_start.isEmpty() && buildWorkflowGraph) filter_start = context->calendar->getInitDate()+build_workflow_graph_start; 1352 else if(build_workflow_graph_start.isEmpty() && buildWorkflowGraph) filter_start = 0; 1353 else filter_start = -1; 1354 1355 Time filter_end; 1356 if(!build_workflow_graph_end.isEmpty() && buildWorkflowGraph) filter_end = context->calendar->getInitDate()+build_workflow_graph_end; 1357 else if(build_workflow_graph_end.isEmpty() && buildWorkflowGraph) filter_end = 9223372036854775807; 1358 else filter_end = -1; 1359 1360 if(this->field_graph_start==-2) this->field_graph_start = filter_start; 1361 if(this->field_graph_end==-2) this->field_graph_end = filter_end; // init 1362 1363 // if(CXios::isClient) std::cout<<"getFieldReference field_id = "<<this->getId()<<" BEFORE: this->field_graph_start = "<<this->field_graph_start<<" this->field_graph_end = "<<this->field_graph_end<<std::endl; 1364 1365 if(start_graph == -1) 1366 { 1367 //nothing 1368 // if(CXios::isClient) std::cout<<"getFieldReference field_id = "<<this->getId()<<" case1: this->field_graph_start = "<<this->field_graph_start<<std::endl; 1369 } 1370 else //if(start_graph != -1) 1371 { 1372 if(this->field_graph_start == -1) this->field_graph_start = start_graph; 1373 else this->field_graph_start = min(this->field_graph_start, start_graph); 1374 1375 // if(CXios::isClient) std::cout<<"getFieldReference field_id = "<<this->getId()<<" case2: this->field_graph_start = "<<this->field_graph_start<<std::endl; 1376 } 1377 1378 if(end_graph == -1) 1379 { 1380 //nothing 1381 // if(CXios::isClient) std::cout<<"getFieldReference field_id = "<<this->getId()<<" case1: this->field_graph_end = "<<this->field_graph_end<<std::endl; 1382 } 1383 else 1384 { 1385 if(this->field_graph_end == -1) this->field_graph_end = end_graph; 1386 else this->field_graph_end = max(this->field_graph_end, end_graph); 1387 1388 // if(CXios::isClient) std::cout<<"getFieldReference field_id = "<<this->getId()<<" case2: this->field_graph_end = "<<this->field_graph_end<<std::endl; 1389 } 1390 1391 filter_start = this->field_graph_start; 1392 filter_end = this->field_graph_end; 1393 1394 // if(CXios::isClient) std::cout<<"getFieldReference field_id = "<<this->getId()<<" AFTER: this->field_graph_start = "<<this->field_graph_start<<" this->field_graph_end = "<<this->field_graph_end<<std::endl; 1395 1264 1396 1265 1397 std::pair<std::shared_ptr<CFilter>, std::shared_ptr<CFilter> > filters; … … 1269 1401 bool hasMissingValue = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); 1270 1402 double defaultValue = hasMissingValue ? default_value : (!default_value.isEmpty() ? default_value : 0.0); 1271 filters = CSpatialTransformFilter::buildFilterGraph(gc, fieldRef->grid, grid, hasMissingValue, defaultValue, buildWorkflowGraph); 1403 filters = CSpatialTransformFilter::buildFilterGraph(gc, fieldRef->grid, grid, hasMissingValue, defaultValue); 1404 1405 fieldRef->getInstantDataFilter()->connectOutput(filters.first, 0); 1406 1407 1408 1409 filters.second->parent_filters.resize(1); 1410 filters.second->parent_filters[0]= fieldRef->getInstantDataFilter(); 1411 1412 filters.second->tag = (buildWorkflowGraph || filters.second->parent_filters[0]->tag); 1413 1414 filters.second->start_graph = filter_start; 1415 filters.second->end_graph = filter_end; 1416 filters.second->field = this; 1417 1272 1418 } 1273 1419 else 1274 1420 { 1275 filters.first = filters.second = std::shared_ptr<CFilter>(new CPassThroughFilter(gc, buildWorkflowGraph)); 1276 } 1277 1278 fieldRef->getInstantDataFilter()->connectOutput(filters.first, 0); 1279 1280 if (buildWorkflowGraph) 1281 { 1282 int filterOut = fieldRef->instantDataFilter->getFilterId(); 1283 int filterIn = (std::static_pointer_cast<COutputPin>(filters.first))->getFilterId(); 1284 CWorkflowGraph::mapFieldToFilters[fieldRef->getId()].push_back(filterOut); 1285 CWorkflowGraph::mapFieldToFilters[fieldRef->getId()].push_back(filterIn); 1286 CWorkflowGraph::mapFilters[filterOut] = fieldRef->getInstantDataFilter()->GetName(); 1287 CWorkflowGraph::mapFilters[filterIn] = filters.first->GetName(); 1288 } 1421 filters.first = filters.second = std::shared_ptr<CFilter>(new CPassThroughFilter(gc)); 1422 1423 fieldRef->getInstantDataFilter()->connectOutput(filters.first, 0); 1424 1425 1426 filters.second->parent_filters.resize(1); 1427 filters.second->parent_filters[0]= fieldRef->getInstantDataFilter(); 1428 1429 filters.second->tag = (buildWorkflowGraph || filters.second->parent_filters[0]->tag); 1430 1431 filters.second->start_graph = filter_start; 1432 filters.second->end_graph = filter_end; 1433 filters.second->field = this; 1434 1435 } 1436 1289 1437 return filters.second; 1290 1438 } … … 1300 1448 * \return the output pin corresponding to a self reference 1301 1449 */ 1302 std::shared_ptr<COutputPin> CField::getSelfReference(CGarbageCollector& gc) 1303 TRY 1304 { 1450 std::shared_ptr<COutputPin> CField::getSelfReference(CGarbageCollector& gc, Time start_graph, Time end_graph) 1451 TRY 1452 { 1453 if(CXios::isClient) std::cout<<"getSelfReference field_id = "<<this->getId()<<" start_graph = "<<start_graph<<" end_graph = "<<end_graph<<std::endl; 1454 1305 1455 if (instantDataFilter || !hasExpression()) 1306 1456 ERROR("COutputPin* CField::getSelfReference(CGarbageCollector& gc)", 1307 1457 "Impossible to add a self reference to a field which has already been parsed or which does not have an expression."); 1458 1459 bool buildWorkflowGraph = (!build_workflow_graph.isEmpty() && build_workflow_graph == true); 1308 1460 1309 1461 if (!selfReferenceFilter) … … 1342 1494 } 1343 1495 1496 selfReferenceFilter->tag = buildWorkflowGraph; 1497 selfReferenceFilter->field = this; 1344 1498 return selfReferenceFilter; 1345 1499 } … … 1361 1515 const bool buildWorkflowGraph = (!build_workflow_graph.isEmpty() && build_workflow_graph == true); 1362 1516 1517 CContext* context = CContext::getCurrent(); 1518 1519 // Time filter_start; 1520 // if(!build_workflow_graph_start.isEmpty() && buildWorkflowGraph) filter_start = context->calendar->getInitDate()+build_workflow_graph_start; 1521 // else if(build_workflow_graph_start.isEmpty() && buildWorkflowGraph) filter_start = 0; 1522 // else filter_start = -1; 1523 1524 // Time filter_end; 1525 // if(!build_workflow_graph_end.isEmpty() && buildWorkflowGraph) filter_end = context->calendar->getInitDate()+build_workflow_graph_end; 1526 // else if(build_workflow_graph_end.isEmpty() && buildWorkflowGraph) filter_end = 9223372036854775807; 1527 // else filter_end = -1; 1528 1529 // filter_start = this->field_graph_start; 1530 // filter_end = this->field_graph_end; 1531 1532 // if(CXios::isClient) std::cout<<"getTemporalDataFilter field_id = "<<this->getId()<<" this->field_graph_start = "<<this->field_graph_start<<" this->field_graph_end = "<<this->field_graph_end<<std::endl; 1533 1363 1534 if (it == temporalDataFilters.end()) 1364 1535 { … … 1370 1541 1371 1542 const bool detectMissingValues = (!detect_missing_value.isEmpty() && detect_missing_value == true); 1372 std::shared_ptr<CTemporalFilter> temporalFilter(new CTemporalFilter(gc, operation, CContext::getCurrent()->getCalendar()->getInitDate(),1373 freq_op, freq_offset, outFreq,1374 detectMissingValues, buildWorkflowGraph));1543 std::shared_ptr<CTemporalFilter> temporalFilter(new CTemporalFilter(gc, operation, 1544 CContext::getCurrent()->getCalendar()->getInitDate(), 1545 freq_op, freq_offset, outFreq, detectMissingValues)); 1375 1546 1376 1547 instantDataFilter->connectOutput(temporalFilter, 0); 1377 1378 if (buildWorkflowGraph) 1379 { 1380 int filterOut = instantDataFilter->getFilterId(); 1381 int filterIn = (std::static_pointer_cast<COutputPin>(temporalFilter))->getFilterId(); 1382 CWorkflowGraph::mapFieldToFilters[this->getId()].push_back(filterOut); 1383 CWorkflowGraph::mapFieldToFilters[this->getId()].push_back(filterIn); 1384 CWorkflowGraph::mapFilters[filterOut] = getInstantDataFilter()->GetName(); 1385 CWorkflowGraph::mapFilters[filterIn] = temporalFilter->GetName(); 1386 } 1548 // temporalFilter->tag = buildWorkflowGraph; 1549 1550 temporalFilter->parent_filters.resize(1); 1551 temporalFilter->parent_filters[0] = instantDataFilter; 1552 1553 1554 if(temporalFilter->parent_filters[0]->tag) temporalFilter->tag=true; 1555 1556 // temporalFilter->start_graph = filter_start; 1557 // temporalFilter->end_graph = filter_end; 1558 temporalFilter->field = this; 1387 1559 1388 1560 it = temporalDataFilters.insert(std::make_pair(outFreq, temporalFilter)).first; 1389 1561 } 1562 1390 1563 return it->second; 1391 1564 } … … 1419 1592 1420 1593 const bool detectMissingValues = (!detect_missing_value.isEmpty() && detect_missing_value == true); 1421 constbool buildWorkflowGraph = (!build_workflow_graph.isEmpty() && build_workflow_graph == true);1594 bool buildWorkflowGraph = (!build_workflow_graph.isEmpty() && build_workflow_graph == true); 1422 1595 std::shared_ptr<CTemporalFilter> temporalFilter(new CTemporalFilter(gc, operation, 1423 CContext::getCurrent()->getCalendar()->getInitDate(), 1424 freq_op, freq_offset, outFreq, 1425 detectMissingValues, buildWorkflowGraph)); 1596 CContext::getCurrent()->getCalendar()->getInitDate(), 1597 freq_op, freq_offset, outFreq, detectMissingValues)); 1426 1598 1427 1599 selfReferenceFilter->connectOutput(temporalFilter, 0); 1428 if (buildWorkflowGraph) 1429 1430 { 1431 int filterOut = selfReferenceFilter->getFilterId(); 1432 int filterIn = (std::static_pointer_cast<COutputPin>(temporalFilter))->getFilterId(); 1433 CWorkflowGraph::mapFieldToFilters[this->getId()].push_back(filterOut); 1434 CWorkflowGraph::mapFieldToFilters[this->getId()].push_back(filterIn); 1435 CWorkflowGraph::mapFilters[filterOut] = selfReferenceFilter->GetName(); 1436 CWorkflowGraph::mapFilters[filterIn] = temporalFilter->GetName(); 1437 } 1600 temporalFilter->tag = buildWorkflowGraph; 1601 temporalFilter->field = this; 1438 1602 1439 1603 return temporalFilter ;
Note: See TracChangeset
for help on using the changeset viewer.