1*86d7f5d3SJohn Marino /* $NetBSD: prop_array.h,v 1.13 2011/09/30 22:08:18 jym Exp $ */ 2*86d7f5d3SJohn Marino 3*86d7f5d3SJohn Marino /*- 4*86d7f5d3SJohn Marino * Copyright (c) 2006, 2009 The NetBSD Foundation, Inc. 5*86d7f5d3SJohn Marino * All rights reserved. 6*86d7f5d3SJohn Marino * 7*86d7f5d3SJohn Marino * This code is derived from software contributed to The NetBSD Foundation 8*86d7f5d3SJohn Marino * by Jason R. Thorpe. 9*86d7f5d3SJohn Marino * 10*86d7f5d3SJohn Marino * Redistribution and use in source and binary forms, with or without 11*86d7f5d3SJohn Marino * modification, are permitted provided that the following conditions 12*86d7f5d3SJohn Marino * are met: 13*86d7f5d3SJohn Marino * 1. Redistributions of source code must retain the above copyright 14*86d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer. 15*86d7f5d3SJohn Marino * 2. Redistributions in binary form must reproduce the above copyright 16*86d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer in the 17*86d7f5d3SJohn Marino * documentation and/or other materials provided with the distribution. 18*86d7f5d3SJohn Marino * 19*86d7f5d3SJohn Marino * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20*86d7f5d3SJohn Marino * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21*86d7f5d3SJohn Marino * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22*86d7f5d3SJohn Marino * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23*86d7f5d3SJohn Marino * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24*86d7f5d3SJohn Marino * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25*86d7f5d3SJohn Marino * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26*86d7f5d3SJohn Marino * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27*86d7f5d3SJohn Marino * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28*86d7f5d3SJohn Marino * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29*86d7f5d3SJohn Marino * POSSIBILITY OF SUCH DAMAGE. 30*86d7f5d3SJohn Marino */ 31*86d7f5d3SJohn Marino 32*86d7f5d3SJohn Marino #ifndef _PROPLIB_PROP_ARRAY_H_ 33*86d7f5d3SJohn Marino #define _PROPLIB_PROP_ARRAY_H_ 34*86d7f5d3SJohn Marino 35*86d7f5d3SJohn Marino #include <libprop/prop_object.h> 36*86d7f5d3SJohn Marino 37*86d7f5d3SJohn Marino typedef struct _prop_array *prop_array_t; 38*86d7f5d3SJohn Marino 39*86d7f5d3SJohn Marino __BEGIN_DECLS 40*86d7f5d3SJohn Marino prop_array_t prop_array_create(void); 41*86d7f5d3SJohn Marino prop_array_t prop_array_create_with_capacity(unsigned int); 42*86d7f5d3SJohn Marino 43*86d7f5d3SJohn Marino prop_array_t prop_array_copy(prop_array_t); 44*86d7f5d3SJohn Marino prop_array_t prop_array_copy_mutable(prop_array_t); 45*86d7f5d3SJohn Marino 46*86d7f5d3SJohn Marino unsigned int prop_array_capacity(prop_array_t); 47*86d7f5d3SJohn Marino unsigned int prop_array_count(prop_array_t); 48*86d7f5d3SJohn Marino bool prop_array_ensure_capacity(prop_array_t, unsigned int); 49*86d7f5d3SJohn Marino 50*86d7f5d3SJohn Marino void prop_array_make_immutable(prop_array_t); 51*86d7f5d3SJohn Marino bool prop_array_mutable(prop_array_t); 52*86d7f5d3SJohn Marino 53*86d7f5d3SJohn Marino prop_object_iterator_t prop_array_iterator(prop_array_t); 54*86d7f5d3SJohn Marino 55*86d7f5d3SJohn Marino prop_object_t prop_array_get(prop_array_t, unsigned int); 56*86d7f5d3SJohn Marino bool prop_array_set(prop_array_t, unsigned int, prop_object_t); 57*86d7f5d3SJohn Marino bool prop_array_add(prop_array_t, prop_object_t); 58*86d7f5d3SJohn Marino void prop_array_remove(prop_array_t, unsigned int); 59*86d7f5d3SJohn Marino 60*86d7f5d3SJohn Marino bool prop_array_equals(prop_array_t, prop_array_t); 61*86d7f5d3SJohn Marino 62*86d7f5d3SJohn Marino char * prop_array_externalize(prop_array_t); 63*86d7f5d3SJohn Marino prop_array_t prop_array_internalize(const char *); 64*86d7f5d3SJohn Marino 65*86d7f5d3SJohn Marino bool prop_array_externalize_to_file(prop_array_t, const char *); 66*86d7f5d3SJohn Marino prop_array_t prop_array_internalize_from_file(const char *); 67*86d7f5d3SJohn Marino 68*86d7f5d3SJohn Marino struct plistref; 69*86d7f5d3SJohn Marino 70*86d7f5d3SJohn Marino #if !defined(_KERNEL) && !defined(_STANDALONE) 71*86d7f5d3SJohn Marino bool prop_array_externalize_to_pref(prop_array_t, struct plistref *); 72*86d7f5d3SJohn Marino bool prop_array_internalize_from_pref(const struct plistref *, 73*86d7f5d3SJohn Marino prop_array_t *); 74*86d7f5d3SJohn Marino int prop_array_send_ioctl(prop_array_t, int, unsigned long); 75*86d7f5d3SJohn Marino int prop_array_recv_ioctl(int, unsigned long, prop_array_t *); 76*86d7f5d3SJohn Marino int prop_array_send_syscall(prop_array_t, struct plistref *); 77*86d7f5d3SJohn Marino int prop_array_recv_syscall(const struct plistref *, 78*86d7f5d3SJohn Marino prop_array_t *); 79*86d7f5d3SJohn Marino #elif defined(_KERNEL) 80*86d7f5d3SJohn Marino int prop_array_copyin(const struct plistref *, prop_array_t *); 81*86d7f5d3SJohn Marino int prop_array_copyout(struct plistref *, prop_array_t); 82*86d7f5d3SJohn Marino int prop_array_copyin_ioctl(const struct plistref *, const u_long, 83*86d7f5d3SJohn Marino prop_array_t *); 84*86d7f5d3SJohn Marino int prop_array_copyout_ioctl(struct plistref *, const u_long, 85*86d7f5d3SJohn Marino prop_array_t); 86*86d7f5d3SJohn Marino #endif 87*86d7f5d3SJohn Marino 88*86d7f5d3SJohn Marino /* 89*86d7f5d3SJohn Marino * Utility routines to make it more convenient to work with values 90*86d7f5d3SJohn Marino * stored in dictionaries. 91*86d7f5d3SJohn Marino */ 92*86d7f5d3SJohn Marino bool prop_array_get_bool(prop_array_t, unsigned int, 93*86d7f5d3SJohn Marino bool *); 94*86d7f5d3SJohn Marino bool prop_array_set_bool(prop_array_t, unsigned int, 95*86d7f5d3SJohn Marino bool); 96*86d7f5d3SJohn Marino 97*86d7f5d3SJohn Marino bool prop_array_get_int8(prop_array_t, unsigned int, 98*86d7f5d3SJohn Marino int8_t *); 99*86d7f5d3SJohn Marino bool prop_array_get_uint8(prop_array_t, unsigned int, 100*86d7f5d3SJohn Marino uint8_t *); 101*86d7f5d3SJohn Marino bool prop_array_set_int8(prop_array_t, unsigned int, 102*86d7f5d3SJohn Marino int8_t); 103*86d7f5d3SJohn Marino bool prop_array_set_uint8(prop_array_t, unsigned int, 104*86d7f5d3SJohn Marino uint8_t); 105*86d7f5d3SJohn Marino 106*86d7f5d3SJohn Marino bool prop_array_get_int16(prop_array_t, unsigned int, 107*86d7f5d3SJohn Marino int16_t *); 108*86d7f5d3SJohn Marino bool prop_array_get_uint16(prop_array_t, unsigned int, 109*86d7f5d3SJohn Marino uint16_t *); 110*86d7f5d3SJohn Marino bool prop_array_set_int16(prop_array_t, unsigned int, 111*86d7f5d3SJohn Marino int16_t); 112*86d7f5d3SJohn Marino bool prop_array_set_uint16(prop_array_t, unsigned int, 113*86d7f5d3SJohn Marino uint16_t); 114*86d7f5d3SJohn Marino 115*86d7f5d3SJohn Marino bool prop_array_get_int32(prop_array_t, unsigned int, 116*86d7f5d3SJohn Marino int32_t *); 117*86d7f5d3SJohn Marino bool prop_array_get_uint32(prop_array_t, unsigned int, 118*86d7f5d3SJohn Marino uint32_t *); 119*86d7f5d3SJohn Marino bool prop_array_set_int32(prop_array_t, unsigned int, 120*86d7f5d3SJohn Marino int32_t); 121*86d7f5d3SJohn Marino bool prop_array_set_uint32(prop_array_t, unsigned int, 122*86d7f5d3SJohn Marino uint32_t); 123*86d7f5d3SJohn Marino 124*86d7f5d3SJohn Marino bool prop_array_get_int64(prop_array_t, unsigned int, 125*86d7f5d3SJohn Marino int64_t *); 126*86d7f5d3SJohn Marino bool prop_array_get_uint64(prop_array_t, unsigned int, 127*86d7f5d3SJohn Marino uint64_t *); 128*86d7f5d3SJohn Marino bool prop_array_set_int64(prop_array_t, unsigned int, 129*86d7f5d3SJohn Marino int64_t); 130*86d7f5d3SJohn Marino bool prop_array_set_uint64(prop_array_t, unsigned int, 131*86d7f5d3SJohn Marino uint64_t); 132*86d7f5d3SJohn Marino 133*86d7f5d3SJohn Marino bool prop_array_add_int8(prop_array_t, int8_t); 134*86d7f5d3SJohn Marino bool prop_array_add_uint8(prop_array_t, uint8_t); 135*86d7f5d3SJohn Marino 136*86d7f5d3SJohn Marino bool prop_array_add_int16(prop_array_t, int16_t); 137*86d7f5d3SJohn Marino bool prop_array_add_uint16(prop_array_t, uint16_t); 138*86d7f5d3SJohn Marino 139*86d7f5d3SJohn Marino bool prop_array_add_int32(prop_array_t, int32_t); 140*86d7f5d3SJohn Marino bool prop_array_add_uint32(prop_array_t, uint32_t); 141*86d7f5d3SJohn Marino 142*86d7f5d3SJohn Marino bool prop_array_add_int64(prop_array_t, int64_t); 143*86d7f5d3SJohn Marino bool prop_array_add_uint64(prop_array_t, uint64_t); 144*86d7f5d3SJohn Marino 145*86d7f5d3SJohn Marino bool prop_array_get_cstring(prop_array_t, unsigned int, 146*86d7f5d3SJohn Marino char **); 147*86d7f5d3SJohn Marino bool prop_array_set_cstring(prop_array_t, unsigned int, 148*86d7f5d3SJohn Marino const char *); 149*86d7f5d3SJohn Marino 150*86d7f5d3SJohn Marino bool prop_array_get_cstring_nocopy(prop_array_t, 151*86d7f5d3SJohn Marino unsigned int, 152*86d7f5d3SJohn Marino const char **); 153*86d7f5d3SJohn Marino bool prop_array_set_cstring_nocopy(prop_array_t, 154*86d7f5d3SJohn Marino unsigned int, 155*86d7f5d3SJohn Marino const char *); 156*86d7f5d3SJohn Marino 157*86d7f5d3SJohn Marino bool prop_array_add_and_rel(prop_array_t, prop_object_t); 158*86d7f5d3SJohn Marino 159*86d7f5d3SJohn Marino __END_DECLS 160*86d7f5d3SJohn Marino 161*86d7f5d3SJohn Marino #endif /* _PROPLIB_PROP_ARRAY_H_ */ 162