xref: /dragonfly/lib/libc/citrus/citrus_mapper.h (revision 0d5acd74)
1*0d5acd74SJohn Marino /* $FreeBSD: head/lib/libc/iconv/citrus_mapper.h 219019 2011-02-25 00:04:39Z gabor $ */
2*0d5acd74SJohn Marino /* $NetBSD: citrus_mapper.h,v 1.3 2003/07/12 15:39:19 tshiozak 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_H_
312180e8afSJoerg Sonnenberger #define _CITRUS_MAPPER_H_
322180e8afSJoerg Sonnenberger 
332180e8afSJoerg Sonnenberger struct _citrus_mapper_area;
342180e8afSJoerg Sonnenberger struct _citrus_mapper;
352180e8afSJoerg Sonnenberger struct _citrus_mapper_ops;
362180e8afSJoerg Sonnenberger struct _citrus_mapper_traits;
372180e8afSJoerg Sonnenberger 
382180e8afSJoerg Sonnenberger __BEGIN_DECLS
392180e8afSJoerg Sonnenberger int	 _citrus_mapper_create_area(
402180e8afSJoerg Sonnenberger 	    struct _citrus_mapper_area *__restrict *__restrict,
412180e8afSJoerg Sonnenberger 	    const char *__restrict);
422180e8afSJoerg Sonnenberger int	 _citrus_mapper_open(struct _citrus_mapper_area *__restrict,
432180e8afSJoerg Sonnenberger 	    struct _citrus_mapper *__restrict *__restrict,
442180e8afSJoerg Sonnenberger 	    const char *__restrict);
452180e8afSJoerg Sonnenberger int	 _citrus_mapper_open_direct(
462180e8afSJoerg Sonnenberger 	    struct _citrus_mapper_area *__restrict,
472180e8afSJoerg Sonnenberger 	    struct _citrus_mapper *__restrict *__restrict,
482180e8afSJoerg Sonnenberger 	    const char *__restrict, const char *__restrict);
492180e8afSJoerg Sonnenberger void	 _citrus_mapper_close(struct _citrus_mapper *);
502180e8afSJoerg Sonnenberger void	 _citrus_mapper_set_persistent(struct _citrus_mapper * __restrict);
512180e8afSJoerg Sonnenberger __END_DECLS
522180e8afSJoerg Sonnenberger 
532180e8afSJoerg Sonnenberger #include "citrus_mapper_local.h"
542180e8afSJoerg Sonnenberger 
552180e8afSJoerg Sonnenberger /* return values of _citrus_mapper_convert */
562180e8afSJoerg Sonnenberger #define _CITRUS_MAPPER_CONVERT_SUCCESS		(0)
572180e8afSJoerg Sonnenberger #define _CITRUS_MAPPER_CONVERT_NONIDENTICAL	(1)
582180e8afSJoerg Sonnenberger #define _CITRUS_MAPPER_CONVERT_SRC_MORE		(2)
592180e8afSJoerg Sonnenberger #define _CITRUS_MAPPER_CONVERT_DST_MORE		(3)
602180e8afSJoerg Sonnenberger #define _CITRUS_MAPPER_CONVERT_ILSEQ		(4)
612180e8afSJoerg Sonnenberger #define _CITRUS_MAPPER_CONVERT_FATAL		(5)
622180e8afSJoerg Sonnenberger 
632180e8afSJoerg Sonnenberger /*
642180e8afSJoerg Sonnenberger  * _citrus_mapper_convert:
652180e8afSJoerg Sonnenberger  *	convert an index.
662180e8afSJoerg Sonnenberger  *	- if the converter supports M:1 converter, the function may return
672180e8afSJoerg Sonnenberger  *	  _CITRUS_MAPPER_CONVERT_SRC_MORE and the storage pointed by dst
682180e8afSJoerg Sonnenberger  *	  may be unchanged in this case, although the internal status of
692180e8afSJoerg Sonnenberger  *	  the mapper is affected.
702180e8afSJoerg Sonnenberger  *	- if the converter supports 1:N converter, the function may return
712180e8afSJoerg Sonnenberger  *	  _CITRUS_MAPPER_CONVERT_DST_MORE. In this case, the contiguous
722180e8afSJoerg Sonnenberger  *	  call of this function ignores src and changes the storage pointed
732180e8afSJoerg Sonnenberger  *	  by dst.
742180e8afSJoerg Sonnenberger  *	- if the converter supports M:N converter, the function may behave
752180e8afSJoerg Sonnenberger  *	  the combination of the above.
762180e8afSJoerg Sonnenberger  *
772180e8afSJoerg Sonnenberger  */
782180e8afSJoerg Sonnenberger static __inline int
_citrus_mapper_convert(struct _citrus_mapper * __restrict cm,_citrus_index_t * __restrict dst,_citrus_index_t src,void * __restrict ps)792180e8afSJoerg Sonnenberger _citrus_mapper_convert(struct _citrus_mapper * __restrict cm,
80*0d5acd74SJohn Marino     _citrus_index_t * __restrict dst, _citrus_index_t src,
812180e8afSJoerg Sonnenberger     void * __restrict ps)
822180e8afSJoerg Sonnenberger {
832180e8afSJoerg Sonnenberger 
84*0d5acd74SJohn Marino 	return ((*cm->cm_ops->mo_convert)(cm, dst, src, ps));
852180e8afSJoerg Sonnenberger }
862180e8afSJoerg Sonnenberger 
872180e8afSJoerg Sonnenberger /*
882180e8afSJoerg Sonnenberger  * _citrus_mapper_init_state:
892180e8afSJoerg Sonnenberger  *	initialize the state.
902180e8afSJoerg Sonnenberger  */
912180e8afSJoerg Sonnenberger static __inline void
_citrus_mapper_init_state(struct _citrus_mapper * __restrict cm)92*0d5acd74SJohn Marino _citrus_mapper_init_state(struct _citrus_mapper * __restrict cm)
932180e8afSJoerg Sonnenberger {
942180e8afSJoerg Sonnenberger 
95*0d5acd74SJohn Marino 	(*cm->cm_ops->mo_init_state)();
962180e8afSJoerg Sonnenberger }
972180e8afSJoerg Sonnenberger 
982180e8afSJoerg Sonnenberger /*
992180e8afSJoerg Sonnenberger  * _citrus_mapper_get_state_size:
1002180e8afSJoerg Sonnenberger  *	get the size of state storage.
1012180e8afSJoerg Sonnenberger  */
1022180e8afSJoerg Sonnenberger static __inline size_t
_citrus_mapper_get_state_size(struct _citrus_mapper * __restrict cm)1032180e8afSJoerg Sonnenberger _citrus_mapper_get_state_size(struct _citrus_mapper * __restrict cm)
1042180e8afSJoerg Sonnenberger {
1052180e8afSJoerg Sonnenberger 
106*0d5acd74SJohn Marino 	return (cm->cm_traits->mt_state_size);
1072180e8afSJoerg Sonnenberger }
1082180e8afSJoerg Sonnenberger 
1092180e8afSJoerg Sonnenberger /*
1102180e8afSJoerg Sonnenberger  * _citrus_mapper_get_src_max:
1112180e8afSJoerg Sonnenberger  *	get the maximum number of suspended sources.
1122180e8afSJoerg Sonnenberger  */
1132180e8afSJoerg Sonnenberger static __inline size_t
_citrus_mapper_get_src_max(struct _citrus_mapper * __restrict cm)1142180e8afSJoerg Sonnenberger _citrus_mapper_get_src_max(struct _citrus_mapper * __restrict cm)
1152180e8afSJoerg Sonnenberger {
1162180e8afSJoerg Sonnenberger 
117*0d5acd74SJohn Marino 	return (cm->cm_traits->mt_src_max);
1182180e8afSJoerg Sonnenberger }
1192180e8afSJoerg Sonnenberger 
1202180e8afSJoerg Sonnenberger /*
1212180e8afSJoerg Sonnenberger  * _citrus_mapper_get_dst_max:
1222180e8afSJoerg Sonnenberger  *	get the maximum number of suspended destinations.
1232180e8afSJoerg Sonnenberger  */
1242180e8afSJoerg Sonnenberger static __inline size_t
_citrus_mapper_get_dst_max(struct _citrus_mapper * __restrict cm)1252180e8afSJoerg Sonnenberger _citrus_mapper_get_dst_max(struct _citrus_mapper * __restrict cm)
1262180e8afSJoerg Sonnenberger {
1272180e8afSJoerg Sonnenberger 
128*0d5acd74SJohn Marino 	return (cm->cm_traits->mt_dst_max);
1292180e8afSJoerg Sonnenberger }
1302180e8afSJoerg Sonnenberger 
1312180e8afSJoerg Sonnenberger #endif
132