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
29  : public STBase
30  , public CountedObject <STArray>
31 {
32 private:
34 
35  enum
36  {
38  };
39 
41 
42 public:
43  // Read-only iteration
44  class Items;
45 
46  static char const* getCountedObjectName () { return "STArray"; }
47 
48  using size_type = list_type::size_type;
49  using iterator = list_type::iterator;
50  using const_iterator = list_type::const_iterator;
51 
52  STArray();
53  STArray (STArray&&);
54  STArray (STArray const&) = default;
55  STArray (SField const& f, int n);
56  STArray (SerialIter& sit, SField const& f, int depth = 0);
57  explicit STArray (int n);
58  explicit STArray (SField const& f);
59  STArray& operator= (STArray const&) = default;
61 
62  STBase*
63  copy (std::size_t n, void* buf) const override
64  {
65  return emplace(n, buf, *this);
66  }
67 
68  STBase*
69  move (std::size_t n, void* buf) override
70  {
71  return emplace(n, buf, std::move(*this));
72  }
73 
75  {
76  return v_[j];
77  }
78 
80  {
81  return v_[j];
82  }
83 
84  STObject& back() { return v_.back(); }
85 
86  STObject const& back() const { return v_.back(); }
87 
88  template <class... Args>
89  void
90  emplace_back(Args&&... args)
91  {
92  v_.emplace_back(std::forward<Args>(args)...);
93  }
94 
95  void push_back (STObject const& object)
96  {
97  v_.push_back(object);
98  }
99 
100  void push_back (STObject&& object)
101  {
102  v_.push_back(std::move(object));
103  }
104 
106  {
107  return v_.begin ();
108  }
109 
111  {
112  return v_.end ();
113  }
114 
116  {
117  return v_.begin ();
118  }
119 
121  {
122  return v_.end ();
123  }
124 
125  size_type size () const
126  {
127  return v_.size ();
128  }
129 
130  bool empty () const
131  {
132  return v_.empty ();
133  }
134  void clear ()
135  {
136  v_.clear ();
137  }
139  {
140  v_.reserve (n);
141  }
142  void swap (STArray & a) noexcept
143  {
144  v_.swap (a.v_);
145  }
146 
147  virtual std::string getFullText () const override;
148  virtual std::string getText () const override;
149 
150  virtual Json::Value getJson (JsonOptions index) const override;
151  virtual void add (Serializer & s) const override;
152 
153  void sort (bool (*compare) (const STObject & o1, const STObject & o2));
154 
155  bool operator== (const STArray & s) const
156  {
157  return v_ == s.v_;
158  }
159  bool operator!= (const STArray & s) const
160  {
161  return v_ != s.v_;
162  }
163 
164  virtual SerializedTypeID getSType () const override
165  {
166  return STI_ARRAY;
167  }
168  virtual bool isEquivalent (const STBase & t) const override;
169  virtual bool isDefault () const override
170  {
171  return v_.empty ();
172  }
173 };
174 
175 } // ripple
176 
177 #endif
ripple::STArray::empty
bool empty() const
Definition: STArray.h:130
ripple::STArray::operator==
bool operator==(const STArray &s) const
Definition: STArray.h:155
ripple::CountedObject
Tracks the number of instances of an object.
Definition: CountedObject.h:102
ripple::STArray::move
STBase * move(std::size_t n, void *buf) override
Definition: STArray.h:69
std::string
STL class.
ripple::JsonOptions
JsonOptions
Definition: STBase.h:34
ripple::STArray::back
STObject const & back() const
Definition: STArray.h:86
ripple::STArray::iterator
list_type::iterator iterator
Definition: STArray.h:49
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:165
ripple::STArray::getJson
virtual Json::Value getJson(JsonOptions index) const override
Definition: STArray.cpp:141
ripple::SerializedTypeID
SerializedTypeID
Definition: SField.h:52
ripple::STArray::push_back
void push_back(STObject const &object)
Definition: STArray.h:95
ripple::STI_ARRAY
@ STI_ARRAY
Definition: SField.h:70
std::vector::back
T back(T... args)
ripple::STArray::const_iterator
list_type::const_iterator const_iterator
Definition: STArray.h:50
ripple::STArray::end
iterator end()
Definition: STArray.h:110
std::vector::clear
T clear(T... args)
ripple::STArray::begin
const_iterator begin() const
Definition: STArray.h:115
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:161
ripple::STArray::begin
iterator begin()
Definition: STArray.h:105
ripple::STArray::STArray
STArray()
Definition: STArray.cpp:27
ripple::STArray::clear
void clear()
Definition: STArray.h:134
ripple::STArray::size_type
list_type::size_type size_type
Definition: STArray.h:48
ripple::STArray::push_back
void push_back(STObject &&object)
Definition: STArray.h:100
ripple::compare
int compare(base_uint< Bits, Tag > const &a, base_uint< Bits, Tag > const &b)
Definition: base_uint.h:439
ripple::STArray::operator!=
bool operator!=(const STArray &s) const
Definition: STArray.h:159
ripple::STArray::isDefault
virtual bool isDefault() const override
Definition: STArray.h:169
ripple::STArray::getCountedObjectName
static char const * getCountedObjectName()
Definition: STArray.h:46
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:142
ripple::STArray::getSType
virtual SerializedTypeID getSType() const override
Definition: STArray.h:164
ripple::SerialIter
Definition: Serializer.h:311
ripple::STArray::getFullText
virtual std::string getFullText() const override
Definition: STArray.cpp:105
ripple::STArray::sort
void sort(bool(*compare)(const STObject &o1, const STObject &o2))
Definition: STArray.cpp:171
ripple::STArray::end
const_iterator end() const
Definition: STArray.h:120
ripple::STArray::back
STObject & back()
Definition: STArray.h:84
std::vector::swap
T swap(T... args)
ripple::STArray::getText
virtual std::string getText() const override
Definition: STArray.cpp:123
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:112
ripple::STBase
A type which can be exported to a well known binary format.
Definition: STBase.h:65
ripple::STArray::emplace_back
void emplace_back(Args &&... args)
Definition: STArray.h:90
std::vector::begin
T begin(T... args)
ripple::STArray::copy
STBase * copy(std::size_t n, void *buf) const override
Definition: STArray.h:63
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:125
ripple::STArray::operator[]
STObject & operator[](std::size_t j)
Definition: STArray.h:74
ripple::STArray::reserveSize
@ reserveSize
Definition: STArray.h:37
ripple::STArray::v_
list_type v_
Definition: STArray.h:40
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:138
Json::Value
Represents a JSON value.
Definition: json_value.h:141