12 #ifndef SummationValueScalarOrFactorVectorOptiSwapToValueFactorVectorHppIncluded 13 #define SummationValueScalarOrFactorVectorOptiSwapToValueFactorVectorHppIncluded 40 template <Order MaxiOrMini,
typename paramValue,
typename value = paramValue,
typename paramMetric = paramValue,
typename metric = paramMetric>
66 <MaxiOrMini,paramValue,value,paramMetric,metric> && that) noexcept = delete;
68 <MaxiOrMini,paramValue,value,paramMetric,metric> const & that) = delete;
71 <MaxiOrMini,paramValue,value,paramMetric,metric> && that) noexcept = delete;
74 <MaxiOrMini,paramValue,value,paramMetric,metric> const & that) = delete;
83 virtual void executeBacklog();
84 virtual void emulateBacklog();
85 virtual void undoScalars(Serial
const ParamSerial);
86 virtual void undoVectors(Serial
const ParamSerial);
96 } VectorOrScalarRecord;
103 ValueBuffType cacheSimulValue;
104 #endif//SimulDownward 109 ValueBuffType cacheEmulValue;
110 #endif // ComputeLazy 121 template <Order MaxiOrMini,
typename paramValue,
typename value,
typename paramMetric,
typename metric>
135 template <Order MaxiOrMini,
typename paramValue,
typename value,
typename paramMetric,
typename metric>
147 if (tFuncSerial != InvalidSerial)
148 return scast<SummationValueScalarOrFactorVectorOptiSwapToValueFactorVector<MaxiOrMini,paramValue,value,paramMetric,metric> *>(pSystem->LocateFunc(tFuncSerial));
160 template <Order MaxiOrMini,
typename paramValue,
typename value,
typename paramMetric,
typename metric>
174 for(Serial tParamSerial = 0; tParamSerial < ParamCount; ++tParamSerial)
206 template <Order MaxiOrMini,
typename paramValue,
typename value,
typename paramMetric,
typename metric>
213 for(Serial tFactorSerial = 0; tFactorSerial < this->
FactorVars.ItemCount(); ++tFactorSerial)
223 for(Serial tParamFactorSerial = 0; tParamFactorSerial < this->
ParamFactors[tParamSerial].ItemCount(); ++tParamFactorSerial)
225 Serial
const tFactorSerial = this->
ParamFactors[tParamSerial][tParamFactorSerial];
227 tParamExprVectorRecord->
Field(tParamFactorSerial).ExecData());
233 for(Serial tParamFactorSerial = 0; tParamFactorSerial < this->
ParamFactors[tParamSerial].ItemCount(); ++tParamFactorSerial)
235 Serial
const tFactorSerial = this->
ParamFactors[tParamSerial][tParamFactorSerial];
237 tParamExprScalarRecord->
ExecData());
242 for(Serial tFactorSerial = 0; tFactorSerial < this->
FactorVars.ItemCount(); ++tFactorSerial)
253 template <Order MaxiOrMini,
typename paramValue,
typename value,
typename paramMetric,
typename metric>
258 for(Serial tFactorSerial = 0; tFactorSerial < this->
FactorVars.ItemCount(); ++tFactorSerial)
272 for(Serial tParamFactorSerial = 0; tParamFactorSerial < this->
ParamFactors[tParamSerial].ItemCount(); ++tParamFactorSerial)
274 Serial
const tFactorSerial = this->
ParamFactors[tParamSerial][tParamFactorSerial];
276 tParamExprVectorRecord->
Field(tParamFactorSerial).ExecData());
283 for(Serial tParamFactorSerial = 0; tParamFactorSerial < this->
ParamFactors[tParamSerial].ItemCount(); ++tParamFactorSerial)
285 Serial
const tFactorSerial = this->
ParamFactors[tParamSerial][tParamFactorSerial];
287 tParamExprScalarRecord->
ExecData());
293 for(Serial tFactorSerial = 0; tFactorSerial < this->
FactorVars.ItemCount(); ++tFactorSerial)
295 #if ExecUpwardOrLazyDownward 296 this->runPostExecAnew();
306 template <Order MaxiOrMini,
typename paramValue,
typename value,
typename paramMetric,
typename metric>
315 #endif//SimulDownward 321 this->runPostSimulAnew();
331 template <Order MaxiOrMini,
typename paramValue,
typename value,
typename paramMetric,
typename metric>
340 for(Serial tParamFactorSerial = 0; tParamFactorSerial < this->
ParamFactors[ParamSerial].ItemCount(); ++tParamFactorSerial)
342 Serial
const tFactorSerial = this->
ParamFactors[ParamSerial][tParamFactorSerial];
349 #endif // ComputeLazy 357 template <Order MaxiOrMini,
typename paramValue,
typename value,
typename paramMetric,
typename metric>
364 for (Index tDiffIndex = 0; tDiffIndex < tParamExprVectorRecord->
PrevSerialCount(); ++tDiffIndex)
366 Serial
const tParamFactorSerial = tParamExprVectorRecord->
PrevSerial(tDiffIndex);
367 Serial
const tFactorSerial = this->
ParamFactors[ParamSerial][tParamFactorSerial];
368 if (this->mVectorUndoneParams->List(ParamSerial).Tagged(tParamFactorSerial))
370 tParamExprVectorRecord->
Field(tParamFactorSerial).PrevBuffer());
375 #endif // ComputeLazy 381 template <Order MaxiOrMini,
typename paramValue,
typename value,
typename paramMetric,
typename metric>
386 if (this->mExecChangedParams.TagCount())
389 for(Index tIndex = 0; tIndex < this->mExecChangedParams.TagCount(); ++tIndex)
391 Serial
const tParamSerial = this->mExecChangedParams.TaggedSerial(tIndex);
394 if (tParamExprValueRecord->
PrevDiff(this->SysMaster->ExecClock()))
400 for (Index tDiffIndex = 0; tDiffIndex < tParamExprVectorRecord->
PrevSerialCount(); ++tDiffIndex)
402 Serial
const tParamFactorSerial = tParamExprVectorRecord->
PrevSerial(tDiffIndex);
403 Serial
const tFactorSerial = this->
ParamFactors[tParamSerial][tParamFactorSerial];
413 if (tParamExprScalarRecord->
PrevDiff(this->SysMaster->ExecClock()))
414 for(Serial tParamFactorSerial = 0; tParamFactorSerial < this->
ParamFactors[tParamSerial].ItemCount(); ++tParamFactorSerial)
416 Serial
const tFactorSerial = this->
ParamFactors[tParamSerial][tParamFactorSerial];
433 this->runPostExecIncr();
438 if (!this->BacklogExists())
440 #endif // ComputeLazy 441 if (this->needExecParamComputation()) this->listExecParams();
442 if (this->mBlockExecParams->ItemCount())
445 for(Index tIndex = 0; tIndex < this->mBlockExecParams->ItemCount(); ++tIndex)
447 Serial
const tParamSerial = this->mBlockExecParams->Item(tIndex);
450 if (tParamExprValueRecord->
PrevDiff(this->SysMaster->ExecClock()))
456 for (Index tDiffIndex = 0; tDiffIndex < tParamExprVectorRecord->
PrevSerialCount(); ++tDiffIndex)
458 Serial
const tParamFactorSerial = tParamExprVectorRecord->
PrevSerial(tDiffIndex);
459 Serial
const tFactorSerial = this->
ParamFactors[tParamSerial][tParamFactorSerial];
469 if (tParamExprScalarRecord->
PrevDiff(this->SysMaster->ExecClock()))
470 for(Serial tParamFactorSerial = 0; tParamFactorSerial < this->
ParamFactors[tParamSerial].ItemCount(); ++tParamFactorSerial)
472 Serial
const tFactorSerial = this->
ParamFactors[tParamSerial][tParamFactorSerial];
494 if (this->needExecParamComputation()) this->markExecParams();
496 for(Index tIndex = 0; tIndex < this->mBlockExecParams->ItemCount(); ++tIndex)
498 Serial
const tParamSerial = this->mBlockExecParams->Item(tIndex);
502 if (this->mScalarUndoneParams->Tagged(tParamSerial))
508 for(Serial tParamFactorSerial = 0; tParamFactorSerial < this->
ParamFactors[tParamSerial].ItemCount(); ++tParamFactorSerial)
510 Serial
const tFactorSerial = this->
ParamFactors[tParamSerial][tParamFactorSerial];
519 if (tParamExprValueRecord->
PrevDiff(this->SysMaster->ExecClock()))
525 if (tParamExprScalarRecord->
PrevDiff(this->SysMaster->ExecClock()))
526 for(Serial tParamFactorSerial = 0; tParamFactorSerial < this->
ParamFactors[tParamSerial].ItemCount(); ++tParamFactorSerial)
528 Serial
const tFactorSerial = this->
ParamFactors[tParamSerial][tParamFactorSerial];
540 for (Index tDiffIndex = 0; tDiffIndex < tParamExprVectorRecord->
PrevSerialCount(); ++tDiffIndex)
542 Serial
const tParamFactorSerial = tParamExprVectorRecord->
PrevSerial(tDiffIndex);
543 Serial
const tFactorSerial = this->
ParamFactors[tParamSerial][tParamFactorSerial];
544 if (!this->mVectorUndoneParams->List(tParamSerial).Tagged(tParamFactorSerial))
555 for(Index tIndex = 0; tIndex < this->mBacklogParams.TagCount(); ++tIndex)
557 Serial
const tParamSerial = this->mBacklogParams.TaggedSerial(tIndex);
558 if (this->mLabelExecParams.Tagged(tParamSerial))
continue;
559 Expression::performExecBacklog(this->
ParamExprs[tParamSerial]);
562 if (this->mScalarUndoneParams->Tagged(tParamSerial))
569 for(Serial tParamFactorSerial = 0; tParamFactorSerial < this->
ParamFactors[tParamSerial].ItemCount(); ++tParamFactorSerial)
571 Serial
const tFactorSerial = this->
ParamFactors[tParamSerial][tParamFactorSerial];
580 if (tParamExprValueRecord->
PrevDiff(this->SysMaster->ExecClock()))
585 if (tParamExprScalarRecord->
PrevDiff(this->SysMaster->ExecClock()))
586 for(Serial tParamFactorSerial = 0; tParamFactorSerial < this->
ParamFactors[tParamSerial].ItemCount(); ++tParamFactorSerial)
588 Serial
const tFactorSerial = this->
ParamFactors[tParamSerial][tParamFactorSerial];
599 for (Index tDiffIndex = 0; tDiffIndex < tParamExprVectorRecord->
PrevSerialCount(); ++tDiffIndex)
601 Serial
const tParamFactorSerial = tParamExprVectorRecord->
PrevSerial(tDiffIndex);
602 Serial
const tFactorSerial = this->
ParamFactors[tParamSerial][tParamFactorSerial];
603 if (!this->mVectorUndoneParams->List(tParamSerial).Tagged(tParamFactorSerial))
611 for(Index tUndoIndex = 0; tUndoIndex < this->mVectorUndoneParams->List(tParamSerial).TagCount(); ++tUndoIndex)
613 Serial
const tParamFactorSerial = this->mVectorUndoneParams->List(tParamSerial).TaggedSerial(tUndoIndex);
614 Serial
const tFactorSerial = this->
ParamFactors[tParamSerial][tParamFactorSerial];
631 this->runPostExecIncr();
632 #endif // ComputeLazy 642 template <Order MaxiOrMini,
typename paramValue,
typename value,
typename paramMetric,
typename metric>
646 for(Index tIndex = 0; tIndex < this->mBacklogParams.TagCount(); ++tIndex)
648 Serial
const tParamSerial = this->mBacklogParams.TaggedSerial(tIndex);
649 Expression::performExecBacklog(this->
ParamExprs[tParamSerial]);
653 if (this->mScalarUndoneParams->Tagged(tParamSerial))
660 for(Serial tParamFactorSerial = 0; tParamFactorSerial < this->
ParamFactors[tParamSerial].ItemCount(); ++tParamFactorSerial)
662 Serial
const tFactorSerial = this->
ParamFactors[tParamSerial][tParamFactorSerial];
671 if (tParamExprValueRecord->
PrevDiff(this->SysMaster->ExecClock()))
677 if (tParamExprScalarRecord->
PrevDiff(this->SysMaster->ExecClock()))
678 for(Serial tParamFactorSerial = 0; tParamFactorSerial < this->
ParamFactors[tParamSerial].ItemCount(); ++tParamFactorSerial)
680 Serial
const tFactorSerial = this->
ParamFactors[tParamSerial][tParamFactorSerial];
691 for (Index tDiffIndex = 0; tDiffIndex < tParamExprVectorRecord->
PrevSerialCount(); ++tDiffIndex)
693 Serial
const tParamFactorSerial = tParamExprVectorRecord->
PrevSerial(tDiffIndex);
694 Serial
const tFactorSerial = this->
ParamFactors[tParamSerial][tParamFactorSerial];
695 if (!this->mVectorUndoneParams->List(tParamSerial).Tagged(tParamFactorSerial))
703 for(Index tUndoIndex = 0; tUndoIndex < this->mVectorUndoneParams->List(tParamSerial).TagCount(); ++tUndoIndex)
705 Serial
const tParamFactorSerial = this->mVectorUndoneParams->List(tParamSerial).TaggedSerial(tUndoIndex);
706 Serial
const tFactorSerial = this->
ParamFactors[tParamSerial][tParamFactorSerial];
722 this->runPostExecBacklog();
725 #endif // ComputeLazy 732 template <Order MaxiOrMini,
typename paramValue,
typename value,
typename paramMetric,
typename metric>
737 if (this->mSimulChangedParams.TagCount())
740 for(Index tIndex = 0; tIndex < this->mSimulChangedParams.TagCount(); ++tIndex)
742 Serial
const tParamSerial = this->mSimulChangedParams.TaggedSerial(tIndex);
744 if (tParamExprValueRecord->
SimulDiff(this->SysMaster->SimulClock()))
748 this->runPostSimulIncr();
753 if (!this->BacklogExists())
755 #endif // ComputeLazy 757 if (this->needSimulFlexiParamComputation()) this->listSimulFlexiParams();
760 if (this->needSimulFixedParamComputation())
761 this->enumSimulFixedParams(this->mBlockSimulFlexiParams->ItemCount());
763 if (this->needSimulFixedParamComputation()) this->listSimulFixedParams();
767 if (this->needSimulCacheComputation())
770 for(Index tIndex = 0; tIndex < this->mBlockSimulFixedParams->ItemCount(); ++tIndex)
772 Serial
const tParamSerial = this->mBlockSimulFixedParams->Item(tIndex);
779 if (this->mBlockSimulFixedParams->ItemCount() || this->mBlockSimulFlexiParams->ItemCount())
781 if (this->mBlockSimulFixedParams->ItemCount())
783 if (this->mBlockSimulFlexiParams->ItemCount())
793 for(Index tIndex = 0; tIndex < this->mBlockSimulFixedParams->ItemCount(); ++tIndex)
795 Serial
const tParamSerial = this->mBlockSimulFixedParams->Item(tIndex);
802 for(Index tIndex = 0; tIndex < this->mBlockSimulFlexiParams->ItemCount(); ++tIndex)
804 Serial
const tParamSerial = this->mBlockSimulFlexiParams->Item(tIndex);
806 if (this->mLabelSimulFixedParams.Tagged(tParamSerial))
continue;
811 if (tParamExprValueRecord->
SimulDiff(this->SysMaster->SimulClock()))
823 if (this->needSimulFlexiParamComputation()) this->listSimulFlexiParams();
826 if (this->needSimulFixedParamComputation()) this->markSimulFixedParams();
829 if (this->needSimulCacheComputation())
831 if (!this->ChangedSystemEmulClock())
833 cacheSimulValue = cacheEmulValue;
835 for(Index tIndex = 0; tIndex < this->mBlockSimulFixedParams->ItemCount(); ++tIndex)
837 Serial
const tParamSerial = this->mBlockSimulFixedParams->Item(tIndex);
846 for(Index tIndex = 0; tIndex < this->mBlockSimulFixedParams->ItemCount(); ++tIndex)
848 Serial
const tParamSerial = this->mBlockSimulFixedParams->Item(tIndex);
849 if (!this->mScalarUndoneParams->Tagged(tParamSerial))
853 for(Index tIndex = 0; tIndex < this->mBacklogParams.TagCount(); ++tIndex)
855 Serial
const tParamSerial = this->mBacklogParams.TaggedSerial(tIndex);
857 if (this->mLabelSimulFixedParams.Tagged(tParamSerial))
continue;
859 Expression::performEmulBacklog(this->
ParamExprs[tParamSerial]);
862 if (this->mScalarUndoneParams->Tagged(tParamSerial))
863 cacheSimulValue += tParamExprValueRecord->EmulData(this->SysMaster->EmulClock());
864 else if (tParamExprValueRecord->EmulDiff(this->SysMaster->EmulClock()))
865 cacheSimulValue += tParamExprValueRecord->EmulBuffer() - tParamExprValueRecord->
ExecBuffer();
873 for(Index tIndex = 0; tIndex < this->mBlockSimulFixedParams->ItemCount(); ++tIndex)
875 Serial
const tParamSerial = this->mBlockSimulFixedParams->Item(tIndex);
882 for(Index tIndex = 0; tIndex < this->mBlockSimulFlexiParams->ItemCount(); ++tIndex)
884 Serial
const tParamSerial = this->mBlockSimulFlexiParams->Item(tIndex);
887 if (this->mLabelSimulFixedParams.Tagged(tParamSerial))
continue;
890 Expression::performEmulBacklog(this->
ParamExprs[tParamSerial]);
893 if (tParamExprValueRecord->EmulSimulDiff(this->SysMaster->EmulClock(), this->
SysMaster->
SimulClock()))
895 tParamExprValueRecord->EmulData(this->SysMaster->EmulClock());
901 #endif // ComputeLazy 902 #endif//SimulDownward 912 template <Order MaxiOrMini,
typename paramValue,
typename value,
typename paramMetric,
typename metric>
917 for(Index tIndex = 0; tIndex < this->mBacklogParams.TagCount(); ++tIndex)
919 Serial
const tParamSerial = this->mBacklogParams.TaggedSerial(tIndex);
920 Expression::performEmulBacklog(this->
ParamExprs[tParamSerial]);
923 if (this->mScalarUndoneParams->Tagged(tParamSerial))
924 cacheEmulValue += tParamExprValueRecord->EmulData(this->SysMaster->EmulClock());
925 else if (tParamExprValueRecord->EmulDiff(this->SysMaster->EmulClock()))
926 cacheEmulValue += tParamExprValueRecord->EmulBuffer() - tParamExprValueRecord->
ExecBuffer();
931 #endif // ComputeLazy 936 #endif//SummationValueScalarOrFactorVectorOptiSwapToValueFactorVectorHppIncluded void updateExecData(Clock const ExecClock, data const &Data)
Update the execution data.
Definition: scalarrecord.hpp:228
static void performExecIncr(Expression *const pExpression)
Execute in incremental mode.
Definition: expression1.hpp:287
void setExprHash(Hash const pHash)
Set expression hash value.
Definition: expression1.hpp:607
value ValueType
Value type.
Definition: summationValueScalarOrFactorVectorOptiSwapToValueFactorVector.hpp:47
Bool Updatable() const
Whether the expression updatable—variables are updatable, functions may be updatable.
Definition: expression1.hpp:44
Clock SimulClock() const
Get the simulation clock.
Definition: system1.hpp:249
#define SimulFlexiOnly
Use flexi simulation only, not fixed one.
Definition: options.hpp:166
kb< ParamSpecType > const *const ParamSpecs
Parameter specifications i.e. how to use values and metrics.
Definition: function0.hpp:172
void finaliseField(Serial const FieldSerial, data const &Data)
Finalise the field particularly for unupdatable expressions.
Definition: vectorrecord.hpp:324
ValueBuffType cacheExecValue
Execution cache value.
Definition: summationValueScalarOrFactorVectorOptiSwapToValueFactorVector.hpp:106
ValueRecord< value > * mExprValueRecord
Point to the value record.
Definition: valueVectorFunction.hpp:81
#define openKangarooSpace
Open the project namespace.
Definition: project.hpp:74
kb< VectorOrScalarRecord > mParamExprMetricRecords
Parameter expression metric records.
Definition: summationValueScalarOrFactorVectorOptiSwapToValueFactorVector.hpp:99
xb< Variable * > const FactorVars
Factor variables that this function transitively depends on.
Definition: function0.hpp:177
void updateSimulData(Clock const SimulClock, data const &Data)
Update the simulation data.
Definition: valuerecord.hpp:299
DataTempBuff< paramValue, value >::Type ValueBuffType
Value buffer type.
Definition: summationValueScalarOrFactorVectorOptiSwapToValueFactorVector.hpp:89
SummationValueScalarOrFactorVectorOptiSwapToValueFactorVector(System *const pSystem, Dim const ParamCount, Expression *const *pParamExprs, ParamSpecType *const pParamSpecs)
Param constructor.
Definition: summationValueScalarOrFactorVectorOptiSwapToValueFactorVector.hpp:162
constexpr char const * kFuncNotRequiredParams
Function does not have required parameters.
Definition: messages.hpp:247
void initialiseExecData(data const &Data)
Initialise the execution data.
Definition: scalarrecord.hpp:214
Summation value scalar or factor vector optimisation swap to value factor vector function.
Definition: summationValueScalarOrFactorVectorOptiSwapToValueFactorVector.hpp:41
data const & PrevData(Clock const ExecClock) const
PrevData = PrevDiff ? PrevBuffer : ExecBuffer().
Definition: scalarrecord.hpp:300
Bool SimulDiff(Clock const SimulClock) const
SimulDiff = (SimulClock == SimulClock).
Definition: valuerecord.hpp:420
Bool PrevDiff(Clock const ExecClock) const
PrevDiff = (PrevClock == ExecClock).
Definition: scalarrecord.hpp:313
kb< Expression * > const ParamExprs
Parameter expressions that this function immediately depends on.
Definition: function0.hpp:171
static Serial defineWithinSystem(Function *const pFunction)
Define the function in the system.
Definition: function1.hpp:1619
Hash calcExprHash() const
Calculate expression hash value.
Definition: function1.hpp:855
Compatible temporary buffer type for two given data types.
Definition: datatypes.hpp:294
Use default parameter option which is just null.
Definition: parameter.hpp:32
~SummationValueScalarOrFactorVectorOptiSwapToValueFactorVector()
Destructor.
Definition: summationValueScalarOrFactorVectorOptiSwapToValueFactorVector.hpp:122
data const & SimulBuffer() const
Return simulation buffer; validity depends on SimulDiff.
Definition: valuerecord.hpp:365
VectorField< data > const & Field(Serial const FieldSerial) const
Get the field data for a given field.
Definition: vectorrecord.hpp:258
void setParameters(ParamOrder const pParamOrder, Dim const ParamCount, Expression *const *const pParamExprs, ParamSpecType const *const pParamSpecs=nullptr, Index *const pParamIndexes=nullptr)
Set the parameters, if unordered then expression pointers along with indexes (if given) are sorted...
Definition: function1.hpp:927
virtual void computeFinal()
Compute the expression.
Definition: summationValueScalarOrFactorVectorOptiSwapToValueFactorVector.hpp:207
virtual void simulateIncr()
Simulate the expression.
Definition: summationValueScalarOrFactorVectorOptiSwapToValueFactorVector.hpp:733
data const & ExecData() const
Return execution data in execution buffer.
Definition: scalarrecord.hpp:287
paramValue ParamValueType
Parameter value type.
Definition: summationValueScalarOrFactorVectorOptiSwapToValueFactorVector.hpp:45
paramMetric ParamMetricType
Parameter metric type.
Definition: summationValueScalarOrFactorVectorOptiSwapToValueFactorVector.hpp:46
Bool checkReifyScalarAsVectorMetric(ParamSpecType const ParamSpec)
Definition: parameter.hpp:109
void initialiseExecData(Serial const FieldSerial, data const &Data)
Initialise the execution buffer, particularly for anew execution.
Definition: vectorrecord.hpp:336
void setExprFormat(Identifier const pFormat)
Set expression format.
Definition: expression1.hpp:577
void finaliseRecord(data const &Data)
Finalise the record.
Definition: valuerecord.hpp:262
static void performExecAnew(Expression *const pExpression)
Execute in anew mode.
Definition: expression1.hpp:271
Dim PrevSerialCount() const
Get the number of fields with previous data; valid when PrevDiffSerials.
Definition: vectorrecord.hpp:270
data const & PrevBuffer() const
Return previous data in previous buffer: validity depends on PrevDiff.
Definition: scalarrecord.hpp:339
kb< Bool > mVectorNotScalars
Whether optimisation segment is a vector or a scalar.
Definition: naryValueScalarOrFactorVectorToValueFactorVectorFunc.hpp:63
void defineExprValueRecord()
Define expression value.
Unique identifier of a class.
void defineRootWithinSystem()
Define as a root within the system.
Definition: function1.hpp:1605
virtual void executeAnew()
Execute the expression.
Definition: summationValueScalarOrFactorVectorOptiSwapToValueFactorVector.hpp:254
static SummationValueScalarOrFactorVectorOptiSwapToValueFactorVector< MaxiOrMini, paramValue, value, paramMetric, metric > * define(System *const pSystem, Dim const ParamCount, Expression *const *ParamExprs, ParamSpecType *const ParamSpecs=nullptr)
Define a summation value scalar or factor vector optimisation swap to value factor vector...
Definition: summationValueScalarOrFactorVectorOptiSwapToValueFactorVector.hpp:137
Clock ExecClock() const
Get the execution clock.
Definition: system1.hpp:237
Bool updateExecData(Serial const FieldSerial, Clock const ExecClock, data const &Data)
Update the execution buffer and insert into previous fields if needed.
Definition: vectorrecord.hpp:348
kll< Serial > * tempChangedVector
Vector that undergone changes.
Definition: summationValueScalarOrFactorVectorOptiSwapToValueFactorVector.hpp:113
void defineExprVectorRecord(Dim const FieldCount)
Define vector record.
void resetPrevSerials(Clock const ExecClock)
Reset the list of fields having previous data.
Definition: vectorrecord.hpp:309
kb< OptiSwap< paramMetric, MetricBuffType > > mParamOptiSwapOperators
Parameter optimisation swap operators.
Definition: summationValueScalarOrFactorVectorOptiSwapToValueFactorVector.hpp:100
Unordered parameters.
Definition: parameter.hpp:66
static void performSimulIncr(Expression *const pExpression)
Simulate in incremental mode.
Definition: expression1.hpp:326
data const & ExecBuffer() const
Return execution data in execution buffer.
Definition: scalarrecord.hpp:326
Constraint-based local search systems.
Definition: system0.hpp:45
BitStr ParamSpecType
Parameter specification type.
Definition: parameter.hpp:76
kb< ValueRecord< paramValue > const * > mParamExprValueRecords
Parameter expression value records.
Definition: summationValueScalarOrFactorVectorOptiSwapToValueFactorVector.hpp:98
System *const SysMaster
The system that contains this expression.
Definition: expression0.hpp:281
virtual void simulateAnew()
Simulate the expression.
Definition: summationValueScalarOrFactorVectorOptiSwapToValueFactorVector.hpp:307
Flexible arity value scalar or vector to value vector functions.
Definition: naryValueScalarOrFactorVectorToValueFactorVectorFunc.hpp:31
void Type
Temporary buffer type.
Definition: datatypes.hpp:297
#define SimulFixedOnly
Use fixed simulation only, not flexi one.
Definition: options.hpp:165
#define closeKangarooSpace
Close the project namespace.
Definition: project.hpp:75
kb< MetricBuffType > * cacheExecVector
Execution cache Vector.
Definition: summationValueScalarOrFactorVectorOptiSwapToValueFactorVector.hpp:112
VectorRecord< metric > * mExprVectorRecord
Point to the vector record.
Definition: valueVectorFunction.hpp:82
DataTempBuff< paramMetric, metric >::Type MetricBuffType
Metric buffer type.
Definition: summationValueScalarOrFactorVectorOptiSwapToValueFactorVector.hpp:90
data const & SimulData(Clock const SimulClock) const
SimulDiff ? SimulBuffer : ExecBuffer().
Definition: valuerecord.hpp:408
Serial PrevSerial(Index const PrevIndex) const
Get the serial of a field having previous data; valid when PrevDiffSerials.
Definition: vectorrecord.hpp:283
Optimisation swap operator that is used if maxi and mini are swapped or vice versa.
Definition: optiswap.hpp:33
Abstract expressions.
Definition: expression0.hpp:41
Value records store expression values.
Definition: valuerecord.hpp:32
static void performSimulAnew(Expression *const pExpression)
Simulate in anew mode.
Definition: expression1.hpp:310
nrl< xb< Serial > > const ParamFactors
Variables that parameters depend on. Factor serial of the function are use to represent parameter var...
Definition: function0.hpp:178
metric MetricType
Metric type.
Definition: summationValueScalarOrFactorVectorOptiSwapToValueFactorVector.hpp:48
virtual void executeIncr()
Execute the expression.
Definition: summationValueScalarOrFactorVectorOptiSwapToValueFactorVector.hpp:382
Flexible arity value scalar or vector to value vector function.