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