28 #ifndef __CALCIUM_COUPLING_POLICY__
29 #define __CALCIUM_COUPLING_POLICY__
37 #include <boost/lambda/lambda.hpp>
38 #include <boost/utility/enable_if.hpp>
39 #include <boost/type_traits/is_arithmetic.hpp>
51 template <
typename DataManipulator,
102 typedef std::pair< TimeType , TagType >
DataId;
106 template <
typename T_TIME,
typename T_TAG >
112 template <
typename DataManipulator,
125 template <
typename AssocContainer >
127 const typename AssocContainer::key_type & expectedDataId,
128 bool & isEqual,
bool & isBounded,
129 typename AssocContainer::iterator & wDataIt1)
const;
145 template <
typename T_TIME,
typename T_TAG >
151 ):std::vector< std::pair< T_TIME,T_TAG> >() {
155 this->push_back(
DataId(dataId.first,0));
158 this->push_back(
DataId(0,dataId.second));
168 template <
typename DataManipulator,
class EnableIf >
171 template <
typename Iterator,
typename DataId >
174 const Iterator & )
const {
177 std::cout <<
"-------- Calcium Generic BoundedDataIdProcessor.apply() called " << std::endl;
182 template <
typename DataManipulator >
185 typename boost::enable_if< boost::is_float< typename DataManipulator::InnerType> >::type > {
190 _couplingPolicy(couplingPolicy) {};
193 template <
typename MapIterator >
195 const DataId & dataId,
const MapIterator & it1)
const {
198 typedef typename DataManipulator::InnerType InnerType;
199 typedef typename DataManipulator::Type Type;
201 MapIterator it2=it1; ++it2;
202 size_t dataSize1 = DataManipulator::size(it1->second);
205 std::cout <<
"-------- CalciumCouplingPolicy::BoundedDataIdProcessor : Taille de donnée dataId1 : " << dataSize1 << std::endl;
209 size_t dataSize2 = DataManipulator::size(it2->second);
212 std::cout <<
"-------- CalciumCouplingPolicy::BoundedDataIdProcessor : Taille de donnée dataId2 : " << dataSize2 << std::endl;
214 size_t dataSize = std::min< size_t >( dataSize1, dataSize2 );
215 DataId dataId2 = it2->first;
216 DataId dataId1 = it1->first;
222 std::cout <<
"-------- CalciumCouplingPolicy::BoundedDataIdProcessor : Valeur de t1 : " << t1 << std::endl;
223 std::cout <<
"-------- CalciumCouplingPolicy::BoundedDataIdProcessor : Valeur de t2 : " << t2 << std::endl;
228 std::cout <<
"-------- CalciumCouplingPolicy::BoundedDataIdProcessor : Valeur de t : " << t << std::endl;
232 std::cout <<
"-------- CalciumCouplingPolicy::BoundedDataIdProcessor : Valeur de timeDiff : " << timeDiff << std::endl;
236 std::cout <<
"-------- CalciumCouplingPolicy::BoundedDataIdProcessor : Valeur de coeff : " << coeff << std::endl;
238 InnerType
const *
const InIt1 = DataManipulator::getPointer(it1->second);
241 std::cout <<
"-------- CalciumCouplingPolicy::BoundedDataIdProcessor : Données à t1 : " << std::endl;
242 std::copy(InIt1,InIt1+dataSize1,std::ostream_iterator<InnerType>(std::cout,
" "));
243 std::cout << std::endl;
246 InnerType
const *
const InIt2 = DataManipulator::getPointer(it2->second);
249 std::cout <<
"-------- CalciumCouplingPolicy::BoundedDataIdProcessor : Données à t2 : " << std::endl;
250 std::copy(InIt2,InIt2+dataSize2,std::ostream_iterator<InnerType>(std::cout,
" "));
251 std::cout << std::endl;
253 Type dataOut = DataManipulator::create(dataSize);
254 InnerType *
const OutIt = DataManipulator::getPointer(dataOut);
258 std::cerr <<
"-------- CalciumCouplingPolicy::BoundedDataIdProcessor : interpolationSchem : " << _couplingPolicy.
_interpolationSchem << std::endl;
259 std::cerr <<
"-------- CalciumCouplingPolicy::BoundedDataIdProcessor : alpha : " << _couplingPolicy.
_alpha << std::endl;
260 std::cerr <<
"-------- CalciumCouplingPolicy::BoundedDataIdProcessor : datecalschem : " << _couplingPolicy.
_dateCalSchem << std::endl;
261 std::cerr <<
"-------- CalciumCouplingPolicy::BoundedDataIdProcessor : storageLevel : " << _couplingPolicy.
_storageLevel << std::endl;
268 boost::lambda::placeholder1_type _1;
269 boost::lambda::placeholder2_type _2;
272 std::transform(InIt1,InIt1+dataSize,InIt2,OutIt,
273 ( _1 - _2 ) * coeff + _2 );
282 std::cout <<
"-------- CalciumCouplingPolicy::BoundedDataIdProcessor : Données calculées à t : " << std::endl;
283 std::copy(OutIt,OutIt+dataSize,std::ostream_iterator<InnerType>(std::cout,
" "));
284 std::cout << std::endl;
297 template <
typename AssocContainer >
299 bool & isEqual,
bool & isBounded,
typename AssocContainer::iterator & wDataIt1)
const {
302 typedef typename AssocContainer::key_type key_type;
308 std::cout <<
"-------- time expected : " << expectedDataId.first << std::endl;
309 std::cout <<
"-------- time expected corrected : " << expectedDataId.first*(1.0-
_deltaT) << std::endl;
331 typename AssocContainer::iterator prev = storedDatas.begin();
332 typename AssocContainer::iterator current = prev;
333 while ( (current != storedDatas.end()) && !af(current->first) )
337 std::cerr <<
"------- stored time : " << current->first << std::endl;
350 if ( isEqual ) wDataIt1 = current;
352 if (isBounded) wDataIt1 = prev;
354 wDataIt1 = storedDatas.end();
357 std::cout <<
"-------- isDataIdConvenient : isEqual : " << isEqual <<
" , isBounded " << isBounded << std::endl;
359 return isEqual || isBounded;
363 template <
typename DataManipulator >
371 template <
typename Container,
typename TimeType,
typename TagType >
374 typedef typename Container::iterator
iterator;
375 typedef typename Container::reverse_iterator riterator;
382 while(it != storedDatas.end() && it->first.first <= time)
384 DataManipulator::delete_data(it->second);
385 storedDatas.erase(it);
386 it=storedDatas.begin();
391 riterator it=storedDatas.rbegin();
392 while(it != storedDatas.rend() && it->first.first >= time)
394 DataManipulator::delete_data(it->second);
395 storedDatas.erase(it->first);
396 it=storedDatas.rbegin();
405 while(it != storedDatas.end() && it->first.second <= tag)
407 DataManipulator::delete_data(it->second);
408 storedDatas.erase(it);
409 it=storedDatas.begin();
414 riterator it=storedDatas.rbegin();
415 while(it != storedDatas.rend() && it->first.second >= tag)
417 DataManipulator::delete_data(it->second);
418 storedDatas.erase(it->first);
419 it=storedDatas.rbegin();
433 template <
typename DataManipulator >
441 template <
typename Container >
443 typename Container::iterator & wDataIt1 )
const {
445 typedef typename Container::key_type key_type;
446 typedef typename Container::value_type value_type;
447 typedef typename Container::iterator
iterator;
450 std::cout <<
"-------- CalciumCouplingPolicy::eraseDataId, storedDatasSize : " << storedDatas.size() << std::endl;
454 size_t storedDatasSize = storedDatas.size();
457 size_t dist=distance(storedDatas.begin(),wDataIt1);
458 for (
int i=0; i<s; ++i) {
460 DataManipulator::delete_data((*storedDatas.begin()).second);
461 storedDatas.erase(storedDatas.begin());
464 if (dist < (
size_t)s ) {
467 " has just removed the data to send")));
472 std::cout <<
"-------- CalciumCouplingPolicy::eraseDataId, new storedDatasSize : " << storedDatas.size() << std::endl;
487 template <
typename DataManipulator >
495 template <
typename Container,
typename DataId >
497 const DataId & expectedDataId,
498 typename Container::iterator & wDataIt1 )
const {
500 typedef typename Container::key_type key_type;
501 typedef typename Container::value_type value_type;
502 typedef typename Container::iterator
iterator;
511 std::cout <<
"-------- CalciumCouplingPolicy::DisconnectProcessor MARK2 --------" << std::endl;
516 <<
" interrupts all further data reading")));
518 std::cout <<
"-------- CalciumCouplingPolicy::DisconnectProcessor MARK3 --------" << std::endl;
522 if ( storedDatas.empty() )
524 <<
" is active but no data is available.")));
531 std::cout <<
"-------- CalciumCouplingPolicy::DisconnectProcessor MARK4 " << expectedDataId <<
" --------" << std::endl;
534 iterator it1 = storedDatas.lower_bound(expectedDataId);
537 std::cout <<
"-------- CalciumCouplingPolicy::DisconnectProcessor MARK5 " << std::endl;
538 for (
iterator it=storedDatas.begin(); it!=storedDatas.end(); ++it)
539 std::cout <<
" " << (*it).first;
541 std::cout << std::endl;
545 if (it1 == storedDatas.end())
547 <<
" is active but the requested dataId is less or equal to the last one received.")));
550 std::cout <<
"-------- CalciumCouplingPolicy::DisconnectProcessor MARK6 " << std::endl;
552 wDataIt1 = storedDatas.end();
556 std::cout <<
"-------- CalciumCouplingPolicy::DisconnectProcessor, CP_CONT : " << (*wDataIt1).first << std::endl;
const EXTRAPOLATION_SCHEM extrapolationSchem
Definition: CorbaTypes2CalciumTypes.cxx:146
const DATE_CAL_SCHEM dateCalSchem
Definition: CorbaTypes2CalciumTypes.cxx:54
const DEPENDENCY_TYPE dependencyType
Definition: CorbaTypes2CalciumTypes.cxx:88
const INTERPOLATION_SCHEM interpolationSchem
Definition: CorbaTypes2CalciumTypes.cxx:117
#define LOC(message)
Definition: DSC_Exception.hxx:55
Definition: CalciumCouplingPolicy.hxx:146
std::vector< DataId > DataIdVect
Definition: CalciumCouplingPolicy.hxx:147
InternalDataIdContainer(const DataId &dataId, const CalciumCouplingPolicy &policy)
Definition: CalciumCouplingPolicy.hxx:149
Definition: CalciumCouplingPolicy.hxx:44
CalciumTypes::DisconnectDirective DisconnectDirective
Definition: CalciumCouplingPolicy.hxx:61
void setExtrapolationSchem(ExtrapolationSchem extrapolationSchem)
Definition: CalciumCouplingPolicy.cxx:85
CalciumTypes::ExtrapolationSchem ExtrapolationSchem
Definition: CalciumCouplingPolicy.hxx:60
void setInterpolationSchem(InterpolationSchem interpolationSchem)
Definition: CalciumCouplingPolicy.cxx:78
std::pair< TimeType, TagType > DataId
Definition: CalciumCouplingPolicy.hxx:102
double TimeType
Definition: CalciumCouplingPolicy.hxx:100
TagType getTag(const DataId &dataId) const
Definition: CalciumCouplingPolicy.hxx:110
InterpolationSchem _interpolationSchem
Definition: CalciumCouplingPolicy.hxx:68
long TagType
Definition: CalciumCouplingPolicy.hxx:101
CalciumTypes::DateCalSchem DateCalSchem
Definition: CalciumCouplingPolicy.hxx:58
void disconnect(bool provideLastGivenValue)
Definition: CalciumCouplingPolicy.cxx:105
friend class BoundedDataIdProcessor
Definition: CalciumCouplingPolicy.hxx:52
friend class EraseDataIdBeforeOrAfterTagProcessor
Definition: CalciumCouplingPolicy.hxx:54
friend class DisconnectProcessor
Definition: CalciumCouplingPolicy.hxx:55
void setStorageLevel(size_t storageLevel)
Definition: CalciumCouplingPolicy.cxx:41
std::vector< DataId >::iterator iterator
Definition: CalciumCouplingPolicy.hxx:104
DependencyType getDependencyType() const
Definition: CalciumCouplingPolicy.cxx:39
void setDependencyType(DependencyType dependencyType)
Definition: CalciumCouplingPolicy.cxx:38
double getAlpha() const
Definition: CalciumCouplingPolicy.cxx:67
double getDeltaT() const
Definition: CalciumCouplingPolicy.cxx:76
bool isDataIdConveniant(AssocContainer &storedDatas, const typename AssocContainer::key_type &expectedDataId, bool &isEqual, bool &isBounded, typename AssocContainer::iterator &wDataIt1) const
Definition: CalciumCouplingPolicy.hxx:298
ExtrapolationSchem _extrapolationSchem
Definition: CalciumCouplingPolicy.hxx:69
size_t _storageLevel
Definition: CalciumCouplingPolicy.hxx:66
InternalDataIdContainer< TimeType, TagType > DataIdContainer
Definition: CalciumCouplingPolicy.hxx:103
CalciumTypes::InterpolationSchem InterpolationSchem
Definition: CalciumCouplingPolicy.hxx:59
DependencyType _dependencyType
Definition: CalciumCouplingPolicy.hxx:65
ExtrapolationSchem getExtrapolationSchem() const
Definition: CalciumCouplingPolicy.cxx:92
InterpolationSchem getInterpolationSchem() const
Definition: CalciumCouplingPolicy.cxx:91
TimeType getTime(const DataId &dataId) const
Definition: CalciumCouplingPolicy.hxx:109
void setDateCalSchem(DateCalSchem dateCalSchem)
Definition: CalciumCouplingPolicy.cxx:48
double _alpha
Definition: CalciumCouplingPolicy.hxx:70
void setDeltaT(double deltaT)
Definition: CalciumCouplingPolicy.cxx:69
DateCalSchem _dateCalSchem
Definition: CalciumCouplingPolicy.hxx:67
CalciumTypes::DependencyType DependencyType
Definition: CalciumCouplingPolicy.hxx:57
double _deltaT
Definition: CalciumCouplingPolicy.hxx:71
TimeType getEffectiveTime(TimeType ti, TimeType tf)
Definition: CalciumCouplingPolicy.cxx:96
CalciumCouplingPolicy()
Definition: CalciumCouplingPolicy.cxx:30
DateCalSchem getDateCalSchem() const
Definition: CalciumCouplingPolicy.cxx:55
size_t getStorageLevel() const
Definition: CalciumCouplingPolicy.cxx:47
DisconnectDirective _disconnectDirective
Definition: CalciumCouplingPolicy.hxx:72
void setAlpha(double alpha)
Definition: CalciumCouplingPolicy.cxx:57
friend class EraseDataIdProcessor
Definition: CalciumCouplingPolicy.hxx:53
Definition: CouplingPolicy.hxx:65
Class OSS is useful when streaming data through a function that expect a string as parameter.
Definition: DSC_Exception.hxx:65
DisconnectDirective
Definition: CalciumTypes.hxx:76
@ UNDEFINED_DIRECTIVE
Definition: CalciumTypes.hxx:76
const int CPINARRET
Definition: CalciumTypes.hxx:186
const int CP_ARRET
Definition: CalciumTypes.hxx:48
DependencyType
Definition: CalciumTypes.hxx:68
@ ITERATION_DEPENDENCY
Definition: CalciumTypes.hxx:69
@ TIME_DEPENDENCY
Definition: CalciumTypes.hxx:68
const int UNLIMITED_STORAGE_LEVEL
Definition: CalciumTypes.hxx:67
const int CPIT
Definition: CalciumTypes.hxx:44
ExtrapolationSchem
Definition: CalciumTypes.hxx:75
InterpolationSchem
Definition: CalciumTypes.hxx:74
@ L0_SCHEM
Definition: CalciumTypes.hxx:74
DateCalSchem
Definition: CalciumTypes.hxx:73
const int CPNTNULL
Definition: CalciumTypes.hxx:127
bool VerbosityActivated()
Called by any log message macros to decide about log output in Release and Debug mode dynamically rel...
Definition: libSALOMELog.cxx:48
def copy(src, dst)
Definition: pythonpath_reduction.py:35
Definition: AdjacentFunctor.hxx:40
bool isEqual() const
Definition: AdjacentFunctor.hxx:106
void setMaxValue(const T &value)
Definition: AdjacentFunctor.hxx:105
bool isBounded() const
Definition: AdjacentFunctor.hxx:107
const CalciumCouplingPolicy & _couplingPolicy
Definition: CalciumCouplingPolicy.hxx:187
void apply(typename iterator_t< MapIterator >::value_type &data, const DataId &dataId, const MapIterator &it1) const
Definition: CalciumCouplingPolicy.hxx:194
BoundedDataIdProcessor(const CalciumCouplingPolicy &couplingPolicy)
Definition: CalciumCouplingPolicy.hxx:189
Definition: CalciumCouplingPolicy.hxx:169
void apply(typename iterator_t< Iterator >::value_type &, const DataId &, const Iterator &) const
Definition: CalciumCouplingPolicy.hxx:172
BoundedDataIdProcessor(const CouplingPolicy &)
Definition: CalciumCouplingPolicy.hxx:170
Definition: CalciumCouplingPolicy.hxx:488
const CalciumCouplingPolicy & _couplingPolicy
Definition: CalciumCouplingPolicy.hxx:490
bool apply(Container &storedDatas, const DataId &expectedDataId, typename Container::iterator &wDataIt1) const
Definition: CalciumCouplingPolicy.hxx:496
DisconnectProcessor(const CalciumCouplingPolicy &couplingPolicy)
Definition: CalciumCouplingPolicy.hxx:492
Definition: CalciumCouplingPolicy.hxx:365
void apply(Container &storedDatas, TimeType time, TagType tag, bool before) const
Definition: CalciumCouplingPolicy.hxx:372
CalciumCouplingPolicy & _couplingPolicy
Definition: CalciumCouplingPolicy.hxx:366
EraseDataIdBeforeOrAfterTagProcessor(CalciumCouplingPolicy &couplingPolicy)
Definition: CalciumCouplingPolicy.hxx:368
Definition: CalciumCouplingPolicy.hxx:434
void apply(Container &storedDatas, typename Container::iterator &wDataIt1) const
Definition: CalciumCouplingPolicy.hxx:442
EraseDataIdProcessor(CalciumCouplingPolicy &couplingPolicy)
Definition: CalciumCouplingPolicy.hxx:438
CalciumCouplingPolicy & _couplingPolicy
Definition: CalciumCouplingPolicy.hxx:436
Definition: CalciumException.hxx:38
value_type1::second_type value_type
Definition: IteratorTraits.hxx:38
int TimeType
Definition: testAdjacentPredicate.cxx:52