Add `SCM_INTERNAL' macro, use it.
[bpt/guile.git] / libguile / weaks.h
CommitLineData
0f2d19dd
JB
1/* classes: h_files */
2
592996c9
DH
3#ifndef SCM_WEAKS_H
4#define SCM_WEAKS_H
0527e687 5
102dbb6f 6/* Copyright (C) 1995,1996,2000,2001, 2003, 2006, 2008 Free Software Foundation, Inc.
0527e687 7 *
73be1d9e
MV
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
0527e687 12 *
73be1d9e 13 * This library is distributed in the hope that it will be useful,
0f2d19dd 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
73be1d9e
MV
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
0527e687 17 *
73be1d9e
MV
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
92205699 20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
73be1d9e 21 */
d3a6bc94 22
0f2d19dd
JB
23\f
24
b4309c3c 25#include "libguile/__scm.h"
0f2d19dd
JB
26
27\f
28
c35738c1
MD
29#define SCM_WVECTF_WEAK_KEY 1
30#define SCM_WVECTF_WEAK_VALUE 2
c35738c1 31
06c1d900
MV
32#define SCM_WVECT_WEAK_KEY_P(x) (SCM_I_WVECT_EXTRA(x) & SCM_WVECTF_WEAK_KEY)
33#define SCM_WVECT_WEAK_VALUE_P(x) (SCM_I_WVECT_EXTRA(x) & SCM_WVECTF_WEAK_VALUE)
0f2d19dd 34
06c1d900
MV
35/* The DELTA field is used by the abstract hash tables. During GC,
36 this field will be set to the number of items that have been
37 dropped. The abstract hash table will then use it to update its
38 item count. DELTA is unsigned.
39*/
40
41#define SCM_I_WVECT_DELTA(x) (SCM_I_WVECT_EXTRA(x) >> 3)
42#define SCM_I_SET_WVECT_DELTA(x,n) (SCM_I_SET_WVECT_EXTRA \
43 ((x), ((SCM_I_WVECT_EXTRA (x) & 7) \
44 | ((n) << 3))))
45
46#define SCM_I_WVECT_TYPE(x) (SCM_I_WVECT_EXTRA(x) & 7)
47#define SCM_I_SET_WVECT_TYPE(x,t) (SCM_I_SET_WVECT_EXTRA \
48 ((x), (SCM_I_WVECT_EXTRA (x) & ~7) | (t)))
49#define SCM_IS_WHVEC(X) (SCM_I_WVECT_TYPE (X) == 1)
50#define SCM_IS_WHVEC_V(X) (SCM_I_WVECT_TYPE (X) == 2)
51#define SCM_IS_WHVEC_B(X) (SCM_I_WVECT_TYPE (X) == 3)
52#define SCM_IS_WHVEC_ANY(X) (SCM_I_WVECT_TYPE (X) != 0)
56a68067 53
0f2d19dd 54\f
0f2d19dd 55
33b001fd
MV
56SCM_API SCM scm_make_weak_vector (SCM k, SCM fill);
57SCM_API SCM scm_weak_vector (SCM l);
58SCM_API SCM scm_weak_vector_p (SCM x);
c35738c1
MD
59SCM_API SCM scm_make_weak_key_alist_vector (SCM k);
60SCM_API SCM scm_make_weak_value_alist_vector (SCM k);
61SCM_API SCM scm_make_doubly_weak_alist_vector (SCM k);
62SCM_API SCM scm_weak_key_alist_vector_p (SCM x);
63SCM_API SCM scm_weak_value_alist_vector_p (SCM x);
64SCM_API SCM scm_doubly_weak_alist_vector_p (SCM x);
102dbb6f
LC
65SCM_INTERNAL SCM scm_init_weaks_builtins (void);
66SCM_INTERNAL void scm_init_weaks (void);
0f2d19dd 67
102dbb6f
LC
68SCM_INTERNAL void scm_i_init_weak_vectors_for_gc (void);
69SCM_INTERNAL void scm_i_mark_weak_vector (SCM w);
70SCM_INTERNAL int scm_i_mark_weak_vectors_non_weaks (void);
71SCM_INTERNAL void scm_i_remove_weaks_from_weak_vectors (void);
06c1d900 72
5dbc6c06 73
592996c9 74#endif /* SCM_WEAKS_H */
89e00824
ML
75
76/*
77 Local Variables:
78 c-file-style: "gnu"
79 End:
80*/