19651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia/* 2ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia * Copyright (C) 2011 The Libphonenumber Authors 39651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia * 49651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia * Licensed under the Apache License, Version 2.0 (the "License"); 59651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia * you may not use this file except in compliance with the License. 69651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia * You may obtain a copy of the License at 79651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia * 89651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia * http://www.apache.org/licenses/LICENSE-2.0 99651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia * 109651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia * Unless required by applicable law or agreed to in writing, software 119651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia * distributed under the License is distributed on an "AS IS" BASIS, 129651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia * See the License for the specific language governing permissions and 149651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia * limitations under the License. 159651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia */ 169651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia 17a77faddfc3b3e4cca8f585c82d669054aec221f4Narayan Kamathpackage com.google.i18n.phonenumbers.prefixmapper; 189651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia 199651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jiaimport java.io.IOException; 209651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jiaimport java.io.ObjectInput; 219651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jiaimport java.io.ObjectOutput; 229651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jiaimport java.util.SortedMap; 239651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia 249651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia/** 25f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia * Default phone prefix map storage strategy that is used for data not containing description 269651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia * duplications. It is mainly intended to avoid the overhead of the string table management when it 279651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia * is actually unnecessary (i.e no string duplication). 289651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia * 299651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia * @author Shaopeng Jia 309651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia */ 31f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jiaclass DefaultMapStorage extends PhonePrefixMapStorageStrategy { 329651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia 33f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia public DefaultMapStorage() {} 349651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia 359651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia private int[] phoneNumberPrefixes; 369651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia private String[] descriptions; 379651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia 389651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia @Override 399651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia public int getPrefix(int index) { 409651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia return phoneNumberPrefixes[index]; 419651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia } 429651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia 439651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia @Override 449651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia public String getDescription(int index) { 459651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia return descriptions[index]; 469651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia } 479651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia 489651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia @Override 49f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia public void readFromSortedMap(SortedMap<Integer, String> sortedPhonePrefixMap) { 50f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia numOfEntries = sortedPhonePrefixMap.size(); 519651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia phoneNumberPrefixes = new int[numOfEntries]; 529651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia descriptions = new String[numOfEntries]; 539651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia int index = 0; 54f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia for (int prefix : sortedPhonePrefixMap.keySet()) { 55f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia phoneNumberPrefixes[index++] = prefix; 56f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia possibleLengths.add((int) Math.log10(prefix) + 1); 579651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia } 58f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia sortedPhonePrefixMap.values().toArray(descriptions); 599651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia } 609651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia 619651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia @Override 629651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia public void readExternal(ObjectInput objectInput) throws IOException { 639651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia numOfEntries = objectInput.readInt(); 649651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia if (phoneNumberPrefixes == null || phoneNumberPrefixes.length < numOfEntries) { 659651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia phoneNumberPrefixes = new int[numOfEntries]; 669651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia } 679651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia if (descriptions == null || descriptions.length < numOfEntries) { 689651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia descriptions = new String[numOfEntries]; 699651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia } 709651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia for (int i = 0; i < numOfEntries; i++) { 719651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia phoneNumberPrefixes[i] = objectInput.readInt(); 729651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia descriptions[i] = objectInput.readUTF(); 739651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia } 749651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia int sizeOfLengths = objectInput.readInt(); 759651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia possibleLengths.clear(); 769651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia for (int i = 0; i < sizeOfLengths; i++) { 779651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia possibleLengths.add(objectInput.readInt()); 789651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia } 799651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia } 809651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia 819651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia @Override 829651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia public void writeExternal(ObjectOutput objectOutput) throws IOException { 839651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia objectOutput.writeInt(numOfEntries); 849651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia for (int i = 0; i < numOfEntries; i++) { 859651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia objectOutput.writeInt(phoneNumberPrefixes[i]); 869651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia objectOutput.writeUTF(descriptions[i]); 879651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia } 889651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia int sizeOfLengths = possibleLengths.size(); 899651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia objectOutput.writeInt(sizeOfLengths); 909651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia for (Integer length : possibleLengths) { 919651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia objectOutput.writeInt(length); 929651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia } 939651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia } 949651f4d6f2740017c0c4ea9c1c340af6f644d609Shaopeng Jia} 95