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