+++ /dev/null
-/************************************************************************
- ************************************************************************
- 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 <iostream>
-#include <cstdlib>
-#include <cstdio>
-
-
-
-template<class T>
-class P {
- private:
- T* p;
- public:
- P() : p(0) { }
- P(T* rawptr) : p(rawptr) { }
- P(const P& ptr) : p((T*)ptr) { }
-
- template<class T2>
- P(const P<T2>& 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<T>& p_) { return operator=((T *) p_); }
- template<class T2> P& cast(T2* p_) { return operator=(dynamic_cast<T*>(p_)); }
- template<class T2> P& cast(const P<T2>& p_) { return operator=(dynamic_cast<T*>(p_)); }
-};
-
-
-#endif