X-Git-Url: https://scm.cri.ensmp.fr/git/Faustine.git/blobdiff_plain/1059e1cc0c2ecfa237406949aa26155b6a5b9154..66f23d4fabf89ad09adbd4dfc15ac6b5b2b7da83:/interpreter/preprocessor/faust-0.9.47mr3/compiler/headers/smartpointer.hh diff --git a/interpreter/preprocessor/faust-0.9.47mr3/compiler/headers/smartpointer.hh b/interpreter/preprocessor/faust-0.9.47mr3/compiler/headers/smartpointer.hh new file mode 100644 index 0000000..825bd9a --- /dev/null +++ b/interpreter/preprocessor/faust-0.9.47mr3/compiler/headers/smartpointer.hh @@ -0,0 +1,74 @@ +/************************************************************************ + ************************************************************************ + FAUST compiler + Copyright (C) 2003-2004 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + ************************************************************************ + ************************************************************************/ + + + +#ifndef _SMARTPOINTER_H +#define _SMARTPOINTER_H + +//#include +#include +#include + + + +template +class P { + private: + T* p; + public: + P() : p(0) { } + P(T* rawptr) : p(rawptr) { } + P(const P& ptr) : p((T*)ptr) { } + + template + P(const P& ptr) : p((T*)ptr) { } + + ~P() { } + + operator T*() const { return p; } + T& operator*() const { + if (p == 0) { + //throw std::runtime_error("Null dereference in P::operator*() const "); + fprintf(stderr, "Null dereference in P::operator*() const \n "); + exit(1); + } + return *p; + } + T* operator->() const { + if (p == 0) { + fprintf(stderr, "Null dereference in P::operator->() const \n "); + //throw std::runtime_error("Null dereference in P::operator->() const "); + //std::cerr << "Null dereference in P::operator->() const " << std::endl; + exit(1); + } + return p; + } + T* pointee() const { return p;} + P& operator=(T* p_) { p = p_; return *this;} + + P& operator=(const P& p_) { return operator=((T *) p_); } + template P& cast(T2* p_) { return operator=(dynamic_cast(p_)); } + template P& cast(const P& p_) { return operator=(dynamic_cast(p_)); } +}; + + +#endif