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