• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "mcc_pool.h"
17 
18 using namespace std;
19 
20 namespace OHOS {
21 namespace Telephony {
22 std::vector<std::shared_ptr<MccAccess>> MccPool::mccAccessTable_;
23 std::vector<std::string> MccPool::specialMccMnc_;
24 constexpr size_t MCC_ACCESS_TABLE_LEN = 240;
AccessToMcc(int mcc)25 std::shared_ptr<MccAccess> MccPool::AccessToMcc(int mcc)
26 {
27     InitMccTables();
28     auto it = std::find_if(mccAccessTable_.begin(), mccAccessTable_.end(),
29         [mcc](const auto &p) { return p != nullptr && p->mcc_ == mcc; });
30     if (it != mccAccessTable_.end()) {
31         return *it;
32     } else {
33         return std::make_shared<MccAccess>(mcc, "", 0);
34     }
35 }
36 
MccCountryCode(int mcc)37 std::string MccPool::MccCountryCode(int mcc)
38 {
39     auto entry = AccessToMcc(mcc);
40     if (entry == nullptr) {
41         return "";
42     }
43     return entry->iso_;
44 }
45 
ShortestMncLengthFromMcc(int mcc)46 int MccPool::ShortestMncLengthFromMcc(int mcc)
47 {
48     auto access = AccessToMcc(mcc);
49     if (access == nullptr || access->iso_.empty()) {
50         return MCC_SHORT;
51     } else {
52         return access->mncShortestLength_;
53     }
54 }
55 
InitMccTables()56 void MccPool::InitMccTables()
57 {
58     if (mccAccessTable_.size() == 0) {
59         mccAccessTable_.reserve(MCC_ACCESS_TABLE_LEN);
60         AddMccForAsia();
61         AddMccForEurope();
62         AddMccForAfrica();
63         AddMccForNorthAmerica();
64         AddMccForSouthAmerica();
65         AddMccForAustralia();
66         std::sort(mccAccessTable_.begin(), mccAccessTable_.end(), MccPool::MccCompare);
67     }
68 }
69 
AddMccForAsia()70 void MccPool::AddMccForAsia()
71 {
72     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GR, "gr", MCC_SHORT));
73     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_NL, "nl", MCC_SHORT));
74     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BE, "be", MCC_SHORT));
75     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_FR, "fr", MCC_SHORT));
76     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MC, "mc", MCC_SHORT));
77     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AD, "ad", MCC_SHORT));
78     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_ES, "es", MCC_SHORT));
79     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_HU, "hu", MCC_SHORT));
80     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BA, "ba", MCC_SHORT));
81     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_HR, "hr", MCC_SHORT));
82     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_RS, "rs", MCC_SHORT));
83     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_IT, "it", MCC_SHORT));
84     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_VA, "va", MCC_SHORT));
85     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_RO, "ro", MCC_SHORT));
86     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CH, "ch", MCC_SHORT));
87     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CZ, "cz", MCC_SHORT));
88     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SK, "sk", MCC_SHORT));
89     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AT, "at", MCC_SHORT));
90     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GB_A, "gb", MCC_SHORT));
91     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GB_B, "gb", MCC_SHORT));
92     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_DK, "dk", MCC_SHORT));
93     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SE, "se", MCC_SHORT));
94     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_NO, "no", MCC_SHORT));
95     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_FI, "fi", MCC_SHORT));
96     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_LT, "lt", MCC_SHORT));
97     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_LV, "lv", MCC_SHORT));
98     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_EE, "ee", MCC_SHORT));
99     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_RU, "ru", MCC_SHORT));
100     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_UA, "ua", MCC_SHORT));
101     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BY, "by", MCC_SHORT));
102     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MD, "md", MCC_SHORT));
103     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PL, "pl", MCC_SHORT));
104     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_DE, "de", MCC_SHORT));
105     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GI, "gi", MCC_SHORT));
106     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PT, "pt", MCC_SHORT));
107     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_LU, "lu", MCC_SHORT));
108     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_IE, "ie", MCC_SHORT));
109     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_IS, "is", MCC_SHORT));
110     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AL, "al", MCC_SHORT));
111     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MT, "mt", MCC_SHORT));
112     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CY, "cy", MCC_SHORT));
113 }
114 
AddMccForEurope()115 void MccPool::AddMccForEurope()
116 {
117     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GE_A, "ge", MCC_SHORT));
118     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AM, "am", MCC_SHORT));
119     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BG, "bg", MCC_SHORT));
120     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TR, "tr", MCC_SHORT));
121     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_FO, "fo", MCC_SHORT));
122     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GE_B, "ge", MCC_SHORT));
123     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GL, "gl", MCC_SHORT));
124     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SM, "sm", MCC_SHORT));
125     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SI, "si", MCC_SHORT));
126     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MK, "mk", MCC_SHORT));
127     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_LI, "li", MCC_SHORT));
128     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_ME, "me", MCC_SHORT));
129     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CA, "ca", MCC_LONG));
130     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PM, "pm", MCC_SHORT));
131     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_US_A, "us", MCC_LONG));
132     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_US_B, "us", MCC_LONG));
133     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_US_C, "us", MCC_LONG));
134     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_US_D, "us", MCC_LONG));
135     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_US_E, "us", MCC_LONG));
136     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_US_F, "us", MCC_LONG));
137     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_US_G, "us", MCC_LONG));
138     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PR, "pr", MCC_SHORT));
139     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_VI, "vi", MCC_SHORT));
140     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MX, "mx", MCC_LONG));
141     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_JM, "jm", MCC_LONG));
142     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GP, "gp", MCC_SHORT));
143     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BB, "bb", MCC_LONG));
144     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AG, "ag", MCC_LONG));
145     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_KY, "ky", MCC_LONG));
146     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_VG, "vg", MCC_LONG));
147     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BM, "bm", MCC_SHORT));
148     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GD, "gd", MCC_SHORT));
149     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MS, "ms", MCC_SHORT));
150     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_KN, "kn", MCC_SHORT));
151     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_LC, "lc", MCC_SHORT));
152     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_VC, "vc", MCC_SHORT));
153     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AI_A, "ai", MCC_SHORT));
154     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AW, "aw", MCC_SHORT));
155     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BS, "bs", MCC_SHORT));
156     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AI_B, "ai", MCC_LONG));
157     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_DM, "dm", MCC_SHORT));
158 }
159 
AddMccForAfrica()160 void MccPool::AddMccForAfrica()
161 {
162     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CU, "cu", MCC_SHORT));
163     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_DO, "do", MCC_SHORT));
164     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_HT, "ht", MCC_SHORT));
165     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TT, "tt", MCC_SHORT));
166     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TC, "tc", MCC_SHORT));
167     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AZ, "az", MCC_SHORT));
168     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_KZ, "kz", MCC_SHORT));
169     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BT, "bt", MCC_SHORT));
170     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_IN_A, "in", MCC_SHORT));
171     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_IN_B, "in", MCC_SHORT));
172     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_IN_C, "in", MCC_SHORT));
173     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PK, "pk", MCC_SHORT));
174     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AF, "af", MCC_SHORT));
175     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_LK, "lk", MCC_SHORT));
176     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MM, "mm", MCC_SHORT));
177     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_LB, "lb", MCC_SHORT));
178     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_JO, "jo", MCC_SHORT));
179     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SY, "sy", MCC_SHORT));
180     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_IQ, "iq", MCC_SHORT));
181     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_KW, "kw", MCC_SHORT));
182     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SA, "sa", MCC_SHORT));
183     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_YE, "ye", MCC_SHORT));
184     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_OM, "om", MCC_SHORT));
185     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PS, "ps", MCC_SHORT));
186     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AE_A, "ae", MCC_SHORT));
187     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_IL, "il", MCC_SHORT));
188     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BH, "bh", MCC_SHORT));
189     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_QA, "qa", MCC_SHORT));
190     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MN, "mn", MCC_SHORT));
191     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_NP, "np", MCC_SHORT));
192     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AE_B, "ae", MCC_SHORT));
193     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AE_C, "ae", MCC_SHORT));
194     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_IR, "ir", MCC_SHORT));
195     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_UZ, "uz", MCC_SHORT));
196     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TJ, "tj", MCC_SHORT));
197     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_KG, "kg", MCC_SHORT));
198     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TM, "tm", MCC_SHORT));
199     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_JP_A, "jp", MCC_SHORT));
200     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_JP_B, "jp", MCC_SHORT));
201     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_KR, "kr", MCC_SHORT));
202     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_VN, "vn", MCC_SHORT));
203 }
204 
AddMccForNorthAmerica()205 void MccPool::AddMccForNorthAmerica()
206 {
207     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_HK, "hk", MCC_SHORT));
208     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MO, "mo", MCC_SHORT));
209     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_KH, "kh", MCC_SHORT));
210     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_LA, "la", MCC_SHORT));
211     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CN_A, "cn", MCC_SHORT));
212     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CN_B, "cn", MCC_SHORT));
213     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TW, "tw", MCC_SHORT));
214     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_KP, "kp", MCC_SHORT));
215     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BD, "bd", MCC_SHORT));
216     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MV, "mv", MCC_SHORT));
217     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MY, "my", MCC_SHORT));
218     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AU, "au", MCC_SHORT));
219     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_ID, "id", MCC_SHORT));
220     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TL, "tl", MCC_SHORT));
221     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PH, "ph", MCC_SHORT));
222     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TH, "th", MCC_SHORT));
223     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SG, "sg", MCC_SHORT));
224     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BN, "bn", MCC_SHORT));
225     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_NZ, "nz", MCC_SHORT));
226     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MP, "mp", MCC_SHORT));
227     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GU, "gu", MCC_SHORT));
228     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_NR, "nr", MCC_SHORT));
229     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PG, "pg", MCC_SHORT));
230     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TO, "to", MCC_SHORT));
231     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SB, "sb", MCC_SHORT));
232     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_VU, "vu", MCC_SHORT));
233     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_FJ, "fj", MCC_SHORT));
234     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_WF, "wf", MCC_SHORT));
235     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AS, "as", MCC_SHORT));
236     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_KI, "ki", MCC_SHORT));
237     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_NC, "nc", MCC_SHORT));
238     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PF, "pf", MCC_SHORT));
239     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CK, "ck", MCC_SHORT));
240     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_WS, "ws", MCC_SHORT));
241     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_FM, "fm", MCC_SHORT));
242     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MH, "mh", MCC_SHORT));
243     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PW, "pw", MCC_SHORT));
244     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TV, "tv", MCC_SHORT));
245     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_NU, "nu", MCC_SHORT));
246     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_EG, "eg", MCC_SHORT));
247     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_DZ, "dz", MCC_SHORT));
248 }
249 
AddMccForSouthAmerica()250 void MccPool::AddMccForSouthAmerica()
251 {
252     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MA, "ma", MCC_SHORT));
253     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TN, "tn", MCC_SHORT));
254     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_LY, "ly", MCC_SHORT));
255     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GM, "gm", MCC_SHORT));
256     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SN, "sn", MCC_SHORT));
257     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MR, "mr", MCC_SHORT));
258     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_ML, "ml", MCC_SHORT));
259     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GN, "gn", MCC_SHORT));
260     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CI, "ci", MCC_SHORT));
261     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BF, "bf", MCC_SHORT));
262     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_NE, "ne", MCC_SHORT));
263     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TG, "tg", MCC_SHORT));
264     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BJ, "bj", MCC_SHORT));
265     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MU, "mu", MCC_SHORT));
266     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_LR, "lr", MCC_SHORT));
267     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SL, "sl", MCC_SHORT));
268     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GH, "gh", MCC_SHORT));
269     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_NG, "ng", MCC_SHORT));
270     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TD, "td", MCC_SHORT));
271     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CF, "cf", MCC_SHORT));
272     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CM, "cm", MCC_SHORT));
273     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CV, "cv", MCC_SHORT));
274     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_ST, "st", MCC_SHORT));
275     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GQ, "gq", MCC_SHORT));
276     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GA, "ga", MCC_SHORT));
277     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CG, "cg", MCC_SHORT));
278     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CD, "cd", MCC_SHORT));
279     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AO, "ao", MCC_SHORT));
280     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GW, "gw", MCC_SHORT));
281     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SC, "sc", MCC_SHORT));
282     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SD, "sd", MCC_SHORT));
283     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_RW, "rw", MCC_SHORT));
284     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_ET, "et", MCC_SHORT));
285     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SO, "so", MCC_SHORT));
286     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_DJ, "dj", MCC_SHORT));
287     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_KE, "ke", MCC_SHORT));
288     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TZ, "tz", MCC_SHORT));
289     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_UG, "ug", MCC_SHORT));
290     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BI, "bi", MCC_SHORT));
291     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MZ, "mz", MCC_SHORT));
292 }
293 
AddMccForAustralia()294 void MccPool::AddMccForAustralia()
295 {
296     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_ZM, "zm", MCC_SHORT));
297     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MG, "mg", MCC_SHORT));
298     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_RE, "re", MCC_SHORT));
299     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_ZW, "zw", MCC_SHORT));
300     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_NA, "na", MCC_SHORT));
301     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MW, "mw", MCC_SHORT));
302     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_LS, "ls", MCC_SHORT));
303     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BW, "bw", MCC_SHORT));
304     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SZ, "sz", MCC_SHORT));
305     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_KM, "km", MCC_SHORT));
306     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_ZA, "za", MCC_SHORT));
307     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_ER, "er", MCC_SHORT));
308     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SH, "sh", MCC_SHORT));
309     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SS, "ss", MCC_SHORT));
310     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BZ, "bz", MCC_SHORT));
311     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GT, "gt", MCC_SHORT));
312     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SV, "sv", MCC_SHORT));
313     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_HN, "hn", MCC_LONG));
314     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_NI, "ni", MCC_SHORT));
315     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CR, "cr", MCC_SHORT));
316     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PA, "pa", MCC_SHORT));
317     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PE, "pe", MCC_SHORT));
318     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AR, "ar", MCC_LONG));
319     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BR, "br", MCC_SHORT));
320     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CL, "cl", MCC_SHORT));
321     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CO, "co", MCC_LONG));
322     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_VE, "ve", MCC_SHORT));
323     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BO, "bo", MCC_SHORT));
324     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GY, "gy", MCC_SHORT));
325     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_EC, "ec", MCC_SHORT));
326     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GF, "gf", MCC_SHORT));
327     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PY, "py", MCC_SHORT));
328     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SR, "sr", MCC_SHORT));
329     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_UY, "uy", MCC_SHORT));
330     mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_FK, "fk", MCC_SHORT));
331 }
332 
MccCompare(const std::shared_ptr<MccAccess> & mccAccessA,const std::shared_ptr<MccAccess> & mccAccessB)333 bool MccPool::MccCompare(const std::shared_ptr<MccAccess> &mccAccessA, const std::shared_ptr<MccAccess> &mccAccessB)
334 {
335     if (mccAccessA == nullptr || mccAccessB == nullptr) {
336         return false;
337     }
338     return (mccAccessA->mcc_ < mccAccessB->mcc_);
339 }
340 
LengthIsThreeMnc(const std::string & mccMncCode)341 bool MccPool::LengthIsThreeMnc(const std::string &mccMncCode)
342 {
343     InitSpecialMccMncTables();
344     std::vector<std::string>::iterator obj = std::find(specialMccMnc_.begin(), specialMccMnc_.end(), mccMncCode);
345     return (obj == specialMccMnc_.end()) ? false : true;
346 }
347 
InitSpecialMccMncTables()348 void MccPool::InitSpecialMccMncTables()
349 {
350     if (specialMccMnc_.size() == 0) {
351         AddMccMncForCa();
352         AddMccMncForInAirtel();
353         AddMccMncForInHutch();
354         AddMccMncForMy();
355     }
356 }
357 
AddMccMncForCa()358 void MccPool::AddMccMncForCa()
359 {
360     specialMccMnc_.push_back("302370");
361     specialMccMnc_.push_back("302720");
362     specialMccMnc_.push_back("310260");
363     specialMccMnc_.push_back("405025");
364     specialMccMnc_.push_back("405026");
365     specialMccMnc_.push_back("405027");
366     specialMccMnc_.push_back("405028");
367     specialMccMnc_.push_back("405029");
368     specialMccMnc_.push_back("405030");
369     specialMccMnc_.push_back("405031");
370     specialMccMnc_.push_back("405032");
371     specialMccMnc_.push_back("405033");
372     specialMccMnc_.push_back("405034");
373     specialMccMnc_.push_back("405035");
374     specialMccMnc_.push_back("405036");
375     specialMccMnc_.push_back("405037");
376     specialMccMnc_.push_back("405038");
377     specialMccMnc_.push_back("405039");
378     specialMccMnc_.push_back("405040");
379     specialMccMnc_.push_back("405041");
380     specialMccMnc_.push_back("405042");
381     specialMccMnc_.push_back("405043");
382     specialMccMnc_.push_back("405044");
383     specialMccMnc_.push_back("405045");
384     specialMccMnc_.push_back("405046");
385     specialMccMnc_.push_back("405047");
386     specialMccMnc_.push_back("405750");
387     specialMccMnc_.push_back("405751");
388     specialMccMnc_.push_back("405752");
389     specialMccMnc_.push_back("405753");
390     specialMccMnc_.push_back("405754");
391     specialMccMnc_.push_back("405755");
392     specialMccMnc_.push_back("405756");
393     specialMccMnc_.push_back("405799");
394     specialMccMnc_.push_back("405800");
395     specialMccMnc_.push_back("405801");
396 }
397 
AddMccMncForInAirtel()398 void MccPool::AddMccMncForInAirtel()
399 {
400     specialMccMnc_.push_back("405802");
401     specialMccMnc_.push_back("405803");
402     specialMccMnc_.push_back("405804");
403     specialMccMnc_.push_back("405805");
404     specialMccMnc_.push_back("405806");
405     specialMccMnc_.push_back("405807");
406     specialMccMnc_.push_back("405808");
407     specialMccMnc_.push_back("405809");
408     specialMccMnc_.push_back("405810");
409     specialMccMnc_.push_back("405811");
410     specialMccMnc_.push_back("405812");
411     specialMccMnc_.push_back("405813");
412     specialMccMnc_.push_back("405814");
413     specialMccMnc_.push_back("405815");
414     specialMccMnc_.push_back("405816");
415     specialMccMnc_.push_back("405817");
416     specialMccMnc_.push_back("405818");
417     specialMccMnc_.push_back("405819");
418     specialMccMnc_.push_back("405820");
419     specialMccMnc_.push_back("405821");
420     specialMccMnc_.push_back("405822");
421     specialMccMnc_.push_back("405823");
422     specialMccMnc_.push_back("405824");
423     specialMccMnc_.push_back("405825");
424     specialMccMnc_.push_back("405826");
425     specialMccMnc_.push_back("405827");
426     specialMccMnc_.push_back("405828");
427     specialMccMnc_.push_back("405829");
428     specialMccMnc_.push_back("405830");
429     specialMccMnc_.push_back("405831");
430     specialMccMnc_.push_back("405832");
431     specialMccMnc_.push_back("405833");
432     specialMccMnc_.push_back("405834");
433     specialMccMnc_.push_back("405835");
434     specialMccMnc_.push_back("405836");
435 }
436 
AddMccMncForInHutch()437 void MccPool::AddMccMncForInHutch()
438 {
439     specialMccMnc_.push_back("405837");
440     specialMccMnc_.push_back("405838");
441     specialMccMnc_.push_back("405839");
442     specialMccMnc_.push_back("405840");
443     specialMccMnc_.push_back("405841");
444     specialMccMnc_.push_back("405842");
445     specialMccMnc_.push_back("405843");
446     specialMccMnc_.push_back("405844");
447     specialMccMnc_.push_back("405845");
448     specialMccMnc_.push_back("405846");
449     specialMccMnc_.push_back("405847");
450     specialMccMnc_.push_back("405848");
451     specialMccMnc_.push_back("405849");
452     specialMccMnc_.push_back("405850");
453     specialMccMnc_.push_back("405851");
454     specialMccMnc_.push_back("405852");
455     specialMccMnc_.push_back("405853");
456     specialMccMnc_.push_back("405854");
457     specialMccMnc_.push_back("405855");
458     specialMccMnc_.push_back("405856");
459     specialMccMnc_.push_back("405857");
460     specialMccMnc_.push_back("405858");
461     specialMccMnc_.push_back("405859");
462     specialMccMnc_.push_back("405860");
463     specialMccMnc_.push_back("405861");
464     specialMccMnc_.push_back("405862");
465     specialMccMnc_.push_back("405863");
466     specialMccMnc_.push_back("405864");
467     specialMccMnc_.push_back("405865");
468     specialMccMnc_.push_back("405866");
469     specialMccMnc_.push_back("405867");
470     specialMccMnc_.push_back("405868");
471     specialMccMnc_.push_back("405869");
472     specialMccMnc_.push_back("405870");
473     specialMccMnc_.push_back("405871");
474     specialMccMnc_.push_back("405872");
475     specialMccMnc_.push_back("405873");
476     specialMccMnc_.push_back("405874");
477     specialMccMnc_.push_back("405875");
478 }
479 
AddMccMncForMy()480 void MccPool::AddMccMncForMy()
481 {
482     specialMccMnc_.push_back("405876");
483     specialMccMnc_.push_back("405877");
484     specialMccMnc_.push_back("405878");
485     specialMccMnc_.push_back("405879");
486     specialMccMnc_.push_back("405880");
487     specialMccMnc_.push_back("405881");
488     specialMccMnc_.push_back("405882");
489     specialMccMnc_.push_back("405883");
490     specialMccMnc_.push_back("405884");
491     specialMccMnc_.push_back("405885");
492     specialMccMnc_.push_back("405886");
493     specialMccMnc_.push_back("405908");
494     specialMccMnc_.push_back("405909");
495     specialMccMnc_.push_back("405910");
496     specialMccMnc_.push_back("405911");
497     specialMccMnc_.push_back("405912");
498     specialMccMnc_.push_back("405913");
499     specialMccMnc_.push_back("405914");
500     specialMccMnc_.push_back("405915");
501     specialMccMnc_.push_back("405916");
502     specialMccMnc_.push_back("405917");
503     specialMccMnc_.push_back("405918");
504     specialMccMnc_.push_back("405919");
505     specialMccMnc_.push_back("405920");
506     specialMccMnc_.push_back("405921");
507     specialMccMnc_.push_back("405922");
508     specialMccMnc_.push_back("405923");
509     specialMccMnc_.push_back("405924");
510     specialMccMnc_.push_back("405925");
511     specialMccMnc_.push_back("405926");
512     specialMccMnc_.push_back("405927");
513     specialMccMnc_.push_back("405928");
514     specialMccMnc_.push_back("405929");
515     specialMccMnc_.push_back("405930");
516     specialMccMnc_.push_back("405931");
517     specialMccMnc_.push_back("405932");
518     specialMccMnc_.push_back("502142");
519     specialMccMnc_.push_back("502143");
520     specialMccMnc_.push_back("502145");
521     specialMccMnc_.push_back("502146");
522     specialMccMnc_.push_back("502147");
523     specialMccMnc_.push_back("502148");
524 }
525 
MccPool()526 MccPool::MccPool() {}
527 
~MccPool()528 MccPool::~MccPool() {}
529 } // namespace Telephony
530 } // namespace OHOS
531