2008-05-29 Guillaume SADEGH <sadegh@lrde.epita.fr> * iface/nips/nips.cc, iface/nips/nips.hh, iface/nips/common.cc, iface/nips/common.hh, iface/nips/Makefile.am: TGBA implementation with the NIPS library. * iface/nips/emptiness_check.cc: Emptiness check on a Promela interface. * iface/nips/dottynips.cc: Dot printer on the NIPS interface. * iface/nips/compile.sh: Add. Wrapper around nips compiler to compile Promela to NIPS bytecode. * iface/nips/nips_vm,iface/nips/nips_vm/bytecode.h, iface/nips/nips_vm/ChangeLog, iface/nips/nips_vm/COPYING, iface/nips/nips_vm/hashtab.c, iface/nips/nips_vm/hashtab.h, iface/nips/nips_vm/INSTALL, iface/nips/nips_vm/instr.c, iface/nips/nips_vm/instr.h, iface/nips/nips_vm/instr_step.c, iface/nips/nips_vm/instr_step.h, iface/nips/nips_vm/instr_tools.c, iface/nips/nips_vm/instr_tools.h, iface/nips/nips_vm/instr_wrap.c, iface/nips/nips_vm/instr_wrap.h, iface/nips/nips_vm/interactive.c, iface/nips/nips_vm/interactive.h, iface/nips/nips_vm/main.c, iface/nips/nips_vm/Makefile, iface/nips/nips_vm/Makefile.am, iface/nips/nips_vm/nips_asm_help.pl, iface/nips/nips_vm/nips_asm_instr.pl, iface/nips/nips_vm/nips_asm.pl, iface/nips/nips_vm/nips_disasm.pl, iface/nips/nips_vm/nipsvm.c, iface/nips/nips_vm/nipsvm.h, iface/nips/nips_vm/README, iface/nips/nips_vm/rt_err.c, iface/nips/nips_vm/rt_err.h, iface/nips/nips_vm/search.c, iface/nips/nips_vm/search.h, iface/nips/nips_vm/split.c, iface/nips/nips_vm/split.h, iface/nips/nips_vm/state.c, iface/nips/nips_vm/state.h, iface/nips/nips_vm/state_inline.h, iface/nips/nips_vm/state_parts.c, iface/nips/nips_vm/state_parts.h, iface/nips/nips_vm/timeval.h, iface/nips/nips_vm/tools.h: NIPS VM added to the SPOT distribution. * configure.ac, iface/Makefile.am: Build system updated for the NIPS front-end.
70 lines
1.9 KiB
C
70 lines
1.9 KiB
C
/* NIPS VM - New Implementation of Promela Semantics Virtual Machine
|
|
* Copyright (C) 2005: Stefan Schuermans <stefan@schuermans.info>
|
|
* Michael Weber <michaelw@i2.informatik.rwth-aachen.de>
|
|
* Lehrstuhl fuer Informatik II, RWTH Aachen
|
|
* Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html
|
|
*/
|
|
|
|
#ifndef INC_hashtab
|
|
#define INC_hashtab
|
|
|
|
|
|
#include "nipsvm.h"
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
|
|
// hashtable pointer type
|
|
typedef struct t_hashtab_header *t_hashtab;
|
|
typedef struct table_statistics_t table_statistics_t;
|
|
|
|
struct table_statistics_t {
|
|
size_t memory_size;
|
|
unsigned long entries_used;
|
|
unsigned long entries_available;
|
|
unsigned long conflicts;
|
|
unsigned long max_retries;
|
|
};
|
|
|
|
|
|
// create a new hash table
|
|
extern t_hashtab hashtab_new( unsigned long entries, unsigned long retries );
|
|
|
|
|
|
// free a hash table
|
|
extern void hashtab_free( t_hashtab hashtab );
|
|
|
|
|
|
// get index for/of an entry in a hash table
|
|
// - returns: 1 if state can be inserted into hash table
|
|
// 0 if state is already in hash table
|
|
// -1 if state did not fit into hash table (hash conflict that could not be resolved)
|
|
// - fills *p_pos with pointer to position for/of entry (not for return value -1)
|
|
extern int
|
|
hashtab_get_pos (t_hashtab hashtab, size_t size, nipsvm_state_t *state, nipsvm_state_t ***p_pos);
|
|
|
|
|
|
// put a state into a hash table
|
|
// - only the pointer is stored
|
|
// - returns: 1 if state was added to hash table
|
|
// 0 if state was already in hash table
|
|
// -1 if state did not fit into hash table (hash conflict that could not be resolved)
|
|
extern int
|
|
hashtab_insert (t_hashtab hashtab, size_t size, nipsvm_state_t *state);
|
|
|
|
|
|
// retrieve statistical information about hashtable
|
|
extern void
|
|
table_statistics (t_hashtab hashtab, table_statistics_t *stats);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif
|
|
|
|
|
|
#endif // #ifndef INC_hashtab
|