1*584b9f7cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*584b9f7cSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*584b9f7cSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*584b9f7cSAndrew Rist  * distributed with this work for additional information
6*584b9f7cSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*584b9f7cSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*584b9f7cSAndrew Rist  * "License"); you may not use this file except in compliance
9*584b9f7cSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*584b9f7cSAndrew Rist  *
11*584b9f7cSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*584b9f7cSAndrew Rist  *
13*584b9f7cSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*584b9f7cSAndrew Rist  * software distributed under the License is distributed on an
15*584b9f7cSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*584b9f7cSAndrew Rist  * KIND, either express or implied.  See the License for the
17*584b9f7cSAndrew Rist  * specific language governing permissions and limitations
18*584b9f7cSAndrew Rist  * under the License.
19*584b9f7cSAndrew Rist  *
20*584b9f7cSAndrew Rist  *************************************************************/
21*584b9f7cSAndrew Rist 
22*584b9f7cSAndrew Rist 
23cdf0e10cSrcweir #ifndef INCLUDED_I18NUTIL_TRANSLITERATION_ONETOONEMAPPING_HXX
24cdf0e10cSrcweir #define INCLUDED_I18NUTIL_TRANSLITERATION_ONETOONEMAPPING_HXX
25cdf0e10cSrcweir 
26cdf0e10cSrcweir #include <utility>
27cdf0e10cSrcweir #include <rtl/ustring.hxx>
28cdf0e10cSrcweir 
29cdf0e10cSrcweir namespace com { namespace sun { namespace star { namespace i18n {
30cdf0e10cSrcweir 
31cdf0e10cSrcweir class widthfolding;
32cdf0e10cSrcweir 
33cdf0e10cSrcweir typedef std::pair< sal_Unicode, sal_Unicode > OneToOneMappingTable_t;
34cdf0e10cSrcweir 
35cdf0e10cSrcweir #define MAKE_PAIR(item1,item2) std::make_pair< sal_Unicode, sal_Unicode >((sal_Unicode)item1,(sal_Unicode)item2)
36cdf0e10cSrcweir 
37cdf0e10cSrcweir typedef sal_Int8 UnicodePairFlag;
38cdf0e10cSrcweir typedef struct _UnicodePairWithFlag
39cdf0e10cSrcweir {
40cdf0e10cSrcweir     sal_Unicode     first;
41cdf0e10cSrcweir     sal_Unicode     second;
42cdf0e10cSrcweir     UnicodePairFlag flag;
43cdf0e10cSrcweir } UnicodePairWithFlag;
44cdf0e10cSrcweir 
45cdf0e10cSrcweir class oneToOneMapping
46cdf0e10cSrcweir {
47cdf0e10cSrcweir private:
48cdf0e10cSrcweir     // no copy, no substitution
49cdf0e10cSrcweir     oneToOneMapping( const oneToOneMapping& );
50cdf0e10cSrcweir     oneToOneMapping& operator=( const oneToOneMapping& );
51cdf0e10cSrcweir public:
52cdf0e10cSrcweir     oneToOneMapping( OneToOneMappingTable_t *rpTable, const size_t rnSize, const size_t rnUnitSize = sizeof(OneToOneMappingTable_t) );
53cdf0e10cSrcweir     virtual ~oneToOneMapping();
54cdf0e10cSrcweir 
55cdf0e10cSrcweir     // make index for fast search
56cdf0e10cSrcweir     // bluedawrf: not used
57cdf0e10cSrcweir //        void makeIndex();
58cdf0e10cSrcweir 
59cdf0e10cSrcweir     // binary search
60cdf0e10cSrcweir     virtual sal_Unicode find( const sal_Unicode nKey ) const;
61cdf0e10cSrcweir 
62cdf0e10cSrcweir     // translator
operator [](const sal_Unicode nKey) const63cdf0e10cSrcweir     sal_Unicode operator[] ( const sal_Unicode nKey ) const { return find( nKey ); };
64cdf0e10cSrcweir 
65cdf0e10cSrcweir protected:
66cdf0e10cSrcweir     OneToOneMappingTable_t *mpTable;
67cdf0e10cSrcweir     size_t                  mnSize;
68cdf0e10cSrcweir };
69cdf0e10cSrcweir 
70cdf0e10cSrcweir class oneToOneMappingWithFlag : public oneToOneMapping
71cdf0e10cSrcweir {
72cdf0e10cSrcweir     friend class widthfolding;
73cdf0e10cSrcweir 
74cdf0e10cSrcweir private:
75cdf0e10cSrcweir     // no copy, no substitution
76cdf0e10cSrcweir     oneToOneMappingWithFlag( const oneToOneMappingWithFlag& );
77cdf0e10cSrcweir     oneToOneMappingWithFlag& operator=( const oneToOneMappingWithFlag& );
78cdf0e10cSrcweir public:
79cdf0e10cSrcweir     oneToOneMappingWithFlag( UnicodePairWithFlag *rpTableWF, const size_t rnSize, const UnicodePairFlag rnFlag );
80cdf0e10cSrcweir     virtual ~oneToOneMappingWithFlag();
81cdf0e10cSrcweir 
82cdf0e10cSrcweir     // make index for fast search
83cdf0e10cSrcweir     void makeIndex();
84cdf0e10cSrcweir 
85cdf0e10cSrcweir     // index search
86cdf0e10cSrcweir     virtual sal_Unicode find( const sal_Unicode nKey ) const;
87cdf0e10cSrcweir protected:
88cdf0e10cSrcweir     UnicodePairWithFlag  *mpTableWF;
89cdf0e10cSrcweir     UnicodePairFlag       mnFlag;
90cdf0e10cSrcweir     UnicodePairWithFlag **mpIndex[256];
91cdf0e10cSrcweir     sal_Bool              mbHasIndex;
92cdf0e10cSrcweir };
93cdf0e10cSrcweir 
94cdf0e10cSrcweir } } } }
95cdf0e10cSrcweir 
96cdf0e10cSrcweir #endif // _I18N_TRANSLITERATION_ONETOONEMAPPING_HXX_
97