2 * Copyright (C) 1995-2005, Index Data ApS
4 * Permission to use, copy, modify, distribute, and sell this software and
5 * its documentation, in whole or in part, for any purpose, is hereby granted,
8 * 1. This copyright and permission notice appear in all copies of the
9 * software and its documentation. Notices of copyright or attribution
10 * which appear at the beginning of any file must remain unchanged.
12 * 2. The name of Index Data or the individual authors may not be used to
13 * endorse or promote products derived from this software without specific
14 * prior written permission.
16 * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
17 * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
18 * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
19 * IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
20 * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
21 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
22 * NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
23 * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
26 * $Id: odr-priv.h,v 1.6 2005-06-25 15:46:04 adam Exp $
31 * \brief Internal ODR definitions
39 #include <yaz/yaz-util.h>
41 struct Odr_ber_tag { /* used to be statics in ber_tag... */
48 #define odr_max(o) ((o)->size - ((o)->bp - (o)->buf))
49 #define odr_offset(o) ((o)->bp - (o)->buf)
51 typedef struct odr_constack
53 const unsigned char *base; /* starting point of data */
55 int len; /* length of data, if known, else -1
57 const unsigned char *lenb; /* where to encode length */
59 int lenlen; /* length of length-field */
63 /* stack for constructed types */
64 #define ODR_MAX_STACK 50
65 int stackp; /* top of stack (-1 == initial state) */
66 odr_constack stack[ODR_MAX_STACK];
67 const char *stack_names[1 + ODR_MAX_STACK];
69 struct Odr_ber_tag odr_ber_tag;
70 yaz_iconv_t iconv_handle;
73 void (*stream_write)(ODR o, void *handle, int type,
74 const char *buf, int len);
75 void (*stream_close)(void *handle);
79 * write a single character at the current position - grow buffer if
81 * (no, we're not usually this anal about our macros, but this baby is
82 * next to unreadable without some indentation :)
84 #define odr_putc(o, c) \
87 (o)->pos < (o)->size ? \
89 (o)->buf[(o)->pos++] = (c), \
93 odr_grow_block((o), 1) == 0 ? \
95 (o)->buf[(o)->pos++] = (c), \
99 (o)->error = OSPACE, \
105 (o)->pos > (o)->top ? \
107 (o)->top = (o)->pos, \
119 * indent-tabs-mode: nil
121 * vim: shiftwidth=4 tabstop=8 expandtab