/* * Pure Data Packet system implementation. : symbol and namespace stuff * Copyright (c) by Tom Schouten * * 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 _PF_SYMBOL_ #define _PF_SYMBOL_ /** @file symbol.h @brief Symbol type There's one symbol hash. Symbols are never freed. */ #include #include /** \brief Symbol */ struct pf_symbol { struct pf_symbol *s_next; ///< next in linked list char *s_name; ///< symbol name pf_list_t *s_stack; ///< optional stack for data reuse }; /* get symbol from char */ pf_symbol_t *pf_symbol(char *s); ///< create a symbol from literal string /* get symbol from printf style args */ pf_symbol_t *pf_symbolf(char *fmt, ...); ///< create a symbol from formatted string pf_symbol_t *pf_vsymbolf(char *fmt, va_list ap); ///< create a symbol from formatted string // FIXME: is this really necessary? #if 1 pf_symbol_t * pf_symbol_list(void); pf_symbol_t * pf_symbol_atom(void); pf_symbol_t * pf_symbol_wildcard(void); pf_symbol_t * pf_symbol_float(void); pf_symbol_t * pf_symbol_int(void); pf_symbol_t * pf_symbol_symbol(void); pf_symbol_t * pf_symbol_invalid(void); #define PF_SYM_LIST pf_symbol_list() #define PF_SYM_ATOM pf_symbol_atom() #define PF_SYM_WILDCARD pf_symbol_wildcard() #define PF_SYM_FLOAT pf_symbol_float() #define PF_SYM_INT pf_symbol_int() #define PF_SYM_SYMBOL pf_symbol_symbol() #define PF_SYM_INVALID pf_symbol_invalid() #endif #endif