00001
00011 #include "SimpleAllToAllWiringMethod.h"
00012
00013 #include <iostream>
00014 using std::cout;
00015 using std::cerr;
00016 using std::endl;
00017
00018 SimObject::ID::Vector SimpleAllToAllWiringMethod::connect(
00019 const SimObjectPopulation &srcPopulation,
00020 const SimObjectPopulation &destPopulation,
00021 const SimObjectFactory &connector,
00022 ConnectionIterator &decider,
00023 bool collectIDs,
00024 bool collectPairs,
00025 WiringMethod::ConnectPairsVector connectPairs)
00026 {
00027 decider.setRNDEngine(net->getMainConstructRNGEngine());
00028 decider.init(srcPopulation, destPopulation);
00029
00030
00031 SimObject::ID::SortedVector src_vec( srcPopulation.idVector(), net->mpi_rank(), false);
00032 SimObject::ID::SortedVector dest_vec( destPopulation.idVector(), net->mpi_rank(), false);
00033
00034 SimObject::ID id;
00035 SimObject::ID::Vector collids(new vector<SimObject::ID::Packed>);
00036
00037 decider.reset(src_vec.begin(), src_vec.end(), dest_vec.begin(), dest_vec.end());
00038
00039 unsigned cnt = 0;
00040 pair<SimObject::ID, SimObject::ID> connect_pair;
00041
00042 while( decider.next(connect_pair) ) {
00043 net->connect( connect_pair.first, connect_pair.second, connector, id );
00044 if (collectPairs)
00045 connectPairs->push_back(connect_pair);
00046 if (collectIDs) {
00047 collids->push_back(id.packed() );
00048 }
00049 cnt++;
00050 }
00051
00052 if (!collectIDs)
00053 collids->push_back( (SimObject::ID::Packed)cnt );
00054
00055 return collids;
00056 }
00057
00058
00059 unsigned SimpleAllToAllWiringMethod::connect(
00060 const SimObjectPopulation &srcPopulation,
00061 const SimObjectPopulation &destPopulation,
00062 ConnectionIterator &decider,
00063 bool collectPairs,
00064 WiringMethod::ConnectPairsVector connectPairs )
00065 {
00066 decider.setRNDEngine(net->getMainConstructRNGEngine());
00067 decider.init(srcPopulation, destPopulation);
00068
00069
00070 SimObject::ID::SortedVector src_vec(srcPopulation.idVector(), net->mpi_rank(), false);
00071 SimObject::ID::SortedVector dest_vec(destPopulation.idVector(), net->mpi_rank(), false);
00072 unsigned cnt = 0;
00073 decider.reset(src_vec.begin(), src_vec.end(), dest_vec.begin(), dest_vec.end());
00074 pair<SimObject::ID, SimObject::ID> connect_pair;
00075 if (collectPairs) {
00076 while( decider.next( connect_pair ) ) {
00077 net->connect(connect_pair.first, connect_pair.second);
00078 connectPairs->push_back(connect_pair);
00079 cnt++;
00080 }
00081 } else {
00082 while( decider.next( connect_pair ) ) {
00083 net->connect(connect_pair.first, connect_pair.second);
00084 cnt++;
00085 }
00086 }
00087 return cnt;
00088 }
00089
00090
00091 SimObject::ID::Vector SimpleAllToAllWiringMethod::connect(
00092 const SimObjectPopulation &srcPopulation,
00093 const SimObjectPopulation &destPopulation,
00094 ConnObjectFactory &connector,
00095 ConnectionIterator &decider,
00096 bool collectIDs,
00097 bool collectPairs,
00098 WiringMethod::ConnectPairsVector connectPairs)
00099 {
00100 decider.setRNDEngine(net->getMainConstructRNGEngine());
00101 decider.init(srcPopulation, destPopulation);
00102
00103
00104 SimObject::ID::SortedVector src_vec( srcPopulation.idVector(), net->mpi_rank(), false);
00105 SimObject::ID::SortedVector dest_vec( destPopulation.idVector(), net->mpi_rank(), false);
00106
00107 SimObject::ID id;
00108 SimObject::ID::Vector collids(new vector<SimObject::ID::Packed>);
00109
00110 decider.reset(src_vec.begin(), src_vec.end(), dest_vec.begin(), dest_vec.end());
00111
00112 unsigned cnt = 0;
00113 pair<SimObject::ID, SimObject::ID> connect_pair;
00114
00115 while( decider.next(connect_pair) )
00116 {
00117 size_t src_idx, dst_idx;
00118 decider.getIdx(src_idx, dst_idx);
00119 connector.init(srcPopulation, src_idx, destPopulation, dst_idx);
00120
00121 net->connect(connect_pair.first, connect_pair.second, connector, id);
00122
00123 if (collectPairs)
00124 connectPairs->push_back(connect_pair);
00125
00126 if (collectIDs)
00127 collids->push_back(id.packed());
00128
00129 cnt++;
00130 }
00131
00132 if (!collectIDs)
00133 collids->push_back( (SimObject::ID::Packed)cnt );
00134
00135 return collids;
00136 }
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163