14#ifndef POINTERSWITHVALUE_HPP_
15#define POINTERSWITHVALUE_HPP_
27 template<
class Po
interClass,
class ValueClass >
46 std::list< PointerClass >&
48 std::list< PointerClass >
const&
62 PointerClass
const secondPointer )
const;
68 bool (*comparisonFunction)( PointerClass
const,
85 template<
class Po
interClass,
class ValueClass >
89 pairedValue(
BOL::UsefulStuff::notANumber )
94 template<
class Po
interClass,
class ValueClass >
98 pointerList( copySource.pointerList ),
99 pairedValue( copySource.pairedValue )
104 template<
class Po
interClass,
class ValueClass >
112 template<
class Po
interClass,
class ValueClass >
121 template<
class Po
interClass,
class ValueClass >
126 becomeCopyOf( copySource );
130 template<
class Po
interClass,
class ValueClass >
131 inline std::list< PointerClass >&
137 template<
class Po
interClass,
class ValueClass >
138 inline std::list< PointerClass >
const&
144 template<
class Po
interClass,
class ValueClass >
148 return (
int)(pointerList.size());
151 template<
class Po
interClass,
class ValueClass >
154 PointerClass
const pointerToAdd )
156 pointerList.push_back( pointerToAdd );
159 template<
class Po
interClass,
class ValueClass >
166 template<
class Po
interClass,
class ValueClass >
173 template<
class Po
interClass,
class ValueClass >
176 ValueClass
const pairedValue )
178 this->pairedValue = pairedValue;
182 template<
class Po
interClass,
class ValueClass >
185 PointerClass
const firstPointer,
186 PointerClass
const secondPointer )
const
188 if( ( 2 == pointerList.size() )
190 ( ( ( firstPointer == pointerList.front() )
192 ( secondPointer == pointerList.back() ) )
194 ( ( secondPointer == pointerList.front() )
196 ( firstPointer == pointerList.back() ) ) ) )
206 template<
class Po
interClass,
class ValueClass >
209 std::list< PointerClass >
const& sortedList )
const
211 if( sortedList.size() == pointerList.size() )
213 return std::equal( sortedList.begin(),
215 pointerList.begin() );
223 template<
class Po
interClass,
class ValueClass >
227 int const secondCode,
228 bool (*comparisonFunction)( PointerClass
const,
231 if( ( 2 == pointerList.size() )
233 ( ( (*comparisonFunction)( pointerList.front(),
236 (*comparisonFunction)( pointerList.back(),
239 ( (*comparisonFunction)( pointerList.back(),
242 (*comparisonFunction)( pointerList.front(),
253 template<
class Po
interClass,
class ValueClass >
256 std::list< PointerClass >
const& sortedList )
const
258 bool returnBool(
false );
259 if( pointerList.size() >= sortedList.size() )
261 int allowedMismatches( pointerList.size() - sortedList.size() );
263 typename std::list< PointerClass >::const_iterator
264 fromThisSet( pointerList.begin() );
265 typename std::list< PointerClass >::const_iterator
266 toBeCompared( sortedList.begin() );
267 while( ( allowedMismatches >= 0 )
269 ( fromThisSet != pointerList.end() ) )
271 if( *fromThisSet < *toBeCompared )
278 if( *fromThisSet == *toBeCompared )
285 allowedMismatches = -1;
294 if( allowedMismatches >= 0 )
302 template<
class Po
interClass,
class ValueClass >
305 std::list< PointerClass >
const& sortedList )
const
307 bool returnBool(
false );
308 typename std::list< PointerClass >::const_iterator
309 fromThisSet( pointerList.begin() );
310 typename std::list< PointerClass >::const_iterator
311 toBeCompared( sortedList.begin() );
319 ( fromThisSet != pointerList.end() )
321 ( toBeCompared != sortedList.end() ) )
323 if( *fromThisSet < *toBeCompared )
327 else if( *fromThisSet == *toBeCompared )
void operator=(PointersWithValue< PointerClass, ValueClass > const ©Source)
bool matchesExactly(std::list< PointerClass > const &sortedList) const
bool containsAllAsSubset(std::list< PointerClass > const &sortedList) const
std::list< PointerClass > pointerList
void addPointer(PointerClass const pointerToAdd)
bool containsAnyAsSubset(std::list< PointerClass > const &sortedList) const
std::list< PointerClass > & getPointerList()
PointersWithValue< PointerClass, ValueClass > * copyAndReturnPointer(PointersWithValue< PointerClass, ValueClass > const ©Source)
PointersWithValue(PointersWithValue< PointerClass, ValueClass > const ©Source)
std::list< PointerClass > const & getPointerList() const
bool matchesExactly(int const firstCode, int const secondCode, bool(*comparisonFunction)(PointerClass const, int const)) const
bool matchesExactly(PointerClass const firstPointer, PointerClass const secondPointer) const
void setPairedValueAndSortPointers(ValueClass const pairedValue)
void becomeCopyOf(PointersWithValue< PointerClass, ValueClass > const ©Source)
ValueClass getPairedValue() const