mirror of
git://projects.qi-hardware.com/wernermisc.git
synced 2024-11-22 06:53:08 +02:00
qpkg: remove Jval
- jrb.h (struct jrb_node): changed "key" and "val" from "Jval" to "void *" - jrb.h, jval.c (jrb_insert_gen, jrb_find_gen, jrb_find_gte_gen, jrb_val): replaced "Jval" with "void *" or "const void *", respectively - rbtest.c (cmp, INSERT): updated for Jval removal - rbtest.c (main): use jrb_val(jrb) instead of jval_v(jrb->val) - Makefile (OBJS_rbtest): removed jval.o - jval.h, jval.c: removed
This commit is contained in:
parent
769d31581d
commit
7f05c9e284
@ -3,7 +3,7 @@ CFLAGS = -Wall -Wshadow -g -O
|
|||||||
#LDFLAGS=-pg
|
#LDFLAGS=-pg
|
||||||
|
|
||||||
OBJS = gobble.o id.o prereq.o qpkg.o
|
OBJS = gobble.o id.o prereq.o qpkg.o
|
||||||
OBJS_rbtest = rbtest.o jrb.o jval.o
|
OBJS_rbtest = rbtest.o jrb.o
|
||||||
|
|
||||||
all: qpkg rbtest
|
all: qpkg rbtest
|
||||||
|
|
||||||
|
25
qpkg/jrb.c
25
qpkg/jrb.c
@ -59,10 +59,10 @@ static void single_rotate(JRB y, int l);
|
|||||||
#define isext(n) (!isint(n))
|
#define isext(n) (!isint(n))
|
||||||
#define ishead(n) (n->roothead & 2)
|
#define ishead(n) (n->roothead & 2)
|
||||||
#define isroot(n) (n->roothead & 1)
|
#define isroot(n) (n->roothead & 1)
|
||||||
#define getlext(n) ((struct jrb_node *)(n->key.v))
|
#define getlext(n) ((struct jrb_node *)(n->key))
|
||||||
#define setlext(node, val) node->key.v = (void *) (val)
|
#define setlext(node, val) node->key = (void *) (val)
|
||||||
#define getrext(n) ((struct jrb_node *)(n->val.v))
|
#define getrext(n) ((struct jrb_node *)(n->val))
|
||||||
#define setrext(node, value) node->val.v = (void *) (value)
|
#define setrext(node, value) node->val = (void *) (value)
|
||||||
#define setred(n) n->red = 1
|
#define setred(n) n->red = 1
|
||||||
#define setblack(n) n->red = 0
|
#define setblack(n) n->red = 0
|
||||||
#define setleft(n) n->left = 1
|
#define setleft(n) n->left = 1
|
||||||
@ -160,12 +160,13 @@ JRB make_jrb(void)
|
|||||||
head->flink = head;
|
head->flink = head;
|
||||||
head->blink = head;
|
head->blink = head;
|
||||||
head->parent = head;
|
head->parent = head;
|
||||||
head->key.s = "";
|
head->key = NULL;
|
||||||
sethead(head);
|
sethead(head);
|
||||||
return head;
|
return head;
|
||||||
}
|
}
|
||||||
|
|
||||||
JRB jrb_find_gte_gen(JRB n, Jval key,int (*fxn)(Jval, Jval), int *fnd)
|
JRB jrb_find_gte_gen(JRB n, const void *key,
|
||||||
|
int (*fxn)(const void *, const void *), int *fnd)
|
||||||
{
|
{
|
||||||
int cmp;
|
int cmp;
|
||||||
|
|
||||||
@ -193,7 +194,7 @@ JRB jrb_find_gte_gen(JRB n, Jval key,int (*fxn)(Jval, Jval), int *fnd)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
JRB jrb_find_gen(JRB n, Jval key, int (*fxn)(Jval, Jval))
|
JRB jrb_find_gen(JRB n, const void *key, int (*fxn)(const void *, const void *))
|
||||||
{
|
{
|
||||||
int fnd;
|
int fnd;
|
||||||
JRB j;
|
JRB j;
|
||||||
@ -202,7 +203,7 @@ JRB jrb_find_gen(JRB n, Jval key, int (*fxn)(Jval, Jval))
|
|||||||
if (fnd) return j; else return NULL;
|
if (fnd) return j; else return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static JRB jrb_insert_b(JRB n, Jval key, Jval val)
|
static JRB jrb_insert_b(JRB n, void *key, void *val)
|
||||||
{
|
{
|
||||||
JRB newleft, newright, newnode, p;
|
JRB newleft, newright, newnode, p;
|
||||||
|
|
||||||
@ -488,17 +489,15 @@ void jrb_free_tree(JRB n)
|
|||||||
free(n);
|
free(n);
|
||||||
}
|
}
|
||||||
|
|
||||||
Jval jrb_val(JRB n)
|
void *jrb_val(JRB n)
|
||||||
{
|
{
|
||||||
return n->val;
|
return n->val;
|
||||||
}
|
}
|
||||||
|
|
||||||
JRB jrb_insert_gen(JRB tree, Jval key, Jval val,
|
JRB jrb_insert_gen(JRB tree, void *key, void *val,
|
||||||
int (*func)(Jval, Jval))
|
int (*func)(const void *, const void *))
|
||||||
{
|
{
|
||||||
int fnd;
|
int fnd;
|
||||||
|
|
||||||
return jrb_insert_b(jrb_find_gte_gen(tree, key, func, &fnd), key, val);
|
return jrb_insert_b(jrb_find_gte_gen(tree, key, func, &fnd), key, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
19
qpkg/jrb.h
19
qpkg/jrb.h
@ -37,8 +37,6 @@ Fax: 865-974-4404
|
|||||||
#ifndef _JRB_H_
|
#ifndef _JRB_H_
|
||||||
#define _JRB_H_
|
#define _JRB_H_
|
||||||
|
|
||||||
#include "jval.h"
|
|
||||||
|
|
||||||
/* Main jrb_node. You only ever use the fields
|
/* Main jrb_node. You only ever use the fields
|
||||||
flink
|
flink
|
||||||
blink
|
blink
|
||||||
@ -55,8 +53,8 @@ typedef struct jrb_node {
|
|||||||
struct jrb_node *flink;
|
struct jrb_node *flink;
|
||||||
struct jrb_node *blink;
|
struct jrb_node *blink;
|
||||||
struct jrb_node *parent;
|
struct jrb_node *parent;
|
||||||
Jval key;
|
void *key;
|
||||||
Jval val;
|
void *val;
|
||||||
} *JRB;
|
} *JRB;
|
||||||
|
|
||||||
|
|
||||||
@ -67,20 +65,21 @@ extern JRB make_jrb(void); /* Creates a new rb-tree */
|
|||||||
jrb_insert uses strcmp() as comparison funcion. jrb_inserti uses <>=,
|
jrb_insert uses strcmp() as comparison funcion. jrb_inserti uses <>=,
|
||||||
jrb_insertg uses func() */
|
jrb_insertg uses func() */
|
||||||
|
|
||||||
extern JRB jrb_insert_gen(JRB tree, Jval key, Jval val, int (*func)(Jval,Jval));
|
extern JRB jrb_insert_gen(JRB tree, void *key, void *val,
|
||||||
|
int (*func)(const void *, const void *));
|
||||||
|
|
||||||
/* returns an external node in t whose value is equal k. Returns NULL if
|
/* returns an external node in t whose value is equal k. Returns NULL if
|
||||||
there is no such node in the tree */
|
there is no such node in the tree */
|
||||||
|
|
||||||
extern JRB jrb_find_gen(JRB root, Jval, int (*func)(Jval, Jval));
|
extern JRB jrb_find_gen(JRB root, const void *,
|
||||||
|
int (*func)(const void *, const void *));
|
||||||
|
|
||||||
/* returns an external node in t whose value is equal
|
/* returns an external node in t whose value is equal
|
||||||
k or whose value is the smallest value greater than k. Sets found to
|
k or whose value is the smallest value greater than k. Sets found to
|
||||||
1 if the key was found, and 0 otherwise. */
|
1 if the key was found, and 0 otherwise. */
|
||||||
|
|
||||||
extern JRB jrb_find_gte_gen(JRB root, Jval key,
|
extern JRB jrb_find_gte_gen(JRB root, const void *key,
|
||||||
int (*func)(Jval, Jval), int *found);
|
int (*func)(const void *, const void *), int *found);
|
||||||
|
|
||||||
|
|
||||||
/* Creates a node with key key and val val and inserts it into the
|
/* Creates a node with key key and val val and inserts it into the
|
||||||
@ -91,7 +90,7 @@ extern void jrb_delete_node(JRB node); /* Deletes and frees a node (but
|
|||||||
not the key or val) */
|
not the key or val) */
|
||||||
extern void jrb_free_tree(JRB root); /* Deletes and frees an entire tree */
|
extern void jrb_free_tree(JRB root); /* Deletes and frees an entire tree */
|
||||||
|
|
||||||
extern Jval jrb_val(JRB node); /* Returns node->v.val -- this is to shut
|
extern void *jrb_val(JRB node); /* Returns node->v.val -- this is to shut
|
||||||
lint up */
|
lint up */
|
||||||
|
|
||||||
extern int jrb_nblack(JRB n); /* returns # of black nodes in path from
|
extern int jrb_nblack(JRB n); /* returns # of black nodes in path from
|
||||||
|
196
qpkg/jval.c
196
qpkg/jval.c
@ -1,196 +0,0 @@
|
|||||||
/*
|
|
||||||
Libraries for fields, doubly-linked lists and red-black trees.
|
|
||||||
Copyright (C) 2001 James S. Plank
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2.1 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library 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
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
Please see http://www.cs.utk.edu/~plank/plank/classes/cs360/360/notes/Libfdr/
|
|
||||||
for instruction on how to use this library.
|
|
||||||
|
|
||||||
Jim Plank
|
|
||||||
plank@cs.utk.edu
|
|
||||||
http://www.cs.utk.edu/~plank
|
|
||||||
|
|
||||||
Associate Professor
|
|
||||||
Department of Computer Science
|
|
||||||
University of Tennessee
|
|
||||||
203 Claxton Complex
|
|
||||||
1122 Volunteer Blvd.
|
|
||||||
Knoxville, TN 37996-3450
|
|
||||||
|
|
||||||
865-974-4397
|
|
||||||
Fax: 865-974-4404
|
|
||||||
*/
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include "jval.h"
|
|
||||||
|
|
||||||
Jval JNULL;
|
|
||||||
|
|
||||||
Jval new_jval_i(int i) {
|
|
||||||
Jval j;
|
|
||||||
j.i = i;
|
|
||||||
return j;
|
|
||||||
}
|
|
||||||
|
|
||||||
Jval new_jval_l(long l) {
|
|
||||||
Jval j;
|
|
||||||
j.l = l;
|
|
||||||
return j;
|
|
||||||
}
|
|
||||||
|
|
||||||
Jval new_jval_f(float f) {
|
|
||||||
Jval j;
|
|
||||||
j.f = f;
|
|
||||||
return j;
|
|
||||||
}
|
|
||||||
|
|
||||||
Jval new_jval_d(double d) {
|
|
||||||
Jval j;
|
|
||||||
j.d = d;
|
|
||||||
return j;
|
|
||||||
}
|
|
||||||
|
|
||||||
Jval new_jval_v(void *v) {
|
|
||||||
Jval j;
|
|
||||||
j.v = v;
|
|
||||||
return j;
|
|
||||||
}
|
|
||||||
|
|
||||||
Jval new_jval_s(char *s) {
|
|
||||||
Jval j;
|
|
||||||
j.s = s;
|
|
||||||
return j;
|
|
||||||
}
|
|
||||||
|
|
||||||
Jval new_jval_c(char c) {
|
|
||||||
Jval j;
|
|
||||||
j.c = c;
|
|
||||||
return j;
|
|
||||||
}
|
|
||||||
|
|
||||||
Jval new_jval_uc(unsigned char uc) {
|
|
||||||
Jval j;
|
|
||||||
j.uc = uc;
|
|
||||||
return j;
|
|
||||||
}
|
|
||||||
|
|
||||||
Jval new_jval_sh(short sh) {
|
|
||||||
Jval j;
|
|
||||||
j.sh = sh;
|
|
||||||
return j;
|
|
||||||
}
|
|
||||||
|
|
||||||
Jval new_jval_ush(unsigned short ush) {
|
|
||||||
Jval j;
|
|
||||||
j.ush = ush;
|
|
||||||
return j;
|
|
||||||
}
|
|
||||||
|
|
||||||
Jval new_jval_ui(unsigned int i) {
|
|
||||||
Jval j;
|
|
||||||
j.i = i;
|
|
||||||
return j;
|
|
||||||
}
|
|
||||||
|
|
||||||
Jval new_jval_iarray(int i0, int i1) {
|
|
||||||
Jval j;
|
|
||||||
j.iarray[0] = i0;
|
|
||||||
j.iarray[1] = i1;
|
|
||||||
return j;
|
|
||||||
}
|
|
||||||
|
|
||||||
Jval new_jval_farray(float f0, float f1) {
|
|
||||||
Jval j;
|
|
||||||
j.farray[0] = f0;
|
|
||||||
j.farray[1] = f1;
|
|
||||||
return j;
|
|
||||||
}
|
|
||||||
|
|
||||||
Jval new_jval_carray_nt(char *carray) {
|
|
||||||
Jval j;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < 8 && carray[i] != '\0'; i++) {
|
|
||||||
j.carray[i] = carray[i];
|
|
||||||
}
|
|
||||||
if (i < 8) j.carray[i] = carray[i];
|
|
||||||
return j;
|
|
||||||
}
|
|
||||||
|
|
||||||
Jval new_jval_carray_nnt(char *carray) {
|
|
||||||
Jval j;
|
|
||||||
|
|
||||||
memcpy(j.carray, carray, 8);
|
|
||||||
return j;
|
|
||||||
}
|
|
||||||
|
|
||||||
int jval_i(Jval j) {
|
|
||||||
return j.i;
|
|
||||||
}
|
|
||||||
|
|
||||||
long jval_l(Jval j) {
|
|
||||||
return j.l;
|
|
||||||
}
|
|
||||||
|
|
||||||
float jval_f(Jval j) {
|
|
||||||
return j.f;
|
|
||||||
}
|
|
||||||
|
|
||||||
double jval_d(Jval j) {
|
|
||||||
return j.d;
|
|
||||||
}
|
|
||||||
|
|
||||||
void *jval_v(Jval j) {
|
|
||||||
return j.v;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *jval_s(Jval j) {
|
|
||||||
return j.s;
|
|
||||||
}
|
|
||||||
|
|
||||||
char jval_c(Jval j) {
|
|
||||||
return j.c;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned char jval_uc(Jval j) {
|
|
||||||
return j.uc;
|
|
||||||
}
|
|
||||||
|
|
||||||
short jval_sh(Jval j) {
|
|
||||||
return j.sh;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned short jval_ush(Jval j) {
|
|
||||||
return j.ush;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int jval_ui(Jval j) {
|
|
||||||
return j.ui;
|
|
||||||
}
|
|
||||||
|
|
||||||
int *jval_iarray(Jval j) {
|
|
||||||
return j.iarray;
|
|
||||||
}
|
|
||||||
|
|
||||||
float *jval_farray(Jval j) {
|
|
||||||
return j.farray;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *jval_carray(Jval j) {
|
|
||||||
return j.carray;
|
|
||||||
}
|
|
||||||
|
|
94
qpkg/jval.h
94
qpkg/jval.h
@ -1,94 +0,0 @@
|
|||||||
/*
|
|
||||||
Libraries for fields, doubly-linked lists and red-black trees.
|
|
||||||
Copyright (C) 2001 James S. Plank
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2.1 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library 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
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
Please see http://www.cs.utk.edu/~plank/plank/classes/cs360/360/notes/Libfdr/
|
|
||||||
for instruction on how to use this library.
|
|
||||||
|
|
||||||
Jim Plank
|
|
||||||
plank@cs.utk.edu
|
|
||||||
http://www.cs.utk.edu/~plank
|
|
||||||
|
|
||||||
Associate Professor
|
|
||||||
Department of Computer Science
|
|
||||||
University of Tennessee
|
|
||||||
203 Claxton Complex
|
|
||||||
1122 Volunteer Blvd.
|
|
||||||
Knoxville, TN 37996-3450
|
|
||||||
|
|
||||||
865-974-4397
|
|
||||||
Fax: 865-974-4404
|
|
||||||
*/
|
|
||||||
#ifndef _JVAL_H_
|
|
||||||
#define _JVAL_H_
|
|
||||||
|
|
||||||
/* The Jval -- a type that can hold any 8-byte type */
|
|
||||||
|
|
||||||
typedef union {
|
|
||||||
int i;
|
|
||||||
long l;
|
|
||||||
float f;
|
|
||||||
double d;
|
|
||||||
void *v;
|
|
||||||
char *s;
|
|
||||||
char c;
|
|
||||||
unsigned char uc;
|
|
||||||
short sh;
|
|
||||||
unsigned short ush;
|
|
||||||
unsigned int ui;
|
|
||||||
int iarray[2];
|
|
||||||
float farray[2];
|
|
||||||
char carray[8];
|
|
||||||
unsigned char ucarray[8];
|
|
||||||
} Jval;
|
|
||||||
|
|
||||||
extern Jval new_jval_i(int);
|
|
||||||
extern Jval new_jval_l(long);
|
|
||||||
extern Jval new_jval_f(float);
|
|
||||||
extern Jval new_jval_d(double);
|
|
||||||
extern Jval new_jval_v(void *);
|
|
||||||
extern Jval new_jval_s(char *);
|
|
||||||
extern Jval new_jval_c(char);
|
|
||||||
extern Jval new_jval_uc(unsigned char);
|
|
||||||
extern Jval new_jval_sh(short);
|
|
||||||
extern Jval new_jval_ush(unsigned short);
|
|
||||||
extern Jval new_jval_ui(unsigned int);
|
|
||||||
extern Jval new_jval_iarray(int, int);
|
|
||||||
extern Jval new_jval_farray(float, float);
|
|
||||||
extern Jval new_jval_carray_nt(char *); /* Carray is null terminated */
|
|
||||||
extern Jval new_jval_carray_nnt(char *); /* Carray is not null terminated */
|
|
||||||
/* For ucarray -- use carray, because it uses memcpy */
|
|
||||||
|
|
||||||
extern Jval JNULL;
|
|
||||||
|
|
||||||
extern int jval_i(Jval);
|
|
||||||
extern long jval_l(Jval);
|
|
||||||
extern float jval_f(Jval);
|
|
||||||
extern double jval_d(Jval);
|
|
||||||
extern void *jval_v(Jval);
|
|
||||||
extern char *jval_s(Jval);
|
|
||||||
extern char jval_c(Jval);
|
|
||||||
extern unsigned char jval_uc(Jval);
|
|
||||||
extern short jval_sh(Jval);
|
|
||||||
extern unsigned short jval_ush(Jval);
|
|
||||||
extern unsigned int jval_ui(Jval);
|
|
||||||
extern int *jval_iarray(Jval);
|
|
||||||
extern float *jval_farray(Jval);
|
|
||||||
extern char *jval_carray(Jval);
|
|
||||||
|
|
||||||
#endif
|
|
@ -5,14 +5,14 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int cmp(Jval a, Jval b)
|
static int cmp(const void *a, const void *b)
|
||||||
{
|
{
|
||||||
return strcmp(jval_v(a), jval_v(b));
|
return strcmp(a, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define INSERT(key, val) \
|
#define INSERT(key, val) \
|
||||||
jrb_insert_gen(tree, new_jval_v(key), new_jval_v(val), cmp)
|
jrb_insert_gen(tree, key, val, cmp)
|
||||||
|
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
@ -30,7 +30,7 @@ int main(void)
|
|||||||
INSERT("ff", "!");
|
INSERT("ff", "!");
|
||||||
|
|
||||||
jrb_traverse(p, tree)
|
jrb_traverse(p, tree)
|
||||||
printf("%s ", (char *) jval_v(p->val));
|
printf("%s ", (char *) jrb_val(p));
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user