xref: /illumos-gate/usr/src/lib/libc/port/locale/collate.h (revision 5f10ef697f250374b7b917e10961c4e02d4e3112)
1 /*
2  * Copyright 2015 Nexenta Systmes, Inc.  All rights reserved.
3  * Copyright 2013 Garrett D'Amore <garrett@damore.org>
4  * Copyright (c) 1995 Alex Tatmanjants <alex@elvisti.kiev.ua>
5  *		at Electronni Visti IA, Kiev, Ukraine.
6  *			All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  */
29 
30 #ifndef _COLLATE_H_
31 #define	_COLLATE_H_
32 
33 /*
34  * This file defines the libc interface to LC_COLLATE data.
35  */
36 
37 #include <sys/types.h>
38 #include <limits.h>
39 #include "collatefile.h"
40 #include "localeimpl.h"
41 
42 /*
43  * This is the run-time (in-memory) form of LC_COLLATE data.
44  */
45 struct lc_collate {
46 	int		lc_is_posix;
47 
48 	uint8_t		lc_directive_count;
49 	uint8_t		lc_directive[COLL_WEIGHTS_MAX];
50 	int32_t		lc_pri_count[COLL_WEIGHTS_MAX];
51 	int32_t		lc_flags;
52 	int32_t		lc_chain_count;
53 	int32_t		lc_large_count;
54 	int32_t		lc_subst_count[COLL_WEIGHTS_MAX];
55 	int32_t		lc_undef_pri[COLL_WEIGHTS_MAX];
56 
57 	collate_info_t	*lc_info;
58 	collate_char_t	*lc_char_table;
59 	collate_large_t	*lc_large_table;
60 	collate_chain_t	*lc_chain_table;
61 	collate_subst_t	*lc_subst_table[COLL_WEIGHTS_MAX];
62 };
63 
64 void	_collate_lookup(const struct lc_collate *, const wchar_t *,
65     int *, int *, int, const int **);
66 size_t	_collate_wxfrm(const struct lc_collate *, const wchar_t *,
67     wchar_t *, size_t);
68 size_t	_collate_sxfrm(const wchar_t *, char *, size_t, locale_t);
69 int	_collate_range_cmp(wchar_t, wchar_t, locale_t);
70 
71 #endif /* !_COLLATE_H_ */
72