00001 00009 /************************************************************************** 00010 00011 begin : Sun Oct 24 2004 00012 copyright : (C) 2002-2010 by Ewald Arnold 00013 email : mockpp at ewald-arnold dot de 00014 00015 This program is free software; you can redistribute it and/or modify 00016 it under the terms of the GNU Lesser General Public License as 00017 published by the Free Software Foundation; either version 2 of the License, 00018 or (at your option) any later version. 00019 00020 This program is distributed in the hope that it will be useful, 00021 but WITHOUT ANY WARRANTY; without even the implied warranty of 00022 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00023 GNU General Public License for more details. 00024 00025 You should have received a copy of the GNU Lesser General Public License 00026 along with this program; if not, write to the Free Software 00027 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00028 00029 **/ 00030 00031 #ifndef MOCKPP_CONSTRAINTHOLDER_H 00032 #define MOCKPP_CONSTRAINTHOLDER_H 00033 00034 #include <mockpp/util/AutoPointer.h> 00035 00036 #include <mockpp/mockpp.h> // always first 00037 00038 #include <mockpp/constraint/Constraint.h> 00039 #include <mockpp/constraint/TypelessConstraint.h> 00040 00041 00042 MOCKPP_NS_START 00043 00044 00049 template <typename T> 00050 class ConstraintHolder 00051 { 00052 public: 00053 00057 ConstraintHolder(Constraint<T> *in_constraint) 00058 : constraint(in_constraint) 00059 {} 00060 00064 ConstraintHolder(const typename TypelessConstraint::AP &in_constraint) 00065 : constraint(new TypelessConstraintAdapter<T>(in_constraint)) 00066 {} 00067 00071 ConstraintHolder(TypelessConstraint *in_constraint) 00072 : constraint(new TypelessConstraintAdapter<T>(in_constraint)) 00073 {} 00074 00078 ConstraintHolder(const typename Constraint<T>::AP &in_constraint) 00079 : constraint(in_constraint) 00080 {} 00081 00086 #if defined(__BORLANDC__) && (__BORLANDC__ >= 560) 00087 operator typename AutoPointer<Constraint<T> > () const // we actually lie a bit 00088 #else 00089 operator typename Constraint<T>::AP () const 00090 #endif 00091 { 00092 return constraint; 00093 } 00094 00095 private: 00096 00097 mutable typename Constraint<T>::AP constraint; // we actually lie a bit 00098 }; 00099 00100 00101 MOCKPP_NS_END 00102 00103 00104 #endif // MOCKPP_CONSTRAINTHOLDER_H