Graphviz
14.1.2~dev.20260118.1035
Loading...
Searching...
No Matches
dtdisc.c
Go to the documentation of this file.
1
#include "config.h"
2
3
#include <
cdt/dthdr.h
>
4
#include <stddef.h>
5
6
/* Change discipline.
7
** dt : dictionary
8
** disc : discipline
9
**
10
** Written by Kiem-Phong Vo (5/26/96)
11
*/
12
13
Dtdisc_t
*
dtdisc
(
Dt_t
*dt,
Dtdisc_t
*
disc
) {
14
Dtsearch_f
searchf;
15
Dtlink_t
*r, *t;
16
char
* k;
17
Dtdisc_t
* old;
18
19
if
(!(old = dt->
disc
) )
/* initialization call from dtopen() */
20
{ dt->
disc
=
disc
;
21
return
disc
;
22
}
23
24
if
(!
disc
)
/* only want to know current discipline */
25
return
old;
26
27
searchf = dt->
meth
->
searchf
;
28
29
UNFLATTEN
(dt);
30
31
dt->
disc
=
disc
;
32
33
r =
dtflatten
(dt);
34
dt->
data
.
type
&= ~DT_FLATTEN;
35
dt->
data
.
here
=
NULL
;
36
dt->
data
.
size
= 0;
37
38
if
(dt->
data
.
type
&
DT_SET
)
39
{
Dtlink_t
**
s
, **ends;
40
ends = (
s
= dt->
data
.htab) + dt->
data
.
ntab
;
41
while
(
s
< ends)
42
*
s
++ =
NULL
;
43
}
44
45
/* reinsert them */
46
while
(r)
47
{ t = r->
right
;
48
k =
_DTOBJ
(r,
disc
->
link
);
49
k =
_DTKEY
(k,
disc
->
key
,
disc
->
size
);
50
r->hash =
dtstrhash
(k,
disc
->
size
);
51
(void)searchf(dt, r,
DT_RENEW
);
52
r = t;
53
}
54
55
return
old;
56
}
_DTKEY
#define _DTKEY(o, ky, sz)
Definition
cdt.h:169
DT_SET
#define DT_SET
Definition
cdt.h:119
dtflatten
CDT_API Dtlink_t * dtflatten(Dt_t *)
Definition
dtflatten.c:12
dtstrhash
CDT_API unsigned int dtstrhash(void *, int)
Definition
dtstrhash.c:23
DT_RENEW
#define DT_RENEW
Definition
cdt.h:130
_DTOBJ
#define _DTOBJ(e, lk)
Definition
cdt.h:167
Dtsearch_f
void *(* Dtsearch_f)(Dt_t *, void *, int)
Definition
cdt.h:45
dtdisc
Dtdisc_t * dtdisc(Dt_t *dt, Dtdisc_t *disc)
Definition
dtdisc.c:13
dthdr.h
UNFLATTEN
#define UNFLATTEN(dt)
Definition
dthdr.h:27
disc
static Dtdisc_t disc
Definition
exparse.y:209
NULL
node NULL
Definition
grammar.y:181
Dtdata_t::size
int size
Definition
cdt.h:79
Dtdata_t::here
Dtlink_t * here
Definition
cdt.h:73
Dtdata_t::type
int type
Definition
cdt.h:72
Dtdata_t::ntab
int ntab
Definition
cdt.h:78
Dtmethod_t::searchf
Dtsearch_f searchf
Definition
cdt.h:66
dt_s_
Definition
cdt.h:98
dt_s_::meth
Dtmethod_t * meth
Definition
cdt.h:102
dt_s_::data
Dtdata_t data
sharable data
Definition
cdt.h:101
dt_s_::disc
Dtdisc_t * disc
Definition
cdt.h:100
dtdisc_s_
Definition
cdt.h:84
dtdisc_s_::key
int key
Definition
cdt.h:85
dtdisc_s_::size
int size
Definition
cdt.h:86
dtdisc_s_::link
int link
Definition
cdt.h:87
dtlink_s_
Definition
cdt.h:50
dtlink_s_::right
Dtlink_t * right
Definition
cdt.h:51
s
Definition
grammar.c:90
lib
cdt
dtdisc.c
Generated by
1.9.8