adding CExpr
This commit is contained in:
parent
930fad877a
commit
9c91ee36d2
30 changed files with 10941 additions and 0 deletions
100
CExpr/WX_HASH.H
Normal file
100
CExpr/WX_HASH.H
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
/*
|
||||
* File: wx_hash.h
|
||||
* Purpose: Basic hash table implementation
|
||||
* Author: Julian Smart
|
||||
* Created: 1993
|
||||
* Updated:
|
||||
* Copyright: (c) 1993
|
||||
*/
|
||||
|
||||
/* sccsid[] = "@(#)wx_hash.h 1.2 5/9/94" */
|
||||
|
||||
#ifndef wxb_hashh
|
||||
#define wxb_hashh
|
||||
|
||||
#ifdef __GNUG__
|
||||
#pragma interface
|
||||
#endif
|
||||
|
||||
#include "wx_list.h"
|
||||
|
||||
/*
|
||||
* A hash table is an array of user-definable size with lists
|
||||
* of data items hanging off the array positions. Usually there'll
|
||||
* be a hit, so no search is required; otherwise we'll have to run down
|
||||
* the list to find the desired item.
|
||||
*/
|
||||
|
||||
#ifdef IN_CPROTO
|
||||
typedef void *wxHashTable ;
|
||||
#else
|
||||
|
||||
class wxHashTable: public CObject
|
||||
{
|
||||
DECLARE_DYNAMIC(wxHashTable)
|
||||
|
||||
public:
|
||||
int n;
|
||||
int current_position;
|
||||
wxNode *current_node;
|
||||
|
||||
unsigned int key_type;
|
||||
wxList **hash_table;
|
||||
|
||||
wxHashTable(int the_key_type = wxKEY_INTEGER, int size = 1000);
|
||||
~wxHashTable(void);
|
||||
|
||||
BOOL Create(int the_key_type = wxKEY_INTEGER, int size = 1000);
|
||||
|
||||
// Note that there are 2 forms of Put, Get.
|
||||
// With a key and a value, the *value* will be checked
|
||||
// when a collision is detected. Otherwise, if there are
|
||||
// 2 items with a different value but the same key,
|
||||
// we'll retrieve the WRONG ONE. So where possible,
|
||||
// supply the required value along with the key.
|
||||
// In fact, the value-only versions make a key, and still store
|
||||
// the value. The use of an explicit key might be required
|
||||
// e.g. when combining several values into one key.
|
||||
// When doing that, it's highly likely we'll get a collision,
|
||||
// e.g. 1 + 2 = 3, 2 + 1 = 3.
|
||||
|
||||
// key and value are NOT necessarily the same
|
||||
void Put(long key, long value, CObject *object);
|
||||
void Put(long key, char *value, CObject *object);
|
||||
|
||||
// key and value are the same
|
||||
void Put(long value, CObject *object);
|
||||
void Put(const char *value, CObject *object);
|
||||
|
||||
// key and value not the same
|
||||
CObject *Get(long key, long value);
|
||||
CObject *Get(long key, char *value);
|
||||
|
||||
// key and value are the same
|
||||
CObject *Get(long value);
|
||||
CObject *Get(const char *value);
|
||||
|
||||
// Deletes entry and returns data if found
|
||||
CObject *Delete(long key);
|
||||
CObject *Delete(const char *key);
|
||||
|
||||
CObject *Delete(long key, int value);
|
||||
CObject *Delete(long key, char *value);
|
||||
|
||||
// Construct your own integer key from a string, e.g. in case
|
||||
// you need to combine it with something
|
||||
long MakeKey(const char *string);
|
||||
|
||||
// Way of iterating through whole hash table (e.g. to delete everything)
|
||||
// Not necessary, of course, if you're only storing pointers to
|
||||
// objects maintained separately
|
||||
|
||||
void BeginFind(void);
|
||||
wxNode *Next(void);
|
||||
|
||||
void DeleteContents(BOOL flag);
|
||||
void Clear(void);
|
||||
};
|
||||
|
||||
#endif // IN_CPROTO
|
||||
#endif // wxb_hashh
|
||||
Reference in a new issue