114cf0368Sopenharmony_ci 214cf0368Sopenharmony_ci/* 314cf0368Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 414cf0368Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 514cf0368Sopenharmony_ci * you may not use this file except in compliance with the License. 614cf0368Sopenharmony_ci * You may obtain a copy of the License at 714cf0368Sopenharmony_ci * 814cf0368Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 914cf0368Sopenharmony_ci * 1014cf0368Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1114cf0368Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1214cf0368Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1314cf0368Sopenharmony_ci * See the License for the specific language governing permissions and 1414cf0368Sopenharmony_ci * limitations under the License. 1514cf0368Sopenharmony_ci */ 1614cf0368Sopenharmony_ci 1714cf0368Sopenharmony_ci#include "unified_data_ffi.h" 1814cf0368Sopenharmony_ci#include "unified_data_impl.h" 1914cf0368Sopenharmony_ci#include "unified_record_impl.h" 2014cf0368Sopenharmony_ci#include "cj_common_ffi.h" 2114cf0368Sopenharmony_ci 2214cf0368Sopenharmony_ciusing namespace OHOS::FFI; 2314cf0368Sopenharmony_ciusing namespace OHOS::UDMF; 2414cf0368Sopenharmony_ci 2514cf0368Sopenharmony_cinamespace OHOS { 2614cf0368Sopenharmony_cinamespace UDMF { 2714cf0368Sopenharmony_ciextern "C" { 2814cf0368Sopenharmony_ci 2914cf0368Sopenharmony_ci int64_t FfiUDMFUnifiedDataConstructor() 3014cf0368Sopenharmony_ci { 3114cf0368Sopenharmony_ci auto nativeCJUnifiedData = FFIData::Create<CUnifiedData>(); 3214cf0368Sopenharmony_ci if (nativeCJUnifiedData == nullptr) { 3314cf0368Sopenharmony_ci return -1; 3414cf0368Sopenharmony_ci } 3514cf0368Sopenharmony_ci return nativeCJUnifiedData->GetID(); 3614cf0368Sopenharmony_ci } 3714cf0368Sopenharmony_ci 3814cf0368Sopenharmony_ci int64_t FfiUDMFUnifiedDataConstructorWithRecord(int64_t unifiedRecordId) 3914cf0368Sopenharmony_ci { 4014cf0368Sopenharmony_ci auto record = FFIData::GetData<CUnifiedRecord>(unifiedRecordId); 4114cf0368Sopenharmony_ci if (record == nullptr) { 4214cf0368Sopenharmony_ci return -1; 4314cf0368Sopenharmony_ci } 4414cf0368Sopenharmony_ci 4514cf0368Sopenharmony_ci auto nativeCJUnifiedData = FFIData::Create<CUnifiedData>(record); 4614cf0368Sopenharmony_ci if (nativeCJUnifiedData == nullptr) { 4714cf0368Sopenharmony_ci return -1; 4814cf0368Sopenharmony_ci } 4914cf0368Sopenharmony_ci return nativeCJUnifiedData->GetID(); 5014cf0368Sopenharmony_ci } 5114cf0368Sopenharmony_ci 5214cf0368Sopenharmony_ci void FfiUDMFUnifiedDataAddRecord(int64_t unifiedDataId, int64_t unifiedRecordId) 5314cf0368Sopenharmony_ci { 5414cf0368Sopenharmony_ci auto record = FFIData::GetData<CUnifiedRecord>(unifiedRecordId); 5514cf0368Sopenharmony_ci if (record == nullptr) { 5614cf0368Sopenharmony_ci return; 5714cf0368Sopenharmony_ci } 5814cf0368Sopenharmony_ci 5914cf0368Sopenharmony_ci auto data = FFIData::GetData<CUnifiedData>(unifiedDataId); 6014cf0368Sopenharmony_ci if (data == nullptr) { 6114cf0368Sopenharmony_ci return; 6214cf0368Sopenharmony_ci } 6314cf0368Sopenharmony_ci 6414cf0368Sopenharmony_ci data->AddRecord(record); 6514cf0368Sopenharmony_ci } 6614cf0368Sopenharmony_ci 6714cf0368Sopenharmony_ci CArrUnifiedRecord FfiUDMFUnifiedDataGetRecords(int64_t unifiedDataId) 6814cf0368Sopenharmony_ci { 6914cf0368Sopenharmony_ci auto data = FFIData::GetData<CUnifiedData>(unifiedDataId); 7014cf0368Sopenharmony_ci if (data == nullptr) { 7114cf0368Sopenharmony_ci return CArrUnifiedRecord{}; 7214cf0368Sopenharmony_ci } 7314cf0368Sopenharmony_ci 7414cf0368Sopenharmony_ci return data->GetRecords(); 7514cf0368Sopenharmony_ci } 7614cf0368Sopenharmony_ci 7714cf0368Sopenharmony_ci bool FfiUDMFUnifiedDataHasType(int64_t unifiedDataId, const char *type) 7814cf0368Sopenharmony_ci { 7914cf0368Sopenharmony_ci auto data = FFIData::GetData<CUnifiedData>(unifiedDataId); 8014cf0368Sopenharmony_ci if (data == nullptr) { 8114cf0368Sopenharmony_ci return false; 8214cf0368Sopenharmony_ci } 8314cf0368Sopenharmony_ci 8414cf0368Sopenharmony_ci return data->HasType(type); 8514cf0368Sopenharmony_ci } 8614cf0368Sopenharmony_ci 8714cf0368Sopenharmony_ci CArrString FfiUDMFUnifiedDataGetTypes(int64_t unifiedDataId) 8814cf0368Sopenharmony_ci { 8914cf0368Sopenharmony_ci auto data = FFIData::GetData<CUnifiedData>(unifiedDataId); 9014cf0368Sopenharmony_ci if (data == nullptr) { 9114cf0368Sopenharmony_ci return CArrString{}; 9214cf0368Sopenharmony_ci } 9314cf0368Sopenharmony_ci 9414cf0368Sopenharmony_ci return data->GetTypes(); 9514cf0368Sopenharmony_ci } 9614cf0368Sopenharmony_ci} 9714cf0368Sopenharmony_ci} 9814cf0368Sopenharmony_ci} 99