adding CExpr
This commit is contained in:
parent
c973feece9
commit
7947f37851
30 changed files with 10941 additions and 0 deletions
155
CExpr/Wx_list.h
Normal file
155
CExpr/Wx_list.h
Normal file
|
|
@ -0,0 +1,155 @@
|
|||
/*
|
||||
* File: wx_list.h
|
||||
* Purpose: wxList implementation much used in wxWindows
|
||||
* Author: Julian Smart
|
||||
* Created: 1993
|
||||
* Updated:
|
||||
* Copyright:
|
||||
*/
|
||||
|
||||
/* sccsid[] = "@(#)wx_list.h 1.2 5/9/94" */
|
||||
|
||||
#ifndef wxb_listh
|
||||
#define wxb_listh
|
||||
|
||||
#ifdef __GNUG__
|
||||
#pragma interface
|
||||
#endif
|
||||
|
||||
#ifdef IN_CPROTO
|
||||
typedef void *wxList ;
|
||||
typedef void *wxNode;
|
||||
typedef void *wxStringList;
|
||||
#else
|
||||
|
||||
class wxList;
|
||||
|
||||
#define wxKEY_NONE 0
|
||||
#define wxKEY_INTEGER 1
|
||||
#define wxKEY_STRING 2
|
||||
class wxNode: public CObject
|
||||
{
|
||||
DECLARE_DYNAMIC(wxNode)
|
||||
private:
|
||||
|
||||
CObject *data;
|
||||
wxNode *next;
|
||||
wxNode *previous;
|
||||
|
||||
public:
|
||||
wxList *list;
|
||||
|
||||
// Optional key stuff
|
||||
union
|
||||
{
|
||||
long integer;
|
||||
char *string;
|
||||
} key;
|
||||
|
||||
wxNode(wxList *the_list = NULL, wxNode *last_one = NULL, wxNode *next_one = NULL, CObject *object = NULL);
|
||||
wxNode(wxList *the_list, wxNode *last_one, wxNode *next_one,
|
||||
CObject *object, long the_key);
|
||||
wxNode(wxList *the_list, wxNode *last_one, wxNode *next_one,
|
||||
CObject *object, const char *the_key);
|
||||
~wxNode(void);
|
||||
|
||||
inline wxNode *Next(void) { return next; }
|
||||
inline wxNode *Previous(void) { return previous; }
|
||||
inline CObject *Data(void) { return data; }
|
||||
inline void SetData(CObject *the_data) { data = the_data; }
|
||||
};
|
||||
|
||||
// type of compare function for list sort operation (as in 'qsort')
|
||||
typedef int (*wxSortCompareFunction)(const void *elem1, const void *elem2);
|
||||
|
||||
class wxList: public CObject
|
||||
{
|
||||
DECLARE_DYNAMIC(wxList)
|
||||
|
||||
public:
|
||||
int n;
|
||||
int destroy_data;
|
||||
wxNode *first_node;
|
||||
wxNode *last_node;
|
||||
unsigned int key_type;
|
||||
|
||||
wxList(void);
|
||||
wxList(unsigned int the_key_type);
|
||||
wxList(int N, CObject *Objects[]);
|
||||
wxList(CObject *object, ...);
|
||||
~wxList(void);
|
||||
|
||||
inline int Number(void) { return n; }
|
||||
|
||||
// Append to end of list
|
||||
inline wxNode *Append(CObject *object)
|
||||
{
|
||||
wxNode *node = new wxNode(this, last_node, NULL, object);
|
||||
if (!first_node)
|
||||
first_node = node;
|
||||
last_node = node;
|
||||
n ++;
|
||||
return node;
|
||||
}
|
||||
|
||||
// Insert at front of list
|
||||
wxNode *Insert(CObject *object);
|
||||
|
||||
// Insert before given node
|
||||
wxNode *Insert(wxNode *position, CObject *object);
|
||||
|
||||
// Keyed append
|
||||
wxNode *Append(long key, CObject *object);
|
||||
wxNode *Append(const char *key, CObject *object);
|
||||
|
||||
BOOL DeleteNode(wxNode *node);
|
||||
BOOL DeleteObject(CObject *object); // Finds object pointer and
|
||||
// deletes node (and object if
|
||||
// DeleteContents is on)
|
||||
void Clear(void); // Delete all nodes
|
||||
|
||||
inline wxNode *First(void) { return first_node; }
|
||||
inline wxNode *Last(void) { return last_node; }
|
||||
wxNode *Nth(int i); // nth node counting from 0
|
||||
|
||||
// Keyed search
|
||||
wxNode *Find(long key);
|
||||
wxNode *Find(const char *key);
|
||||
|
||||
wxNode *Member(CObject *object);
|
||||
|
||||
inline void DeleteContents(int destroy) { destroy_data = destroy; }
|
||||
// Instruct it to destroy user data
|
||||
// when deleting nodes
|
||||
// this function allows the sorting of arbitrary lists by giving
|
||||
// a function to compare two list elements.
|
||||
void Sort(wxSortCompareFunction compfunc);
|
||||
|
||||
CObject *FirstThat(int (*F)(CObject *O));
|
||||
void ForEach(void (*F)(CObject *O));
|
||||
//CObject *LastThat(int (*F)(CObject *O));
|
||||
};
|
||||
|
||||
// String list class. N.B. this always copies strings
|
||||
// with Add and deletes them itself.
|
||||
class wxStringList: public wxList
|
||||
{
|
||||
DECLARE_DYNAMIC(wxStringList)
|
||||
|
||||
public:
|
||||
wxStringList(void);
|
||||
wxStringList(char *first ...);
|
||||
~wxStringList(void);
|
||||
|
||||
virtual wxNode *Add(const char *s);
|
||||
virtual void Delete(const char *s);
|
||||
virtual char **ListToArray(BOOL new_copies = FALSE);
|
||||
virtual void Sort(void);
|
||||
virtual BOOL Member(const char *s);
|
||||
};
|
||||
|
||||
// Make a copy of this string using 'new'
|
||||
extern char *copystring(const char *s);
|
||||
|
||||
#endif // IN_CPROTO
|
||||
#endif // wxb_listh
|
||||
Reference in a new issue