remove injected friends. Thanks to SIGOURE Benoit

git-svn-id: svn://svn.code.sf.net/p/loki-lib/code/trunk@765 7ec92016-0320-0410-acc4-a06ded1c099a
This commit is contained in:
syntheticpp 2006-10-18 13:55:32 +00:00
parent ae6396a4cd
commit 4c6d670e3d
2 changed files with 66 additions and 24 deletions

View file

@ -108,15 +108,15 @@ namespace Loki
PrototypeFactoryUnit(AbstractProduct* p = 0) PrototypeFactoryUnit(AbstractProduct* p = 0)
: pPrototype_(p) : pPrototype_(p)
{} {}
friend void DoGetPrototype(const PrototypeFactoryUnit& me, template <class CP, class Base1>
AbstractProduct*& pPrototype) friend void DoGetPrototype(const PrototypeFactoryUnit<CP, Base1>& me,
{ pPrototype = me.pPrototype_; } typename Base1::ProductList::Head*& pPrototype);
friend void DoSetPrototype(PrototypeFactoryUnit& me, template <class CP, class Base1>
AbstractProduct* pObj) friend void DoSetPrototype(PrototypeFactoryUnit<CP, Base1>& me,
{ me.pPrototype_ = pObj; } typename Base1::ProductList::Head* pObj);
template <class U> template <class U>
void GetPrototype(U*& p) void GetPrototype(U*& p)
{ return DoGetPrototype(*this, p); } { return DoGetPrototype(*this, p); }
@ -135,6 +135,16 @@ namespace Loki
AbstractProduct* pPrototype_; AbstractProduct* pPrototype_;
}; };
template <class CP, class Base>
inline void DoGetPrototype(const PrototypeFactoryUnit<CP, Base>& me,
typename Base::ProductList::Head*& pPrototype)
{ pPrototype = me.pPrototype_; }
template <class CP, class Base>
inline void DoSetPrototype(PrototypeFactoryUnit<CP, Base>& me,
typename Base::ProductList::Head* pObj)
{ me.pPrototype_ = pObj; }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// class template ConcreteFactory // class template ConcreteFactory
// Implements an AbstractFactory interface // Implements an AbstractFactory interface

View file

@ -74,6 +74,7 @@ namespace Loki
// * iterators are random // * iterators are random
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
template template
< <
class K, class K,
@ -288,33 +289,64 @@ namespace Loki
const MyCompare& me = *this; const MyCompare& me = *this;
return std::equal_range(begin(), end(), k, me); return std::equal_range(begin(), end(), k, me);
} }
friend bool operator==(const AssocVector& lhs, const AssocVector& rhs) template <class K1, class V1, class C1, class A1>
{ friend bool operator==(const AssocVector<K1, V1, C1, A1>& lhs,
const Base& me = lhs; const AssocVector<K1, V1, C1, A1>& rhs);
return me == rhs;
}
bool operator<(const AssocVector& rhs) const bool operator<(const AssocVector& rhs) const
{ {
const Base& me = *this; const Base& me = *this;
const Base& yo = rhs; const Base& yo = rhs;
return me < yo; return me < yo;
} }
friend bool operator!=(const AssocVector& lhs, const AssocVector& rhs) template <class K1, class V1, class C1, class A1>
{ return !(lhs == rhs); } friend bool operator!=(const AssocVector<K1, V1, C1, A1>& lhs,
const AssocVector<K1, V1, C1, A1>& rhs);
friend bool operator>(const AssocVector& lhs, const AssocVector& rhs) template <class K1, class V1, class C1, class A1>
{ return rhs < lhs; } friend bool operator>(const AssocVector<K1, V1, C1, A1>& lhs,
const AssocVector<K1, V1, C1, A1>& rhs);
friend bool operator>=(const AssocVector& lhs, const AssocVector& rhs) template <class K1, class V1, class C1, class A1>
{ return !(lhs < rhs); } friend bool operator>=(const AssocVector<K1, V1, C1, A1>& lhs,
const AssocVector<K1, V1, C1, A1>& rhs);
friend bool operator<=(const AssocVector& lhs, const AssocVector& rhs) template <class K1, class V1, class C1, class A1>
{ return !(rhs < lhs); } friend bool operator<=(const AssocVector<K1, V1, C1, A1>& lhs,
const AssocVector<K1, V1, C1, A1>& rhs);
}; };
template <class K, class V, class C, class A>
inline bool operator==(const AssocVector<K, V, C, A>& lhs,
const AssocVector<K, V, C, A>& rhs)
{
const std::vector<std::pair<K, V>, A>& me = lhs;
return me == rhs;
}
template <class K, class V, class C, class A>
inline bool operator!=(const AssocVector<K, V, C, A>& lhs,
const AssocVector<K, V, C, A>& rhs)
{ return !(lhs == rhs); }
template <class K, class V, class C, class A>
inline bool operator>(const AssocVector<K, V, C, A>& lhs,
const AssocVector<K, V, C, A>& rhs)
{ return rhs < lhs; }
template <class K, class V, class C, class A>
inline bool operator>=(const AssocVector<K, V, C, A>& lhs,
const AssocVector<K, V, C, A>& rhs)
{ return !(lhs < rhs); }
template <class K, class V, class C, class A>
inline bool operator<=(const AssocVector<K, V, C, A>& lhs,
const AssocVector<K, V, C, A>& rhs)
{ return !(rhs < lhs); }
// specialized algorithms: // specialized algorithms:
template <class K, class V, class C, class A> template <class K, class V, class C, class A>
void swap(AssocVector<K, V, C, A>& lhs, AssocVector<K, V, C, A>& rhs) void swap(AssocVector<K, V, C, A>& lhs, AssocVector<K, V, C, A>& rhs)