remotemono
RMonoVariantArray_Def.h
1 /*
2  Copyright 2020 David "Alemarius Nexus" Lerch
3 
4  This file is part of RemoteMono.
5 
6  RemoteMono is free software: you can redistribute it and/or modify
7  it under the terms of the GNU Lesser General Public License as published
8  by the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  RemoteMono is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU Lesser General Public License for more details.
15 
16  You should have received a copy of the GNU Lesser General Public License
17  along with RemoteMono. If not, see <https://www.gnu.org/licenses/>.
18  */
19 
20 #pragma once
21 
22 #include "../config.h"
23 
24 #include <vector>
25 #include "RMonoVariant_Def.h"
26 
27 
28 
29 namespace remotemono
30 {
31 
32 
33 
34 class RMonoVariant;
35 
36 
37 
47 {
48 public:
49  typedef RMonoVariantArray Self;
50 
51  typedef RMonoVariant Variant;
52 
53 public:
57  RMonoVariantArray() : isnull(false) {}
58 
62  RMonoVariantArray(std::nullptr_t) : isnull(true) {}
63 
64 
68  RMonoVariantArray(const Self& other) : vec(other.vec), isnull(other.isnull) {}
69 
73  RMonoVariantArray(Self&& other) : vec(std::move(other.vec)), isnull(other.isnull) { other.isnull = true; }
74 
75 
79  RMonoVariantArray(const std::vector<Variant>& vec) : vec(vec), isnull(false) {}
80 
84  RMonoVariantArray(std::vector<Variant>&& vec) : vec(vec), isnull(false) {}
85 
86 
90  RMonoVariantArray(std::initializer_list<Variant>&& list) : vec(list), isnull(false) {}
91 
92 
96  template <typename... VariantT>
97  RMonoVariantArray(VariantT... list) : vec({list...}), isnull(false) {}
98 
99 
103  Self& operator=(const Self& other)
104  {
105  if (&other != this) {
106  vec = other.vec;
107  isnull = other.isnull;
108  }
109  return *this;
110  }
111 
115  Self& operator=(Self&& other)
116  {
117  if (&other != this) {
118  vec = std::move(other.vec);
119  isnull = other.isnull;
120  other.isnull = true;
121  }
122  return *this;
123  }
124 
125 
129  size_t size() const { return vec.size(); }
130 
134  bool isNull() const { return isnull; }
135 
136 
140  typename std::vector<Variant>::iterator begin() { return vec.begin(); }
141 
145  typename std::vector<Variant>::const_iterator begin() const { return vec.begin(); }
146 
147 
151  typename std::vector<Variant>::iterator end() { return vec.end(); }
152 
156  typename std::vector<Variant>::const_iterator end() const { return vec.end(); }
157 
158 
162  Variant& operator[](size_t idx) { return vec[idx]; }
163 
167  const Variant& operator[](size_t idx) const { return vec[idx]; }
168 
169 
173  std::vector<Variant>& data() { return vec; }
174 
178  const std::vector<Variant>& data() const { return vec; }
179 
180 private:
181  std::vector<Variant> vec;
182  bool isnull;
183 };
184 
185 
186 
187 };
remotemono::RMonoVariantArray::RMonoVariantArray
RMonoVariantArray(VariantT... list)
Definition: RMonoVariantArray_Def.h:97
remotemono::RMonoVariantArray::RMonoVariantArray
RMonoVariantArray(std::nullptr_t)
Definition: RMonoVariantArray_Def.h:62
remotemono::RMonoVariantArray::RMonoVariantArray
RMonoVariantArray(Self &&other)
Definition: RMonoVariantArray_Def.h:73
remotemono::RMonoVariantArray::size
size_t size() const
Definition: RMonoVariantArray_Def.h:129
remotemono::RMonoVariantArray::data
const std::vector< Variant > & data() const
Definition: RMonoVariantArray_Def.h:178
remotemono::RMonoVariantArray::end
std::vector< Variant >::const_iterator end() const
Definition: RMonoVariantArray_Def.h:156
remotemono::RMonoVariantArray::RMonoVariantArray
RMonoVariantArray(const std::vector< Variant > &vec)
Definition: RMonoVariantArray_Def.h:79
remotemono::RMonoVariantArray::data
std::vector< Variant > & data()
Definition: RMonoVariantArray_Def.h:173
remotemono::RMonoVariantArray::begin
std::vector< Variant >::const_iterator begin() const
Definition: RMonoVariantArray_Def.h:145
remotemono::RMonoVariantArray::operator[]
Variant & operator[](size_t idx)
Definition: RMonoVariantArray_Def.h:162
remotemono::RMonoVariantArray::begin
std::vector< Variant >::iterator begin()
Definition: RMonoVariantArray_Def.h:140
remotemono::RMonoVariantArray::isNull
bool isNull() const
Definition: RMonoVariantArray_Def.h:134
remotemono::RMonoVariantArray::RMonoVariantArray
RMonoVariantArray()
Definition: RMonoVariantArray_Def.h:57
remotemono::RMonoVariantArray::RMonoVariantArray
RMonoVariantArray(std::vector< Variant > &&vec)
Definition: RMonoVariantArray_Def.h:84
remotemono::RMonoVariantArray
Definition: RMonoVariantArray_Def.h:47
remotemono::RMonoVariantArray::operator=
Self & operator=(Self &&other)
Definition: RMonoVariantArray_Def.h:115
remotemono::RMonoVariantArray::RMonoVariantArray
RMonoVariantArray(std::initializer_list< Variant > &&list)
Definition: RMonoVariantArray_Def.h:90
remotemono::RMonoVariantArray::operator[]
const Variant & operator[](size_t idx) const
Definition: RMonoVariantArray_Def.h:167
remotemono::RMonoVariant
Definition: RMonoVariant_Def.h:71
remotemono::RMonoVariantArray::operator=
Self & operator=(const Self &other)
Definition: RMonoVariantArray_Def.h:103
remotemono::RMonoVariantArray::end
std::vector< Variant >::iterator end()
Definition: RMonoVariantArray_Def.h:151
remotemono::RMonoVariantArray::RMonoVariantArray
RMonoVariantArray(const Self &other)
Definition: RMonoVariantArray_Def.h:68