#ifndef __BonTypes_H_ #define __BonTypes_H_ #include #include "CoinSmartPtr.hpp" namespace Bonmin { /** A small wrap around std::vector to give easy access to array for interfacing with fortran code.*/ template class vector : public std::vector{ public: /** Default constructor.*/ vector(): std::vector(){} /** Copy constructor.*/ vector(const vector& other): std::vector(other){} /** Copy constructor.*/ vector(const std::vector& other): std::vector(other){} /** constructor with size.*/ vector(unsigned int n): std::vector(n){} /** Assignment.*/ vector& operator=(const vector& other){ std::vector::operator=(other); return (*this);} /** Assignment.*/ vector& operator=(const std::vector& other){ return std::vector::operator=(other); return (*this);} /** Access pointer to first element of storage.*/ inline T* operator()(){return &std::vector::front();} /** Access pointer to first element of storage.*/ inline const T* operator()() const {return &std::vector::front();} }; //structure to store an object of class X in a Coin::ReferencedObject template struct SimpleReferenced : public Coin::ReferencedObject { /** The object.*/ X object; const X& operator()() const{ return object;} X& operator()() { return object;} }; //structure to store a pointer to an object of class X in a // Coin::ReferencedObject template struct SimpleReferencedPtr : public Coin::ReferencedObject { /** The object.*/ X * object; SimpleReferencedPtr(): object(NULL){} ~SimpleReferencedPtr(){ delete object;} const X& operator()() const{ return *object;} X& operator()() { return *object;} const X* ptr() const{ return object;} X* ptr(){ return object;} }; template SimpleReferenced * make_referenced(X other){ SimpleReferenced * ret_val = new SimpleReferenced; ret_val->object = other; return ret_val; } template SimpleReferencedPtr * make_referenced(X* other){ SimpleReferencedPtr * ret_val = new SimpleReferencedPtr; ret_val->object = other; return ret_val; } } #endif