/[guile]/guile/guile-core/libguile/pairs.c
ViewVC logotype

Diff of /guile/guile-core/libguile/pairs.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.32 by mvo, Sat Apr 5 19:10:22 2003 UTC revision 1.33 by dirk, Sun Jun 1 13:58:42 2003 UTC
# Line 106  SCM_DEFINE (scm_set_cdr_x, "set-cdr!", 2 Line 106  SCM_DEFINE (scm_set_cdr_x, "set-cdr!", 2
106    
107    
108    
109  static const char * cxrs[] =  /* Every cxr-pattern is made up of pairs of bits, starting with the two least
110     * significant bits.  If in a pair of bits the least significant of the two
111     * bits is 0, this means CDR, otherwise CAR.  The most significant bits of the
112     * two bits is only needed to indicate when cxr-ing is ready.  This is the
113     * case, when all remaining pairs of bits equal 00.  */
114    
115    typedef struct {
116      const char *name;
117      unsigned char pattern;
118    } t_cxr;
119    
120    static const t_cxr cxrs[] =
121  {  {
122    "car",    {"cdr",    0x02}, /* 00000010 */
123    "cdr",    {"car",    0x03}, /* 00000011 */
124    "caar",    {"cddr",   0x0a}, /* 00001010 */
125    "cadr",    {"cdar",   0x0b}, /* 00001011 */
126    "cdar",    {"cadr",   0x0e}, /* 00001110 */
127    "cddr",    {"caar",   0x0f}, /* 00001111 */
128    "caaar",    {"cdddr",  0x2a}, /* 00101010 */
129    "caadr",    {"cddar",  0x2b}, /* 00101011 */
130    "cadar",    {"cdadr",  0x2e}, /* 00101110 */
131    "caddr",    {"cdaar",  0x2f}, /* 00101111 */
132    "cdaar",    {"caddr",  0x3a}, /* 00111010 */
133    "cdadr",    {"cadar",  0x3b}, /* 00111011 */
134    "cddar",    {"caadr",  0x3e}, /* 00111110 */
135    "cdddr",    {"caaar",  0x3f}, /* 00111111 */
136    "caaaar",    {"cddddr", 0xaa}, /* 10101010 */
137    "caaadr",    {"cdddar", 0xab}, /* 10101011 */
138    "caadar",    {"cddadr", 0xae}, /* 10101110 */
139    "caaddr",    {"cddaar", 0xaf}, /* 10101111 */
140    "cadaar",    {"cdaddr", 0xba}, /* 10111010 */
141    "cadadr",    {"cdadar", 0xbb}, /* 10111011 */
142    "caddar",    {"cdaadr", 0xbe}, /* 10111110 */
143    "cadddr",    {"cdaaar", 0xbf}, /* 10111111 */
144    "cdaaar",    {"cadddr", 0xea}, /* 11101010 */
145    "cdaadr",    {"caddar", 0xeb}, /* 11101011 */
146    "cdadar",    {"cadadr", 0xee}, /* 11101110 */
147    "cdaddr",    {"cadaar", 0xef}, /* 11101111 */
148    "cddaar",    {"caaddr", 0xfa}, /* 11111010 */
149    "cddadr",    {"caadar", 0xfb}, /* 11111011 */
150    "cdddar",    {"caaadr", 0xfe}, /* 11111110 */
151    "cddddr",    {"caaaar", 0xff}, /* 11111111 */
152    0    {0, 0}
153  };  };
154    
155    
# Line 148  scm_init_pairs () Line 159  scm_init_pairs ()
159  {  {
160    unsigned int subnr = 0;    unsigned int subnr = 0;
161    
162    for (subnr = 0; cxrs [subnr]; subnr++)    for (subnr = 0; cxrs[subnr].name; subnr++)
163      scm_c_define_subr (cxrs [subnr], scm_tc7_cxr, NULL);      {
164          SCM (*pattern) () = (SCM (*) ()) (scm_t_bits) cxrs[subnr].pattern;
165          scm_c_define_subr (cxrs[subnr].name, scm_tc7_cxr, pattern);
166        }
167    
168  #include "libguile/pairs.x"  #include "libguile/pairs.x"
169  }  }

Legend:
Removed from v.1.32  
changed lines
  Added in v.1.33

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26