/*
 * Copyright (C) 2012 The Libphonenumber Authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/* This file is automatically generated by {@link BuildMetadataProtoFromXml}.
 * Please don't modify it directly.
 */

package com.android.i18n.phonenumbers;

import java.util.HashSet;
import java.util.Set;

public class AlternateFormatsCountryCodeSet {
  // A set of all country codes for which data is available.
  static Set<Integer> getCountryCodeSet() {
    // The capacity is set to 8 as there are 6 different country codes,
    // and this offers a load factor of roughly 0.75.
    Set<Integer> countryCodeSet = new HashSet<Integer>(8);

    countryCodeSet.add(43);
    countryCodeSet.add(44);
    countryCodeSet.add(49);
    countryCodeSet.add(55);
    countryCodeSet.add(61);
    countryCodeSet.add(81);

    return countryCodeSet;
  }
}
