• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 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 #include "intl_ffi.h"
16 #include "intl_impl.h"
17 #include <string>
18 
19 using namespace OHOS::FFI;
20 
21 namespace OHOS {
22 namespace Global {
23 namespace I18n {
24 namespace Intl {
25 extern "C" {
FfiOHOSNumberFormatImplFormat(int64_t id,double number)26 char *FfiOHOSNumberFormatImplFormat(int64_t id, double number)
27 {
28     auto instance = FFIData::GetData<NumberFormatImpl>(id);
29     if (!instance) {
30         HILOG_ERROR_I18N("The NumberFormatImpl instance is nullptr");
31         return nullptr;
32     }
33     return instance->Format(number);
34 }
35 
FfiOHOSNumberFormatImplConstructor(int32_t * errCode)36 int64_t FfiOHOSNumberFormatImplConstructor(int32_t *errCode)
37 {
38     auto nativeCJNumberFormat = FFIData::Create<NumberFormatImpl>(errCode);
39     if (!nativeCJNumberFormat) {
40         return 0;
41     }
42     return nativeCJNumberFormat->GetID();
43 }
44 
FfiOHOSNumberFormatImplConstructorwithLocale(char * locale,CNumberOptions options,int64_t flag,int32_t * errCode)45 int64_t FfiOHOSNumberFormatImplConstructorwithLocale(
46     char *locale, CNumberOptions options, int64_t flag, int32_t *errCode)
47 {
48     auto nativeCJNumberFormat = FFIData::Create<NumberFormatImpl>(locale, options, flag, errCode);
49     if (!nativeCJNumberFormat) {
50         return 0;
51     }
52     return nativeCJNumberFormat->GetID();
53 }
54 
FfiOHOSNumberFormatImplConstructorwithArrayLocale(CArrString locale,CNumberOptions options,int64_t flag,int32_t * errCode)55 int64_t FfiOHOSNumberFormatImplConstructorwithArrayLocale(
56     CArrString locale, CNumberOptions options, int64_t flag, int32_t *errCode)
57 {
58     auto nativeCJNumberFormat = FFIData::Create<NumberFormatImpl>(locale, options, flag, errCode);
59     if (!nativeCJNumberFormat) {
60         return 0;
61     }
62     return nativeCJNumberFormat->GetID();
63 }
64 
FfiOHOSNumberFormatImplGetNumberResolvedOptions(int64_t id)65 CNumberOptions FfiOHOSNumberFormatImplGetNumberResolvedOptions(int64_t id)
66 {
67     auto instance = FFIData::GetData<NumberFormatImpl>(id);
68     struct CNumberOptions numberOptions = { nullptr };
69     if (!instance) {
70         HILOG_ERROR_I18N("The NumberFormatImpl instance is nullptr");
71         return numberOptions;
72     }
73     return instance->ResolveOptions();
74 }
75 
FfiOHOSRelativeTimeFormatImplConstructor(int32_t * errCode)76 int64_t FfiOHOSRelativeTimeFormatImplConstructor(int32_t *errCode)
77 {
78     auto nativeCJRelativeTimeFormat = FFIData::Create<RelativeTimeFormatImpl>(errCode);
79     if (!nativeCJRelativeTimeFormat) {
80         return 0;
81     }
82     return nativeCJRelativeTimeFormat->GetID();
83 }
84 
FfiOHOSRelativeTimeFormatImplConstructorwithLocale(char * locale,CRelativeTimeFormatInputOptions options,int64_t flag,int32_t * errCode)85 int64_t FfiOHOSRelativeTimeFormatImplConstructorwithLocale(
86     char *locale, CRelativeTimeFormatInputOptions options, int64_t flag, int32_t *errCode)
87 {
88     auto nativeCJRelativeTimeFormat = FFIData::Create<RelativeTimeFormatImpl>(locale, options, flag, errCode);
89     if (!nativeCJRelativeTimeFormat) {
90         return 0;
91     }
92     return nativeCJRelativeTimeFormat->GetID();
93 }
94 
FfiOHOSRelativeTimeFormatImplConstructorwithArrayLocale(CArrString locale,CRelativeTimeFormatInputOptions options,int64_t flag,int32_t * errCode)95 int64_t FfiOHOSRelativeTimeFormatImplConstructorwithArrayLocale(
96     CArrString locale, CRelativeTimeFormatInputOptions options, int64_t flag, int32_t *errCode)
97 {
98     auto nativeCJRelativeTimeFormat = FFIData::Create<RelativeTimeFormatImpl>(locale, options, flag, errCode);
99     if (!nativeCJRelativeTimeFormat) {
100         return 0;
101     }
102     return nativeCJRelativeTimeFormat->GetID();
103 }
104 
FfiOHOSRelativeTimeFormatImplFormat(int64_t id,double number,char * unit)105 char *FfiOHOSRelativeTimeFormatImplFormat(int64_t id, double number, char *unit)
106 {
107     auto instance = FFIData::GetData<RelativeTimeFormatImpl>(id);
108     if (!instance) {
109         HILOG_ERROR_I18N("The RelativeTimeFormatImpl instance is nullptr");
110         return nullptr;
111     }
112     return instance->Format(number, unit);
113 }
114 
FfiOHOSRelativeTimeFormatImplFormatToParts(int64_t id,double number,char * unit)115 CArrArrString FfiOHOSRelativeTimeFormatImplFormatToParts(int64_t id, double number, char *unit)
116 {
117     auto instance = FFIData::GetData<RelativeTimeFormatImpl>(id);
118     if (!instance) {
119         CArrArrString ret = { nullptr };
120         HILOG_ERROR_I18N("The RelativeTimeFormatImpl instance is nullptr");
121         return ret;
122     }
123     return instance->FormatToParts(number, unit);
124 }
125 
FfiOHOSRelativeTimeFormatImplResolvedOptions(int64_t id)126 CRelativeTimeFormatResolveOptions FfiOHOSRelativeTimeFormatImplResolvedOptions(int64_t id)
127 {
128     auto instance = FFIData::GetData<RelativeTimeFormatImpl>(id);
129     if (!instance) {
130         struct CRelativeTimeFormatResolveOptions relativeTimeFormatResolveOptions = { nullptr };
131         HILOG_ERROR_I18N("The RelativeTimeFormatImpl instance is nullptr");
132         return relativeTimeFormatResolveOptions;
133     }
134     return instance->ResolveOptions();
135 }
136 
FfiOHOSPluralRulesImplConstructor(int32_t * errCode)137 int64_t FfiOHOSPluralRulesImplConstructor(int32_t *errCode)
138 {
139     auto nativeCJPluralRules = FFIData::Create<PluralRulesImpl>(errCode);
140     if (!nativeCJPluralRules) {
141         return 0;
142     }
143     return nativeCJPluralRules->GetID();
144 }
145 
FfiOHOSPluralRulesImplConstructorwithLocale(char * locale,CPluralRulesOptions options,int64_t flag,int32_t * errCode)146 int64_t FfiOHOSPluralRulesImplConstructorwithLocale(
147     char *locale, CPluralRulesOptions options, int64_t flag, int32_t *errCode)
148 {
149     auto nativeCJPluralRules = FFIData::Create<PluralRulesImpl>(locale, options, flag, errCode);
150     if (!nativeCJPluralRules) {
151         return 0;
152     }
153     return nativeCJPluralRules->GetID();
154 }
155 
FfiOHOSPluralRulesImplConstructorwithArrayLocale(CArrString locale,CPluralRulesOptions options,int64_t flag,int32_t * errCode)156 int64_t FfiOHOSPluralRulesImplConstructorwithArrayLocale(
157     CArrString locale, CPluralRulesOptions options, int64_t flag, int32_t *errCode)
158 {
159     auto nativeCJPluralRules = FFIData::Create<PluralRulesImpl>(locale, options, flag, errCode);
160     if (!nativeCJPluralRules) {
161         return 0;
162     }
163     return nativeCJPluralRules->GetID();
164 }
165 
FfiOHOSPluralRulesImplSelect(int64_t id,double n)166 char *FfiOHOSPluralRulesImplSelect(int64_t id, double n)
167 {
168     auto instance = FFIData::GetData<PluralRulesImpl>(id);
169     if (!instance) {
170         HILOG_ERROR_I18N("The PluralRulesImpl instance is nullptr");
171         return nullptr;
172     }
173     return instance->Select(n);
174 }
175 
FfiOHOSCollatorImplConstructor(int32_t * errCode)176 int64_t FfiOHOSCollatorImplConstructor(int32_t *errCode)
177 {
178     auto nativeCJCollator = FFIData::Create<CollatorImpl>(errCode);
179     if (!nativeCJCollator) {
180         return 0;
181     }
182     return nativeCJCollator->GetID();
183 }
184 
FfiOHOSCollatorImplConstructorwithLocale(char * locale,CCollatorOptions options,int64_t flag,int32_t * errCode)185 int64_t FfiOHOSCollatorImplConstructorwithLocale(char *locale, CCollatorOptions options, int64_t flag, int32_t *errCode)
186 {
187     auto nativeCJCollator = FFIData::Create<CollatorImpl>(locale, options, flag, errCode);
188     if (!nativeCJCollator) {
189         return 0;
190     }
191     return nativeCJCollator->GetID();
192 }
193 
FfiOHOSCollatorImplConstructorwithArrayLocale(CArrString locale,CCollatorOptions options,int64_t flag,int32_t * errCode)194 int64_t FfiOHOSCollatorImplConstructorwithArrayLocale(
195     CArrString locale, CCollatorOptions options, int64_t flag, int32_t *errCode)
196 {
197     auto nativeCJCollator = FFIData::Create<CollatorImpl>(locale, options, flag, errCode);
198     if (!nativeCJCollator) {
199         return 0;
200     }
201     return nativeCJCollator->GetID();
202 }
203 
FfiOHOSCollatorOptionsImplResolvedOptions(int64_t id)204 CCollatorOptions FfiOHOSCollatorOptionsImplResolvedOptions(int64_t id)
205 {
206     auto instance = FFIData::GetData<CollatorImpl>(id);
207     if (!instance) {
208         struct CCollatorOptions collatorResolveOptions = { nullptr };
209         HILOG_ERROR_I18N("The CollatorImpl instance is nullptr");
210         return collatorResolveOptions;
211     }
212     return instance->ResolveOptions();
213 }
214 
FfiOHOSCollatorImplCompare(int64_t id,char * str1,char * str2)215 int32_t FfiOHOSCollatorImplCompare(int64_t id, char *str1, char *str2)
216 {
217     auto instance = FFIData::GetData<CollatorImpl>(id);
218     if (!instance) {
219         HILOG_ERROR_I18N("The CollatorImpl instance is nullptr");
220         return 0;
221     }
222     return instance->Compare(str1, str2);
223 }
224 
FfiOHOSDateTimeFormatImplConstructor(int32_t * errCode)225 int64_t FfiOHOSDateTimeFormatImplConstructor(int32_t *errCode)
226 {
227     auto nativeCJDateTimeFormat = FFIData::Create<DateTimeFormatImpl>(errCode);
228     if (!nativeCJDateTimeFormat) {
229         return 0;
230     }
231     return nativeCJDateTimeFormat->GetID();
232 }
233 
FfiOHOSDateTimeFormatImplConstructorwithLocale(char * locale,CDateTimeOptions options,int64_t flag,int32_t * errCode)234 int64_t FfiOHOSDateTimeFormatImplConstructorwithLocale(
235     char *locale, CDateTimeOptions options, int64_t flag, int32_t *errCode)
236 {
237     auto nativeCJDateTimeFormat = FFIData::Create<DateTimeFormatImpl>(locale, options, flag, errCode);
238     if (!nativeCJDateTimeFormat) {
239         return 0;
240     }
241     return nativeCJDateTimeFormat->GetID();
242 }
243 
FfiOHOSDateTimeFormatImplConstructorwithArrayLocale(CArrString locale,CDateTimeOptions options,int64_t flag,int32_t * errCode)244 int64_t FfiOHOSDateTimeFormatImplConstructorwithArrayLocale(
245     CArrString locale, CDateTimeOptions options, int64_t flag, int32_t *errCode)
246 {
247     auto nativeCJDateTimeFormat = FFIData::Create<DateTimeFormatImpl>(locale, options, flag, errCode);
248     if (!nativeCJDateTimeFormat) {
249         return 0;
250     }
251     return nativeCJDateTimeFormat->GetID();
252 }
253 
FfiOHOSDateTimeFormatOptionsImplResolvedOptions(int64_t id)254 CDateTimeOptions FfiOHOSDateTimeFormatOptionsImplResolvedOptions(int64_t id)
255 {
256     auto instance = FFIData::GetData<DateTimeFormatImpl>(id);
257     if (!instance) {
258         struct CDateTimeOptions dateTimeOptions = { nullptr };
259         HILOG_ERROR_I18N("The DateTimeFormatImpl instance is nullptr");
260         return dateTimeOptions;
261     }
262     return instance->ResolveOptions();
263 }
264 
FfiOHOSDateTimeFormatOptionsImplFormat(int64_t id,int64_t date)265 char *FfiOHOSDateTimeFormatOptionsImplFormat(int64_t id, int64_t date)
266 {
267     auto instance = FFIData::GetData<DateTimeFormatImpl>(id);
268     if (!instance) {
269         HILOG_ERROR_I18N("The DateTimeFormatImpl instance is nullptr");
270         return nullptr;
271     }
272     return instance->Format(date);
273 }
274 
FfiOHOSDateTimeFormatOptionsImplFormatRange(int64_t id,int64_t startDate,int64_t endDate)275 char *FfiOHOSDateTimeFormatOptionsImplFormatRange(int64_t id, int64_t startDate, int64_t endDate)
276 {
277     auto instance = FFIData::GetData<DateTimeFormatImpl>(id);
278     if (!instance) {
279         HILOG_ERROR_I18N("The DateTimeFormatImpl instance is nullptr");
280         return nullptr;
281     }
282     return instance->FormatRange(startDate, endDate);
283 }
284 
FfiOHOSLocaleImplConstructor(int32_t * errCode)285 int64_t FfiOHOSLocaleImplConstructor(int32_t *errCode)
286 {
287     auto nativeCJLocale = FFIData::Create<LocaleImpl>(errCode);
288     if (!nativeCJLocale) {
289         return 0;
290     }
291 
292     return nativeCJLocale->GetID();
293 }
294 
FfiOHOSLocaleImplConstructorwithLocale(char * locale,CLocaleOptions options,int64_t flag,int32_t * errCode)295 int64_t FfiOHOSLocaleImplConstructorwithLocale(char *locale, CLocaleOptions options, int64_t flag, int32_t *errCode)
296 {
297     auto nativeCJLocale = FFIData::Create<LocaleImpl>(locale, options, flag, errCode);
298     if (!nativeCJLocale) {
299         return 0;
300     }
301     return nativeCJLocale->GetID();
302 }
303 
FfiOHOSLocaleImplToString(int64_t id)304 char *FfiOHOSLocaleImplToString(int64_t id)
305 {
306     auto instance = FFIData::GetData<LocaleImpl>(id);
307     if (!instance) {
308         HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
309         return nullptr;
310     }
311     return instance->ToString();
312 }
313 
FfiOHOSLocaleImplMaximize(int64_t id)314 char *FfiOHOSLocaleImplMaximize(int64_t id)
315 {
316     auto instance = FFIData::GetData<LocaleImpl>(id);
317     if (!instance) {
318         HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
319         return nullptr;
320     }
321     return instance->Maximize();
322 }
323 
FfiOHOSLocaleImplMinimize(int64_t id)324 char *FfiOHOSLocaleImplMinimize(int64_t id)
325 {
326     auto instance = FFIData::GetData<LocaleImpl>(id);
327     if (!instance) {
328         HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
329         return nullptr;
330     }
331     return instance->Minimize();
332 }
333 
FfiOHOSLocaleImplGetLanguage(int64_t id)334 char *FfiOHOSLocaleImplGetLanguage(int64_t id)
335 {
336     auto instance = FFIData::GetData<LocaleImpl>(id);
337     if (!instance) {
338         HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
339         return nullptr;
340     }
341     return instance->GetLanguage();
342 }
343 
FfiOHOSLocaleImplGetRegion(int64_t id)344 char *FfiOHOSLocaleImplGetRegion(int64_t id)
345 {
346     auto instance = FFIData::GetData<LocaleImpl>(id);
347     if (!instance) {
348         HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
349         return nullptr;
350     }
351     return instance->GetRegion();
352 }
353 
FfiOHOSLocaleImplGetScript(int64_t id)354 char *FfiOHOSLocaleImplGetScript(int64_t id)
355 {
356     auto instance = FFIData::GetData<LocaleImpl>(id);
357     if (!instance) {
358         HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
359         return nullptr;
360     }
361     return instance->GetScript();
362 }
363 
FfiOHOSLocaleImplGetBaseName(int64_t id)364 char *FfiOHOSLocaleImplGetBaseName(int64_t id)
365 {
366     auto instance = FFIData::GetData<LocaleImpl>(id);
367     if (!instance) {
368         HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
369         return nullptr;
370     }
371     return instance->GetBaseName();
372 }
373 
FfiOHOSLocaleImplGetCaseFirst(int64_t id)374 char *FfiOHOSLocaleImplGetCaseFirst(int64_t id)
375 {
376     auto instance = FFIData::GetData<LocaleImpl>(id);
377     if (!instance) {
378         HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
379         return nullptr;
380     }
381     return instance->GetCaseFirst();
382 }
383 
FfiOHOSLocaleImplGetCalendar(int64_t id)384 char *FfiOHOSLocaleImplGetCalendar(int64_t id)
385 {
386     auto instance = FFIData::GetData<LocaleImpl>(id);
387     if (!instance) {
388         HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
389         return nullptr;
390     }
391     return instance->GetCalendar();
392 }
393 
FfiOHOSLocaleImplGetCollation(int64_t id)394 char *FfiOHOSLocaleImplGetCollation(int64_t id)
395 {
396     auto instance = FFIData::GetData<LocaleImpl>(id);
397     if (!instance) {
398         HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
399         return nullptr;
400     }
401     return instance->GetCollation();
402 }
403 
FfiOHOSLocaleImplGetHourCycle(int64_t id)404 char *FfiOHOSLocaleImplGetHourCycle(int64_t id)
405 {
406     auto instance = FFIData::GetData<LocaleImpl>(id);
407     if (!instance) {
408         HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
409         return nullptr;
410     }
411     return instance->GetHourCycle();
412 }
413 
FfiOHOSLocaleImplGetNumberingSystem(int64_t id)414 char *FfiOHOSLocaleImplGetNumberingSystem(int64_t id)
415 {
416     auto instance = FFIData::GetData<LocaleImpl>(id);
417     if (!instance) {
418         HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
419         return nullptr;
420     }
421     return instance->GetNumberingSystem();
422 }
423 
FfiOHOSLocaleImplGetNumeric(int64_t id)424 char *FfiOHOSLocaleImplGetNumeric(int64_t id)
425 {
426     auto instance = FFIData::GetData<LocaleImpl>(id);
427     if (!instance) {
428         HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
429         return nullptr;
430     }
431     return instance->GetNumeric();
432 }
433 }
434 }  // namespace Intl
435 }  // namespace I18n
436 }  // namespace Global
437 }  // namespace OHOS