Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef _PALM_COUPLING_POLICIES_HXX_
00031 #define _PALM_COUPLING_POLICIES_HXX_
00032
00033 #include <SALOMEconfig.h>
00034
00035 #include <CORBA.h>
00036 #include <vector>
00037 #include "DataIdFilter.hxx"
00038 #include "DisplayPair.hxx"
00039 #include "CouplingPolicy.hxx"
00040
00041 class PalmCouplingPolicy: public CouplingPolicy {
00042
00043
00044 filtre_conversion filtre_convert_TIME ;
00045
00046 filtre_conversion filtre_convert_TAG ;
00047
00048 public:
00049
00050 template <typename T_TIME, typename T_TAG > class InternalDataIdContainer;
00051 template <typename T_TIME, typename T_TAG > friend class InternalDataIdContainer;
00052
00053 filtre_conversion * get_filtre_convert_TIME() { return &filtre_convert_TIME; }
00054 filtre_conversion * get_filtre_convert_TAG() { return &filtre_convert_TAG; }
00055
00056
00057
00058
00059 typedef CORBA::Long TimeType;
00060 typedef CORBA::Long TagType;
00061 typedef std::pair < TimeType , TagType > DataId;
00062 typedef InternalDataIdContainer < TimeType , TagType > DataIdContainer;
00063
00064 TimeType getTime(const DataId &dataId) const { return dataId.first;}
00065 TagType getTag (const DataId &dataId) const { return dataId.second;}
00066
00067
00068
00069 template <typename T_TIME, typename T_TAG > class InternalDataIdContainer {
00070
00071 std::vector<T_TIME> _lTime;
00072 std::vector<T_TAG> _lTag;
00073
00074
00075
00076 InternalDataIdContainer() {}
00077
00078 public:
00079 typedef DataId value_type;
00080 template <typename TTIME, typename TTAG> class DataIdIterator;
00081 typedef DataIdIterator<T_TIME, T_TAG> iterator;
00082 typedef value_type & reference;
00083 typedef value_type const & const_reference;
00084
00085
00086
00087 InternalDataIdContainer(const DataId & dataId, const PalmCouplingPolicy & policy ) {
00088 std::cout << "----Cst ---- InternalDataIdContainer(const DataId & dataId..) " << dataId <<std::endl;
00089 policy.filtre_convert_TIME.applique_filtre_conversion(dataId.first, _lTime);
00090 int c=0;
00091 for(std::vector<CORBA::Long>::iterator i=_lTime.begin();i!=_lTime.end();++i)
00092 std::cout << "_lTime["<< c++ << "] : " << *i << std::endl;
00093 policy.filtre_convert_TAG.applique_filtre_conversion(dataId.second, _lTag);
00094 c=0;
00095 for(std::vector<CORBA::Long>::iterator i=_lTag.begin();i!=_lTag.end();++i)
00096 std::cout << "_lTag["<< c++ << "] : " << *i << std::endl;
00097 }
00098
00099
00100 InternalDataIdContainer(std::vector<T_TIME> const & lTime, std::vector<T_TAG> const & lTag):
00101 _lTime(lTime),_lTag(lTag) {}
00102
00103
00104
00105 InternalDataIdContainer( InternalDataIdContainer const & pc):
00106 _lTime(pc._lTime), _lTag(pc._lTag) {}
00107
00108
00109
00110 InternalDataIdContainer & operator=(const InternalDataIdContainer & pc) {
00111 if (this != &pc) { _lTime=pc._lTime; _lTag=pc._lTag; }
00112 return *this;
00113 }
00114
00115 virtual ~InternalDataIdContainer() {}
00116
00117 iterator begin() { return iterator(*this); }
00118 iterator end() { return iterator(*this,_lTime.end(),_lTag.end()); }
00119
00120
00121 bool empty() const { return _lTime.empty() || _lTag.empty(); }
00122
00123
00124 template <typename TTIME, typename TTAG> class DataIdIterator {
00125
00126 public:
00127
00128 typedef typename std::vector<TTIME>::const_iterator ItTime;
00129 typedef typename std::vector<TTAG >::const_iterator ItTag;
00130
00131 private:
00132 ItTime _itTime;
00133 ItTag _itTag;
00134 const InternalDataIdContainer<TTIME,TTAG> & _pc;
00135 DataIdIterator() {}
00136
00137 public:
00138
00139
00140
00141 DataIdIterator(const InternalDataIdContainer<TTIME,TTAG> & pc):
00142 _pc(pc),_itTime(pc._lTime.begin()),_itTag(pc._lTag.begin()) {}
00143 DataIdIterator(const InternalDataIdContainer<TTIME,TTAG> & pc, ItTime itTime, ItTag itTag):
00144 _pc(pc),_itTime(itTime),_itTag(itTag) {}
00145
00146 DataIdIterator(const DataIdIterator & dIt):
00147 _pc(dIt._pc),_itTime(dIt._itTime),_itTag(dIt._itTag) {}
00148 ~DataIdIterator() {}
00149
00150
00151
00152 DataIdIterator & operator=(const DataIdIterator & dIt) {
00153 if (this != &dIt) {
00154 _pc=dIt._pc;_itTime=dIt._itTime;_itTag=dIt._itTag;
00155 }
00156 return *this;
00157 }
00158
00159 DataId operator*() const {
00160 std::cout << "-------- operator*(), *_itTime : " << *_itTime << " *_itTag " << *_itTag <<std::endl;
00161 return DataId(*_itTime,*_itTag); }
00162
00163 bool operator==( const DataIdIterator & dIt) const {
00164 return (_itTime == dIt._itTime) && (_itTag == dIt._itTag) && (&_pc == &dIt._pc);
00165 }
00166
00167 bool operator!=( const DataIdIterator & dIt) const {
00168 return (_itTime != dIt._itTime) || (_itTag != dIt._itTag) || (&_pc != &dIt._pc);
00169 }
00170
00171
00172 DataIdIterator & operator++() {
00173 if ( _itTag != _pc._lTag.end() ) {
00174 ++_itTag;
00175 if (_itTag != _pc._lTag.end() ) return *this;
00176 }
00177 if ( _itTime != _pc._lTime.end() ) {
00178 ++_itTime;
00179 if (_itTime != _pc._lTime.end() ) _itTag=_pc._lTag.begin();
00180 }
00181 return *this;
00182 }
00183
00184
00185 DataIdIterator operator++(int fake) {
00186 DataIdIterator tmpIt=*this; ++*this; return tmpIt;
00187 }
00188
00189 };
00190 };
00191
00192
00193
00194 };
00195
00196 #endif