1/*	$NetBSD: heimbasepriv.h,v 1.2 2017/01/28 21:31:45 christos Exp $	*/
2
3/*
4 * Copyright (c) 2010 Kungliga Tekniska H��gskolan
5 * (Royal Institute of Technology, Stockholm, Sweden).
6 * All rights reserved.
7 *
8 * Portions Copyright (c) 2010 Apple Inc. All rights reserved.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 *
14 * 1. Redistributions of source code must retain the above copyright
15 *    notice, this list of conditions and the following disclaimer.
16 *
17 * 2. Redistributions in binary form must reproduce the above copyright
18 *    notice, this list of conditions and the following disclaimer in the
19 *    documentation and/or other materials provided with the distribution.
20 *
21 * 3. Neither the name of the Institute nor the names of its contributors
22 *    may be used to endorse or promote products derived from this software
23 *    without specific prior written permission.
24 *
25 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
26 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28 * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
31 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
34 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35 * SUCH DAMAGE.
36 */
37
38#if defined(HEIM_BASE_MAINTAINER) && defined(ENABLE_PTHREAD_SUPPORT)
39#define HEIM_WIN32_TLS
40#elif defined(WIN32)
41#define HEIM_WIN32_TLS
42#endif
43
44typedef void (*heim_type_init)(void *);
45typedef heim_object_t (*heim_type_copy)(void *);
46typedef int (*heim_type_cmp)(void *, void *);
47typedef unsigned long (*heim_type_hash)(void *);
48typedef heim_string_t (*heim_type_description)(void *);
49
50typedef struct heim_type_data *heim_type_t;
51
52enum {
53    HEIM_TID_NUMBER = 0,
54    HEIM_TID_NULL = 1,
55    HEIM_TID_BOOL = 2,
56    HEIM_TID_TAGGED_UNUSED2 = 3, /* reserved for tagged object types */
57    HEIM_TID_TAGGED_UNUSED3 = 4, /* reserved for tagged object types */
58    HEIM_TID_TAGGED_UNUSED4 = 5, /* reserved for tagged object types */
59    HEIM_TID_TAGGED_UNUSED5 = 6, /* reserved for tagged object types */
60    HEIM_TID_TAGGED_UNUSED6 = 7, /* reserved for tagged object types */
61    HEIM_TID_MEMORY = 128,
62    HEIM_TID_ARRAY = 129,
63    HEIM_TID_DICT = 130,
64    HEIM_TID_STRING = 131,
65    HEIM_TID_AUTORELEASE = 132,
66    HEIM_TID_ERROR = 133,
67    HEIM_TID_DATA = 134,
68    HEIM_TID_DB = 135,
69    HEIM_TID_USER = 255
70
71};
72
73struct heim_type_data {
74    heim_tid_t tid;
75    const char *name;
76    heim_type_init init;
77    heim_type_dealloc dealloc;
78    heim_type_copy copy;
79    heim_type_cmp cmp;
80    heim_type_hash hash;
81    heim_type_description desc;
82};
83
84heim_type_t _heim_get_isa(heim_object_t);
85
86heim_type_t
87_heim_create_type(const char *name,
88		  heim_type_init init,
89		  heim_type_dealloc dealloc,
90		  heim_type_copy copy,
91		  heim_type_cmp cmp,
92		  heim_type_hash hash,
93		  heim_type_description desc);
94
95heim_object_t
96_heim_alloc_object(heim_type_t type, size_t size);
97
98void *
99_heim_get_isaextra(heim_object_t o, size_t idx);
100
101heim_tid_t
102_heim_type_get_tid(heim_type_t type);
103
104void
105_heim_make_permanent(heim_object_t ptr);
106
107heim_data_t
108_heim_db_get_value(heim_db_t, heim_string_t, heim_data_t, heim_error_t *);
109
110
111/* tagged tid */
112extern struct heim_type_data _heim_null_object;
113extern struct heim_type_data _heim_bool_object;
114extern struct heim_type_data _heim_number_object;
115extern struct heim_type_data _heim_string_object;
116