My Project
Loading...
Searching...
No Matches
htable.h File Reference
#include "kernel/mod2.h"
#include "Singular/subexpr.h"

Go to the source code of this file.

Data Structures

struct  telem
struct  stablerec

Macros

#define TABLE_MAX   1000

Functions

stablerect_createTable (int s)
void t_destroyTable (stablerec *t)
stablereccopyTable (stablerec *t)
char * stringTable (stablerec *t)
void htable_Print (stablerec *d)
telem t_findTable (stablerec *t, const char *s)
 find the entry to key s
leftv t_findTabelVal (stablerec *t, const char *s)
 find the data to key s
void t_addTable (stablerec *t, char *s, leftv v)
 add a new entry (key s, data v) to table t

Data Structure Documentation

◆ stelem

struct stelem

Definition at line 14 of file htable.h.

Data Fields
uint32_t hash
char * key
telem next
sleftv val

◆ stablerec

struct stablerec

Definition at line 22 of file htable.h.

Data Fields
int max
int ref
telem * t

Macro Definition Documentation

◆ TABLE_MAX

#define TABLE_MAX   1000

Definition at line 28 of file htable.h.

Function Documentation

◆ copyTable()

stablerec * copyTable ( stablerec * t)

Definition at line 42 of file htable.cc.

43{
44 t->ref++;
45 return t;
46}
int ref
Definition htable.h:26

◆ htable_Print()

void htable_Print ( stablerec * d)

Definition at line 107 of file htable.cc.

108{
109 stablerec* lt=(stablerec*)d;
110 char* s=stringTable(lt);
111 PrintS(s);
112 omFree(s);
113 int cnt=0;int cnt2=0;
114 for(int i=0;i<lt->max;i++)
115 {
116 if (lt->t[i]!=NULL)
117 {
118 cnt++;
119 telem p=lt->t[i];
120 while(p!=NULL) { cnt2++;p=p->next;}
121 }
122 }
123 Print("%d columns, %d entries, size:%d",cnt,cnt2,lt->max);
124}
int i
Definition cfEzgcd.cc:132
int p
Definition cfModGcd.cc:4086
#define Print
Definition emacs.cc:80
const CanonicalForm int s
Definition facAbsFact.cc:51
char * stringTable(stablerec *t)
Definition htable.cc:48
telem * t
Definition htable.h:24
int max
Definition htable.h:25
#define omFree(addr)
#define NULL
Definition omList.c:12
void PrintS(const char *s)
Definition reporter.cc:288

◆ stringTable()

char * stringTable ( stablerec * t)

Definition at line 48 of file htable.cc.

49{
50 StringSetS("table:\n");
51 char *s;
52 for(int i=t->max-1;i>=0;i--)
53 {
54 telem p=t->t[i];
55 while(p!=NULL)
56 {
57 StringAppendS(p->key);
58 StringAppendS(" -> ");
59 s=p->val.String();
61 omFree(s);
62 StringAppendS("\n");
63 p=p->next;
64 }
65 }
66 return StringEndS();
67}
void StringSetS(const char *st)
Definition reporter.cc:128
void StringAppendS(const char *st)
Definition reporter.cc:107
char * StringEndS()
Definition reporter.cc:151

◆ t_addTable()

void t_addTable ( stablerec * t,
char * s,
leftv v )

add a new entry (key s, data v) to table t

add a new entry (key s, data v) to table t

Definition at line 92 of file htable.cc.

93{
94 uint32_t h=hashlittle(s,strlen(s));
95 telem p=(telem)omAlloc(sizeof(*p));
96 p->next=NULL;
97 p->key=s;
98 p->val.Init();
99 p->val.rtyp=v->Typ();
100 p->val.data=v->CopyD();
101 p->hash=h;
102 h=h%t->max;
103 p->next=t->t[h];
104 t->t[h]=p;
105}
const Variable & v
< [in] a sqrfree bivariate poly
Definition facBivar.h:39
uint32_t hashlittle(const void *key, size_t length)
Definition hash_me.c:68
STATIC_VAR Poly * h
Definition janet.cc:971
#define omAlloc(size)

◆ t_createTable()

stablerec * t_createTable ( int s)

Definition at line 11 of file htable.cc.

12{
14 t->max=s;
15 t->t=(telem*)omAlloc0(s*sizeof(telem));
16 t->ref=1;
17 return t;
18}
#define omAlloc0(size)

◆ t_destroyTable()

void t_destroyTable ( stablerec * t)

Definition at line 20 of file htable.cc.

21{
22 t->ref--;
23 if (t->ref<=0)
24 {
25 for(int i=t->max-1;i>=0;i--)
26 {
27 telem p=t->t[i];
28 while(p!=NULL)
29 {
30 omFree(p->key);
31 p->val.CleanUp();
32 telem pp=p;
33 p=p->next;
34 omFreeSize(pp,sizeof(stelem));
35 }
36 }
37 omFreeSize(t->t,t->max*sizeof(telem));
38 omFreeSize(t,sizeof(stablerec));
39 }
40}
CanonicalForm FACTORY_PUBLIC pp(const CanonicalForm &)
CanonicalForm pp ( const CanonicalForm & f ).
Definition cf_gcd.cc:676
#define omFreeSize(addr, size)

◆ t_findTabelVal()

leftv t_findTabelVal ( stablerec * t,
const char * s )

find the data to key s

Definition at line 84 of file htable.cc.

85{
86 telem p=t_findTable(t,s);
87 if (p==NULL) return NULL;
88 return &(p->val);
89}
telem t_findTable(stablerec *t, const char *s)
find the entry to key s
Definition htable.cc:70

◆ t_findTable()

telem t_findTable ( stablerec * t,
const char * s )

find the entry to key s

Definition at line 70 of file htable.cc.

71{
72 uint32_t h=hashlittle(s,strlen(s));
73 h=h%t->max;
74 telem p=t->t[h];
75 while(p!=NULL)
76 {
77 if (strcmp(s,p->key)==0) return p;
78 p=p->next;
79 }
80 return NULL;
81}