rippled
STArray.h
1 //------------------------------------------------------------------------------
2 /*
3  This file is part of rippled: https://github.com/ripple/rippled
4  Copyright (c) 2012, 2013 Ripple Labs Inc.
5 
6  Permission to use, copy, modify, and/or distribute this software for any
7  purpose with or without fee is hereby granted, provided that the above
8  copyright notice and this permission notice appear in all copies.
9 
10  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18 //==============================================================================
19 
20 #ifndef RIPPLE_PROTOCOL_STARRAY_H_INCLUDED
21 #define RIPPLE_PROTOCOL_STARRAY_H_INCLUDED
22 
23 #include <ripple/basics/CountedObject.h>
24 #include <ripple/protocol/STObject.h>
25 
26 namespace ripple {
27 
28 class STArray final : public STBase, public CountedObject<STArray>
29 {
30 private:
32 
33  enum { reserveSize = 8 };
34 
36 
37 public:
38  // Read-only iteration
39  class Items;
40 
41  static char const*
43  {
44  return "STArray";
45  }
46 
47  using size_type = list_type::size_type;
48  using iterator = list_type::iterator;
49  using const_iterator = list_type::const_iterator;
50 
51  STArray();
52  STArray(STArray&&);
53  STArray(STArray const&) = default;
54  STArray(SField const& f, int n);
55  STArray(SerialIter& sit, SField const& f, int depth = 0);
56  explicit STArray(int n);
57  explicit STArray(SField const& f);
58  STArray&
59  operator=(STArray const&) = default;
60  STArray&
61  operator=(STArray&&);
62 
63  STBase*
64  copy(std::size_t n, void* buf) const override
65  {
66  return emplace(n, buf, *this);
67  }
68 
69  STBase*
70  move(std::size_t n, void* buf) override
71  {
72  return emplace(n, buf, std::move(*this));
73  }
74 
75  STObject&
77  {
78  return v_[j];
79  }
80 
81  STObject const&
83  {
84  return v_[j];
85  }
86 
87  STObject&
88  back()
89  {
90  return v_.back();
91  }
92 
93  STObject const&
94  back() const
95  {
96  return v_.back();
97  }
98 
99  template <class... Args>
100  void
101  emplace_back(Args&&... args)
102  {
103  v_.emplace_back(std::forward<Args>(args)...);
104  }
105 
106  void
107  push_back(STObject const& object)
108  {
109  v_.push_back(object);
110  }
111 
112  void
113  push_back(STObject&& object)
114  {
115  v_.push_back(std::move(object));
116  }
117 
118  iterator
120  {
121  return v_.begin();
122  }
123 
124  iterator
125  end()
126  {
127  return v_.end();
128  }
129 
131  begin() const
132  {
133  return v_.begin();
134  }
135 
137  end() const
138  {
139  return v_.end();
140  }
141 
142  size_type
143  size() const
144  {
145  return v_.size();
146  }
147 
148  bool
149  empty() const
150  {
151  return v_.empty();
152  }
153  void
155  {
156  v_.clear();
157  }
158  void
160  {
161  v_.reserve(n);
162  }
163  void
164  swap(STArray& a) noexcept
165  {
166  v_.swap(a.v_);
167  }
168 
169  virtual std::string
170  getFullText() const override;
171  virtual std::string
172  getText() const override;
173 
174  virtual Json::Value
175  getJson(JsonOptions index) const override;
176  virtual void
177  add(Serializer& s) const override;
178 
179  void
180  sort(bool (*compare)(const STObject& o1, const STObject& o2));
181 
182  bool
183  operator==(const STArray& s) const
184  {
185  return v_ == s.v_;
186  }
187  bool
188  operator!=(const STArray& s) const
189  {
190  return v_ != s.v_;
191  }
192 
193  virtual SerializedTypeID
194  getSType() const override
195  {
196  return STI_ARRAY;
197  }
198  virtual bool
199  isEquivalent(const STBase& t) const override;
200  virtual bool
201  isDefault() const override
202  {
203  return v_.empty();
204  }
205 };
206 
207 } // namespace ripple
208 
209 #endif
ripple::STArray::empty
bool empty() const
Definition: STArray.h:149
ripple::STArray::operator==
bool operator==(const STArray &s) const
Definition: STArray.h:183
ripple::CountedObject
Tracks the number of instances of an object.
Definition: CountedObject.h:110
ripple::STArray::move
STBase * move(std::size_t n, void *buf) override
Definition: STArray.h:70
ripple::Dir::const_iterator
Definition: Directory.h:49
std::string
STL class.
ripple::JsonOptions
JsonOptions
Definition: STBase.h:34
ripple::STArray::back
STObject const & back() const
Definition: STArray.h:94
ripple::STArray::iterator
list_type::iterator iterator
Definition: STArray.h:48
std::vector::reserve
T reserve(T... args)
std::vector< STObject >
std::vector::size
T size(T... args)
ripple::STArray::isEquivalent
virtual bool isEquivalent(const STBase &t) const override
Definition: STArray.cpp:166
ripple::STArray::getJson
virtual Json::Value getJson(JsonOptions index) const override
Definition: STArray.cpp:140
ripple::SerializedTypeID
SerializedTypeID
Definition: SField.h:52
ripple::STArray::push_back
void push_back(STObject const &object)
Definition: STArray.h:107
ripple::STI_ARRAY
@ STI_ARRAY
Definition: SField.h:69
std::vector::back
T back(T... args)
ripple::STArray::const_iterator
list_type::const_iterator const_iterator
Definition: STArray.h:49
ripple::STArray::end
iterator end()
Definition: STArray.h:125
std::vector::clear
T clear(T... args)
ripple::STArray::begin
const_iterator begin() const
Definition: STArray.h:131
std::vector::push_back
T push_back(T... args)
ripple::STBase::emplace
static STBase * emplace(std::size_t n, void *buf, T &&val)
Definition: STBase.h:149
ripple::STArray::begin
iterator begin()
Definition: STArray.h:119
ripple::STArray::STArray
STArray()
Definition: STArray.cpp:27
ripple::STArray::clear
void clear()
Definition: STArray.h:154
ripple::STArray::size_type
list_type::size_type size_type
Definition: STArray.h:47
ripple::STArray::push_back
void push_back(STObject &&object)
Definition: STArray.h:113
ripple::compare
int compare(base_uint< Bits, Tag > const &a, base_uint< Bits, Tag > const &b)
Definition: base_uint.h:497
ripple::STArray::operator!=
bool operator!=(const STArray &s) const
Definition: STArray.h:188
ripple::STArray::isDefault
virtual bool isDefault() const override
Definition: STArray.h:201
ripple::STArray::getCountedObjectName
static char const * getCountedObjectName()
Definition: STArray.h:42
ripple::STArray
Definition: STArray.h:28
ripple::STArray::operator=
STArray & operator=(STArray const &)=default
ripple::STArray::swap
void swap(STArray &a) noexcept
Definition: STArray.h:164
ripple::STArray::getSType
virtual SerializedTypeID getSType() const override
Definition: STArray.h:194
ripple::SerialIter
Definition: Serializer.h:368
ripple::STArray::operator[]
STObject const & operator[](std::size_t j) const
Definition: STArray.h:82
ripple::STArray::getFullText
virtual std::string getFullText() const override
Definition: STArray.cpp:102
ripple::STArray::sort
void sort(bool(*compare)(const STObject &o1, const STObject &o2))
Definition: STArray.cpp:173
ripple::STArray::end
const_iterator end() const
Definition: STArray.h:137
ripple::STArray::back
STObject & back()
Definition: STArray.h:88
std::vector::swap
T swap(T... args)
ripple::STArray::getText
virtual std::string getText() const override
Definition: STArray.cpp:121
ripple::Serializer
Definition: Serializer.h:43
ripple::STObject
Definition: STObject.h:51
std::vector::emplace_back
T emplace_back(T... args)
ripple
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: RCLCensorshipDetector.h:29
ripple::SField
Identifies fields.
Definition: SField.h:109
ripple::STBase
A type which can be exported to a well known binary format.
Definition: STBase.h:62
ripple::STArray::emplace_back
void emplace_back(Args &&... args)
Definition: STArray.h:101
std::vector::begin
T begin(T... args)
ripple::STArray::copy
STBase * copy(std::size_t n, void *buf) const override
Definition: STArray.h:64
std::vector::empty
T empty(T... args)
std::size_t
std::vector::end
T end(T... args)
ripple::STArray::size
size_type size() const
Definition: STArray.h:143
ripple::STArray::operator[]
STObject & operator[](std::size_t j)
Definition: STArray.h:76
ripple::STArray::reserveSize
@ reserveSize
Definition: STArray.h:33
ripple::STArray::v_
list_type v_
Definition: STArray.h:35
ripple::STArray::add
virtual void add(Serializer &s) const override
Definition: STArray.cpp:155
ripple::STArray::reserve
void reserve(std::size_t n)
Definition: STArray.h:159
Json::Value
Represents a JSON value.
Definition: json_value.h:145