1 /* 2 * Copyright (c) 2022 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 #ifndef DATASHARE_PREDICATES_OBJECTS_H 17 #define DATASHARE_PREDICATES_OBJECTS_H 18 19 #include <variant> 20 #include <string> 21 #include <vector> 22 23 namespace OHOS { 24 namespace DataShare { 25 enum class DataSharePredicatesObjectsType { 26 TYPE_NULL = 0x06, 27 TYPE_INT_VECTOR, 28 TYPE_LONG_VECTOR, 29 TYPE_DOUBLE_VECTOR, 30 TYPE_STRING_VECTOR, 31 }; 32 33 using ObjectsType = DataSharePredicatesObjectsType; 34 class DataSharePredicatesObjects { 35 public: DataSharePredicatesObjects()36 DataSharePredicatesObjects() : type(ObjectsType::TYPE_NULL) {} 37 ~DataSharePredicatesObjects() = default; DataSharePredicatesObjects(DataSharePredicatesObjects && val)38 DataSharePredicatesObjects(DataSharePredicatesObjects &&val) noexcept : type(val.type), value(std::move(val.value)) 39 { 40 val.type = ObjectsType::TYPE_NULL; 41 } DataSharePredicatesObjects(const DataSharePredicatesObjects & val)42 DataSharePredicatesObjects(const DataSharePredicatesObjects &val) : type(val.type), value(val.value) {} 43 DataSharePredicatesObjects &operator=(DataSharePredicatesObjects &&object) noexcept 44 { 45 if (this == &object) { 46 return *this; 47 } 48 type = object.type; 49 value = std::move(object.value); 50 object.type = ObjectsType::TYPE_NULL; 51 return *this; 52 } 53 DataSharePredicatesObjects &operator=(const DataSharePredicatesObjects &object) 54 { 55 if (this == &object) { 56 return *this; 57 } 58 type = object.type; 59 value = object.value; 60 return *this; 61 } DataSharePredicatesObjects(const std::vector<int> & val)62 DataSharePredicatesObjects(const std::vector<int> &val) : type(ObjectsType::TYPE_INT_VECTOR), value(val) {} DataSharePredicatesObjects(const std::vector<int64_t> & val)63 DataSharePredicatesObjects(const std::vector<int64_t> &val) : type(ObjectsType::TYPE_LONG_VECTOR), value(val) {} DataSharePredicatesObjects(const std::vector<double> & val)64 DataSharePredicatesObjects(const std::vector<double> &val) : type(ObjectsType::TYPE_DOUBLE_VECTOR), value(val) {} DataSharePredicatesObjects(const std::vector<std::string> & val)65 DataSharePredicatesObjects(const std::vector<std::string> &val) 66 : type(ObjectsType::TYPE_STRING_VECTOR), value(val) {} 67 GetType()68 DataSharePredicatesObjectsType GetType() const 69 { 70 return type; 71 } 72 73 DataSharePredicatesObjectsType type; 74 std::variant<std::monostate, std::vector<int>, std::vector<int64_t>, 75 std::vector<std::string>, std::vector<double>> value; 76 77 operator std::vector<int> () const 78 { 79 if (std::get_if<std::vector<int>>(&value) != nullptr) { 80 return std::get<std::vector<int>>(value); 81 } else { 82 return {}; 83 } 84 } 85 operator std::vector<int64_t> () const 86 { 87 if (std::get_if<std::vector<int64_t>>(&value) != nullptr) { 88 return std::get<std::vector<int64_t>>(value); 89 } else { 90 return {}; 91 } 92 } 93 operator std::vector<double> () const 94 { 95 if (std::get_if<std::vector<double>>(&value) != nullptr) { 96 return std::get<std::vector<double>>(value); 97 } else { 98 return {}; 99 } 100 } 101 operator std::vector<std::string> () const 102 { 103 if (std::get_if<std::vector<std::string>>(&value) != nullptr) { 104 return std::get<std::vector<std::string>>(value); 105 } else { 106 return {}; 107 } 108 } 109 }; 110 } // namespace DataShare 111 } // namespace OHOS 112 #endif 113