1*0d5acd74SJohn Marino /* $FreeBSD: head/lib/libc/iconv/citrus_mapper_local.h 250938 2013-05-23 18:07:01Z ed $ */ 252347f71SHasso Tepper /* $NetBSD: citrus_mapper_local.h,v 1.2 2008/02/09 14:56:20 junyoung Exp $ */ 32180e8afSJoerg Sonnenberger 42180e8afSJoerg Sonnenberger /*- 52180e8afSJoerg Sonnenberger * Copyright (c)2003 Citrus Project, 62180e8afSJoerg Sonnenberger * All rights reserved. 72180e8afSJoerg Sonnenberger * 82180e8afSJoerg Sonnenberger * Redistribution and use in source and binary forms, with or without 92180e8afSJoerg Sonnenberger * modification, are permitted provided that the following conditions 102180e8afSJoerg Sonnenberger * are met: 112180e8afSJoerg Sonnenberger * 1. Redistributions of source code must retain the above copyright 122180e8afSJoerg Sonnenberger * notice, this list of conditions and the following disclaimer. 132180e8afSJoerg Sonnenberger * 2. Redistributions in binary form must reproduce the above copyright 142180e8afSJoerg Sonnenberger * notice, this list of conditions and the following disclaimer in the 152180e8afSJoerg Sonnenberger * documentation and/or other materials provided with the distribution. 162180e8afSJoerg Sonnenberger * 172180e8afSJoerg Sonnenberger * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 182180e8afSJoerg Sonnenberger * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 192180e8afSJoerg Sonnenberger * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 202180e8afSJoerg Sonnenberger * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 212180e8afSJoerg Sonnenberger * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 222180e8afSJoerg Sonnenberger * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 232180e8afSJoerg Sonnenberger * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 242180e8afSJoerg Sonnenberger * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 252180e8afSJoerg Sonnenberger * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 262180e8afSJoerg Sonnenberger * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 272180e8afSJoerg Sonnenberger * SUCH DAMAGE. 282180e8afSJoerg Sonnenberger */ 292180e8afSJoerg Sonnenberger 302180e8afSJoerg Sonnenberger #ifndef _CITRUS_MAPPER_LOCAL_H_ 312180e8afSJoerg Sonnenberger #define _CITRUS_MAPPER_LOCAL_H_ 322180e8afSJoerg Sonnenberger 332180e8afSJoerg Sonnenberger #define _CITRUS_MAPPER_GETOPS_FUNC_BASE(_n_) \ 34*0d5acd74SJohn Marino int _n_(struct _citrus_mapper_ops *) 352180e8afSJoerg Sonnenberger #define _CITRUS_MAPPER_GETOPS_FUNC(_n_) \ 362180e8afSJoerg Sonnenberger _CITRUS_MAPPER_GETOPS_FUNC_BASE(_citrus_##_n_##_mapper_getops) 372180e8afSJoerg Sonnenberger 382180e8afSJoerg Sonnenberger #define _CITRUS_MAPPER_DECLS(_m_) \ 392180e8afSJoerg Sonnenberger static int _citrus_##_m_##_mapper_init \ 402180e8afSJoerg Sonnenberger (struct _citrus_mapper_area *__restrict, \ 41*0d5acd74SJohn Marino struct _citrus_mapper * __restrict, \ 42*0d5acd74SJohn Marino const char * __restrict, const void * __restrict, \ 43*0d5acd74SJohn Marino size_t, struct _citrus_mapper_traits * __restrict, \ 44*0d5acd74SJohn Marino size_t); \ 45*0d5acd74SJohn Marino static void _citrus_##_m_##_mapper_uninit( \ 46*0d5acd74SJohn Marino struct _citrus_mapper *); \ 472180e8afSJoerg Sonnenberger static int _citrus_##_m_##_mapper_convert \ 482180e8afSJoerg Sonnenberger (struct _citrus_mapper * __restrict, \ 492180e8afSJoerg Sonnenberger _citrus_index_t * __restrict, _citrus_index_t, \ 502180e8afSJoerg Sonnenberger void * __restrict); \ 512180e8afSJoerg Sonnenberger static void _citrus_##_m_##_mapper_init_state \ 52*0d5acd74SJohn Marino (void); 532180e8afSJoerg Sonnenberger 542180e8afSJoerg Sonnenberger #define _CITRUS_MAPPER_DEF_OPS(_m_) \ 55*0d5acd74SJohn Marino extern struct _citrus_mapper_ops _citrus_##_m_##_mapper_ops; \ 562180e8afSJoerg Sonnenberger struct _citrus_mapper_ops _citrus_##_m_##_mapper_ops = { \ 572180e8afSJoerg Sonnenberger /* mo_init */ &_citrus_##_m_##_mapper_init, \ 582180e8afSJoerg Sonnenberger /* mo_uninit */ &_citrus_##_m_##_mapper_uninit, \ 592180e8afSJoerg Sonnenberger /* mo_convert */ &_citrus_##_m_##_mapper_convert, \ 602180e8afSJoerg Sonnenberger /* mo_init_state */ &_citrus_##_m_##_mapper_init_state \ 612180e8afSJoerg Sonnenberger } 622180e8afSJoerg Sonnenberger 632180e8afSJoerg Sonnenberger typedef _CITRUS_MAPPER_GETOPS_FUNC_BASE((*_citrus_mapper_getops_t)); 642180e8afSJoerg Sonnenberger typedef int (*_citrus_mapper_init_t)( 652180e8afSJoerg Sonnenberger struct _citrus_mapper_area *__restrict, 662180e8afSJoerg Sonnenberger struct _citrus_mapper *__restrict, const char *__restrict, 672180e8afSJoerg Sonnenberger const void *__restrict, size_t, 682180e8afSJoerg Sonnenberger struct _citrus_mapper_traits * __restrict, size_t); 692180e8afSJoerg Sonnenberger typedef void (*_citrus_mapper_uninit_t)(struct _citrus_mapper *); 702180e8afSJoerg Sonnenberger typedef int (*_citrus_mapper_convert_t)(struct _citrus_mapper * __restrict, 71*0d5acd74SJohn Marino _citrus_index_t * __restrict, _citrus_index_t, void * __restrict); 72*0d5acd74SJohn Marino typedef void (*_citrus_mapper_init_state_t)(void); 732180e8afSJoerg Sonnenberger 742180e8afSJoerg Sonnenberger struct _citrus_mapper_ops { 752180e8afSJoerg Sonnenberger _citrus_mapper_init_t mo_init; 762180e8afSJoerg Sonnenberger _citrus_mapper_uninit_t mo_uninit; 772180e8afSJoerg Sonnenberger _citrus_mapper_convert_t mo_convert; 782180e8afSJoerg Sonnenberger _citrus_mapper_init_state_t mo_init_state; 792180e8afSJoerg Sonnenberger }; 802180e8afSJoerg Sonnenberger 812180e8afSJoerg Sonnenberger struct _citrus_mapper_traits { 822180e8afSJoerg Sonnenberger /* version 0x00000001 */ 832180e8afSJoerg Sonnenberger size_t mt_state_size; 842180e8afSJoerg Sonnenberger size_t mt_src_max; 852180e8afSJoerg Sonnenberger size_t mt_dst_max; 862180e8afSJoerg Sonnenberger }; 872180e8afSJoerg Sonnenberger 882180e8afSJoerg Sonnenberger struct _citrus_mapper { 892180e8afSJoerg Sonnenberger struct _citrus_mapper_ops *cm_ops; 902180e8afSJoerg Sonnenberger void *cm_closure; 912180e8afSJoerg Sonnenberger _citrus_module_t cm_module; 922180e8afSJoerg Sonnenberger struct _citrus_mapper_traits *cm_traits; 932180e8afSJoerg Sonnenberger _CITRUS_HASH_ENTRY(_citrus_mapper) cm_entry; 942180e8afSJoerg Sonnenberger int cm_refcount; 952180e8afSJoerg Sonnenberger char *cm_key; 962180e8afSJoerg Sonnenberger }; 972180e8afSJoerg Sonnenberger #endif 98