| ... | ... |
@@ -203,32 +203,42 @@ |
| 203 | 203 |
Sequence seq; |
| 204 | 204 |
|
| 205 | 205 |
for (MapArcIt it(graph); it != INVALID; ++it) {
|
| 206 | 206 |
seq.push_back(std::make_pair(it, in[it])); |
| 207 | 207 |
} |
| 208 | 208 |
|
| 209 | 209 |
std::sort(seq.begin(), seq.end(), PairComp<Sequence>()); |
| 210 | 210 |
return KruskalOutputSelector<Graph, Sequence, Out>:: |
| 211 | 211 |
kruskal(graph, seq, out); |
| 212 | 212 |
} |
| 213 | 213 |
}; |
| 214 | 214 |
|
| 215 |
template <typename T> |
|
| 216 |
struct RemoveConst {
|
|
| 217 |
typedef T type; |
|
| 218 |
}; |
|
| 219 |
|
|
| 220 |
template <typename T> |
|
| 221 |
struct RemoveConst<const T> {
|
|
| 222 |
typedef T type; |
|
| 223 |
}; |
|
| 224 |
|
|
| 215 | 225 |
template <typename Graph, typename In, typename Out> |
| 216 | 226 |
struct KruskalOutputSelector<Graph, In, Out, |
| 217 | 227 |
typename enable_if<SequenceOutputIndicator<Out>, void>::type > |
| 218 | 228 |
{
|
| 219 | 229 |
typedef typename In::value_type::second_type Value; |
| 220 | 230 |
|
| 221 | 231 |
static Value kruskal(const Graph& graph, const In& in, Out& out) {
|
| 222 |
typedef StoreBoolMap<Out> Map; |
|
| 232 |
typedef StoreBoolMap<typename RemoveConst<Out>::type> Map; |
|
| 223 | 233 |
Map map(out); |
| 224 | 234 |
return _kruskal_bits::kruskal(graph, in, map); |
| 225 | 235 |
} |
| 226 | 236 |
|
| 227 | 237 |
}; |
| 228 | 238 |
|
| 229 | 239 |
template <typename Graph, typename In, typename Out> |
| 230 | 240 |
struct KruskalOutputSelector<Graph, In, Out, |
| 231 | 241 |
typename enable_if<MapOutputIndicator<Out>, void>::type > |
| 232 | 242 |
{
|
| 233 | 243 |
typedef typename In::value_type::second_type Value; |
| 234 | 244 |
| ... | ... |
@@ -76,25 +76,25 @@ |
| 76 | 76 |
{
|
| 77 | 77 |
checkConcept<ReadWriteMap<A,B>, NullMap<A,B> >(); |
| 78 | 78 |
NullMap<A,B> map1; |
| 79 | 79 |
NullMap<A,B> map2 = map1; |
| 80 | 80 |
map1 = nullMap<A,B>(); |
| 81 | 81 |
} |
| 82 | 82 |
|
| 83 | 83 |
// ConstMap |
| 84 | 84 |
{
|
| 85 | 85 |
checkConcept<ReadWriteMap<A,B>, ConstMap<A,B> >(); |
| 86 | 86 |
checkConcept<ReadWriteMap<A,C>, ConstMap<A,C> >(); |
| 87 | 87 |
ConstMap<A,B> map1; |
| 88 |
ConstMap<A,B> map2 |
|
| 88 |
ConstMap<A,B> map2 = B(); |
|
| 89 | 89 |
ConstMap<A,B> map3 = map1; |
| 90 | 90 |
map1 = constMap<A>(B()); |
| 91 | 91 |
map1 = constMap<A,B>(); |
| 92 | 92 |
map1.setAll(B()); |
| 93 | 93 |
ConstMap<A,C> map4(C(1)); |
| 94 | 94 |
ConstMap<A,C> map5 = map4; |
| 95 | 95 |
map4 = constMap<A>(C(2)); |
| 96 | 96 |
map4.setAll(C(3)); |
| 97 | 97 |
|
| 98 | 98 |
checkConcept<ReadWriteMap<A,int>, ConstMap<A,int> >(); |
| 99 | 99 |
check(constMap<A>(10)[A()] == 10, "Something is wrong with ConstMap"); |
| 100 | 100 |
|
| ... | ... |
@@ -134,25 +134,25 @@ |
| 134 | 134 |
std::vector<double> v(10, 0); |
| 135 | 135 |
v[5] = 100; |
| 136 | 136 |
RangeMap<double> map8(v); |
| 137 | 137 |
RangeMap<double> map9 = rangeMap(v); |
| 138 | 138 |
check(map9.size() == 10 && map9[2] == 0 && map9[5] == 100, |
| 139 | 139 |
"Something is wrong with RangeMap"); |
| 140 | 140 |
} |
| 141 | 141 |
|
| 142 | 142 |
// SparseMap |
| 143 | 143 |
{
|
| 144 | 144 |
checkConcept<ReferenceMap<A,B,B&,const B&>, SparseMap<A,B> >(); |
| 145 | 145 |
SparseMap<A,B> map1; |
| 146 |
SparseMap<A,B> map2 |
|
| 146 |
SparseMap<A,B> map2 = B(); |
|
| 147 | 147 |
SparseMap<A,B> map3 = sparseMap<A,B>(); |
| 148 | 148 |
SparseMap<A,B> map4 = sparseMap<A>(B()); |
| 149 | 149 |
|
| 150 | 150 |
checkConcept< ReferenceMap<double, int, int&, const int&>, |
| 151 | 151 |
SparseMap<double, int> >(); |
| 152 | 152 |
std::map<double, int> m; |
| 153 | 153 |
SparseMap<double, int> map5(m); |
| 154 | 154 |
SparseMap<double, int> map6(m,10); |
| 155 | 155 |
SparseMap<double, int> map7 = sparseMap(m); |
| 156 | 156 |
SparseMap<double, int> map8 = sparseMap(m,10); |
| 157 | 157 |
|
| 158 | 158 |
check(map5[1.0] == 0 && map5[3.14] == 0 && map6[1.0] == 10 && map6[3.14] == 10, |
0 comments (0 inline)