X-Git-Url: https://scm.cri.ensmp.fr/git/Faustine.git/blobdiff_plain/c7f552fd8888da2f0d8cfb228fe0f28d3df3a12c..b4b6f2ea75b9f0f3ca918f5b84016610bf7a4d4f:/interpretor/faust-0.9.47mr3/compiler/tlib/symbol.hh diff --git a/interpretor/faust-0.9.47mr3/compiler/tlib/symbol.hh b/interpretor/faust-0.9.47mr3/compiler/tlib/symbol.hh deleted file mode 100644 index 5a24a74..0000000 --- a/interpretor/faust-0.9.47mr3/compiler/tlib/symbol.hh +++ /dev/null @@ -1,108 +0,0 @@ -/************************************************************************ - ************************************************************************ - 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. - ************************************************************************ - ************************************************************************/ - -/** \file symbol.hh - * A library to create and manipulate symbols with a unique name. - * A library of functions to create and manipulate symbols with a unique name. - * - * API: - * - * - Sym q = symbol("abcd"); returns the symbol of name "abcd" - * - const char* s = name(q); returns the name of symbol q - * - Sym q = unique("TOTO"); returns a new unique symbol of name "TOTOnnn" - * - * Properties: - * - * If p and q are two symbols then : - * p != q <=> name(p) != name(q) - * - */ - - -#ifndef __SYMBOL__ -#define __SYMBOL__ - -#include -#include - -using namespace std; - -//--------------------------------SYMBOL------------------------------------- - -/** - * Symbols are unique objects with a name stored in a hash table. - */ -class Symbol -{ - - private: - - static const int kHashTableSize = 511; ///< Size of the hash table (a prime number is recommended) - static Symbol* gSymbolTable[kHashTableSize]; ///< Hash table used to store the symbols - - - // Fields - char* fName; ///< Name of the symbol - unsigned int fHash; ///< Hash key computed from the name and used to determine the hash table entry - Symbol* fNext; ///< Next symbol in the hash table entry - void* fData; ///< Field to user disposal to store additional data - - // Constructors & destructors - Symbol (const char* str, unsigned int hsh, Symbol* nxt); ///< Constructs a new symbol ready to be placed in the hash table - ~Symbol (); ///< The Destructor is never used - - // Others - bool equiv (unsigned int hash, const char* str) const ; ///< Check if the name of the symbol is equal to string \p str - static unsigned int calcHashKey (const char* str); ///< Compute the 32-bits hash key of string \p str - - // Static methods - static Symbol* get (const string& str); ///< Get the symbol of name \p str - static Symbol* get (const char* str); ///< Get the symbol of name \p str - static Symbol* prefix (const char* str); ///< Creates a new symbol of name prefixed by \p str - static bool isnew (const char* str); ///< Returns \b true if no symbol of name \p str exists - - public: - ostream& print (ostream& fout) const; ///< print a symbol on a stream - - friend Symbol* symbol (const char* str); - friend Symbol* symbol (const string& str); - friend Symbol* unique (const char* str); - friend const char* name (Symbol* sym); - - friend void* getUserData (Symbol* sym); - friend void setUserData (Symbol* sym, void* d); - -}; - -inline Symbol* symbol (const char* str) { return Symbol::get(str); } ///< Returns (and creates if new) the symbol of name \p str -inline Symbol* symbol (const string& str) { return Symbol::get(str); } ///< Returns (and creates if new) the symbol of name \p str -inline Symbol* unique (const char* str) { return Symbol::prefix(str);} ///< Returns a new unique symbol of name strxxx -inline const char* name (Symbol* sym) { return sym->fName; } ///< Returns the name of a symbol - -inline void* getUserData (Symbol* sym) { return sym->fData; } ///< Returns user data -inline void setUserData (Symbol* sym, void* d) { sym->fData=d; } ///< Set user data - -inline ostream& operator << (ostream& s, const Symbol& n) { return n.print(s); } - - -typedef Symbol* Sym; - -#endif