📄 mix_symbol_table.h
字号:
/* -*-c-*- ---------------- mix_symbol_table.h : * Type mix_symbol_table_t and functions to manipulate it. * ------------------------------------------------------------------ * Copyright (C) 2000 Free Software Foundation, Inc. * * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */#ifndef MIX_SYMBOL_TABLE_H#define MIX_SYMBOL_TABLE_H#include <stdio.h>#include "mix_types.h"/* A symbol table shall be implemented as a hash table */typedef GHashTable mix_symbol_table_t ;/* Maximum length of stored symbols */#define MIX_SYM_MAX_LEN 10/* Create an empty table */extern mix_symbol_table_t *mix_symbol_table_new (void);/* Create a table and populate it with the contents of a table stored in -file- using mix_symbol_table_print (table, MIX_SYM_LINE, file)*/extern mix_symbol_table_t *mix_symbol_table_new_from_file (FILE *file);/* Delete a table */extern voidmix_symbol_table_delete (mix_symbol_table_t *table);/* add/remove symbols from other table */extern gbooleanmix_symbol_table_merge_table (mix_symbol_table_t *table, const mix_symbol_table_t *from);extern gbooleanmix_symbol_table_substract_table (mix_symbol_table_t *table, const mix_symbol_table_t *other);/* Add/remove symbols one by one *//* possible outcomes: */enum { MIX_SYM_FAIL, /* attempt failed */ MIX_SYM_OK, MIX_SYM_DUP, /* duplicated symbol */ MIX_SYM_LONG /* symbol too long: only MIX_SYM_MAX_LEN chars used */};extern gintmix_symbol_table_add (mix_symbol_table_t *table, const gchar *sym, mix_word_t value);#define mix_symbol_table_remove(table, sym) \ g_hash_table_remove (table, sym)/* Add or modify symbol if it exists */extern gintmix_symbol_table_insert (mix_symbol_table_t *table, const gchar *sym, mix_word_t new_value);/* Add or modify symbol if it exists, without copiying sym */#define mix_symbol_table_insert_static(table,sym,value)\ g_hash_table_insert (table,(gpointer)sym,GUINT_TO_POINTER (value))/* Symbols lookup */extern gbooleanmix_symbol_table_is_defined (const mix_symbol_table_t *table, const gchar *sym);#define mix_symbol_table_value(table,sym) \ (mix_word_t)GPOINTER_TO_UINT (g_hash_table_lookup ((GHashTable *)table, \ (gpointer)sym))/* Traverse the table */#define mix_symbol_table_foreach(table,func,data) \ g_hash_table_foreach (table,func,data)/* Print the table */enum { MIX_SYM_ROWS, /* each symbol/value in a row */ MIX_SYM_LINE /* {,symbol =value}*; in a single row */};extern voidmix_symbol_table_print (const mix_symbol_table_t *table, gint mode, FILE *file, gboolean skiplocal);#endif /* MIX_SYMBOL_TABLE_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -