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