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#ifndef NATIVE_PRINT_CONVERTER_H
16#define NATIVE_PRINT_CONVERTER_H
17
18#include <vector>
19#include <string>
20
21#include "ohprint.h"
22
23namespace OHOS::Print {
24#define SAFE_DELETE(address)        \
25    {                               \
26        if ((address) != nullptr) { \
27            delete (address);       \
28            (address) = nullptr;    \
29        }                           \
30    }
31
32#define SAFE_DELETE_ARRAY(address)  \
33    {                               \
34        if ((address) != nullptr) { \
35            delete[] (address);     \
36            (address) = nullptr;    \
37        }                           \
38    }
39
40inline bool IsValidString(const char *address)
41{
42    if (address == nullptr || address[0] == '\0') {
43        return false;
44    }
45    return true;
46}
47
48template <typename T>
49T *CopyArray(const std::vector<T> &list, uint32_t &count)
50{
51    count = 0;
52    size_t len = list.size();
53    if (len == 0) {
54        return nullptr;
55    }
56    T *dest = new (std::nothrow) T[len];
57    if (dest == nullptr) {
58        return nullptr;
59    }
60    if (memset_s(dest, len * sizeof(T), 0, len * sizeof(T)) != 0) {
61        delete[] dest;
62        dest = nullptr;
63        return nullptr;
64    }
65    for (size_t i = 0; i < len; i++) {
66        *(dest + i) = list[i];
67    }
68    count = len;
69    return dest;
70}
71
72template <typename T1, typename T2>
73T2 *CopyArray(const std::vector<T1> &list, uint32_t &count, bool (*ConvertFunction)(const T1 &src, T2 &dst))
74{
75    count = 0;
76    size_t len = list.size();
77    if (len == 0) {
78        return nullptr;
79    }
80    T2 *dest = new (std::nothrow) T2[len];
81    if (dest == nullptr) {
82        return nullptr;
83    }
84    if (memset_s(dest, len * sizeof(T2), 0, len * sizeof(T2)) != 0) {
85        delete[] dest;
86        dest = nullptr;
87        return nullptr;
88    }
89    for (size_t i = 0; i < len; i++) {
90        if (ConvertFunction(list[i], *(dest + count))) {
91            count++;
92        }
93    }
94    return dest;
95}
96
97Print_ErrorCode ConvertToNativeErrorCode(int32_t errorCode);
98Print_PrinterState ConvertPrinterState(uint32_t state);
99bool ConvertStringToInt(const char *src, int &dst);
100bool ConvertOrientationMode(const uint32_t &src, Print_OrientationMode &dst);
101bool ConvertColorMode(const uint32_t &src, Print_ColorMode &dst);
102bool ConvertDuplexMode(const uint32_t &src, Print_DuplexMode &dst);
103bool ConvertQuality(const uint32_t &src, Print_Quality &dst);
104std::string GetDocumentFormatString(Print_DocumentFormat format);
105std::string GetResolutionString(Print_Resolution resolution);
106}  // namespace OHOS::Print
107#endif  // NATIVE_PRINT_CONVERTER_H