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 #include "DataSource/PtclBaseDataSource.h"
00028 #include "DataSource/PtclAttribDataSource.h"
00029 #include "Profile/Profiler.h"
00030
00031
00032
00033 ParticleBaseDataSource::BaseList_t ParticleBaseDataSource::BaseList;
00034
00035
00037
00038 ParticleBaseDataSource::ParticleBaseDataSource(const char *nm,
00039 DataConnect *dc,
00040 int tm,
00041 DataSource *ds)
00042 : DataSourceObject(nm, ds, dc, tm){ }
00043
00044
00046
00047 ParticleBaseDataSource::~ParticleBaseDataSource() {
00048 TAU_PROFILE("ParticleBaseDataSource::~ParticleBaseDataSource()",
00049 "void ()", TAU_VIZ);
00050
00051
00052 while (AttribList.size() > 0)
00053 disconnect_attrib(AttribList.front());
00054
00055
00056 checkout();
00057 }
00058
00059
00061
00062
00063
00064
00065
00066
00067
00068 ParticleBaseDataSource*
00069 ParticleBaseDataSource::find_particle_base(ParticleAttribDataSource *pa,
00070 ParticleAttribBase *pabase) {
00071 TAU_PROFILE("ParticleBaseDataSource::find_particle_base()",
00072 "ParticleBaseDataSource * (ParticleAttribDataSource *, ParticleAttribBase *)",
00073 TAU_VIZ);
00074
00075
00076
00077 BaseList_t::iterator currbase = ParticleBaseDataSource::begin_base();
00078 BaseList_t::iterator endbase = ParticleBaseDataSource::end_base();
00079 for ( ; currbase != endbase; ++currbase ) {
00080 ParticleBaseDataSource *list = *currbase;
00081 if (pa->getConnection()==list->getConnection() && list->has_attrib(pabase))
00082 return list;
00083 }
00084
00085
00086 return 0;
00087 }
00088
00089
00091
00092
00093
00094 void ParticleBaseDataSource::checkin() {
00095 TAU_PROFILE("ParticleBaseDataSource::checkin()", "void ()", TAU_VIZ);
00096
00097
00098 BaseList_t::iterator currbase = ParticleBaseDataSource::begin_base();
00099 BaseList_t::iterator endbase = ParticleBaseDataSource::end_base();
00100 for ( ; currbase != endbase; ++currbase )
00101 if (*currbase == this)
00102 return;
00103
00104
00105 BaseList.push_back(this);
00106 }
00107
00108
00110
00111 void ParticleBaseDataSource::checkout() {
00112 TAU_PROFILE("ParticleBaseDataSource::checkout()", "void ()", TAU_VIZ);
00113
00114 for (unsigned i=0; i < BaseList.size(); ++i) {
00115 if (BaseList[i] == this) {
00116 BaseList[i] = BaseList.back();
00117 BaseList.pop_back();
00118 return;
00119 }
00120 }
00121 }
00122
00123
00125
00126 bool ParticleBaseDataSource::connect_attrib(ParticleAttribDataSource *pa) {
00127 TAU_PROFILE("ParticleBaseDataSource::connect_attrib()",
00128 "bool (ParticleAttribDataSource *)", TAU_VIZ);
00129
00130 AttribList.push_back(pa);
00131 return true;
00132 }
00133
00134
00136
00137
00138 bool ParticleBaseDataSource::disconnect_attrib(ParticleAttribDataSource *pa) {
00139 TAU_PROFILE("ParticleBaseDataSource::disconnect_attrib()",
00140 "bool (ParticleAttribDataSource *)", TAU_VIZ);
00141
00142
00143 int i, size = AttribList.size();
00144 for (i=0; i < size; ++i) {
00145 if (pa == AttribList[i]) {
00146 AttribList[i] = AttribList.back();
00147 AttribList.pop_back();
00148 break;
00149 }
00150 }
00151
00152
00153 pa->setDisconnected();
00154 return true;
00155 }
00156
00157
00158
00159
00160
00161
00162