Vowpal Wabbit
Classes | Macros | Typedefs | Functions | Variables
v_array.h File Reference
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <cassert>
#include <cstdint>
#include "vw_exception.h"
#include "memory.h"

Go to the source code of this file.

Classes

struct  v_array< T >
 

Macros

#define NOMINMAX
 
#define __INLINE   inline
 

Typedefs

typedef v_array< unsigned char > v_string
 

Functions

template<class T >
v_array< T > v_init ()
 
template<class T >
void copy_array (v_array< T > &dst, const v_array< T > &src)
 
template<class T >
void copy_array_no_memcpy (v_array< T > &dst, const v_array< T > &src)
 
template<class T >
void copy_array (v_array< T > &dst, const v_array< T > &src, T(*copy_item)(T &))
 
template<class T >
void push_many (v_array< T > &v, const T *_begin, size_t num)
 
template<class T >
void calloc_reserve (v_array< T > &v, size_t length)
 
template<class T >
v_array< T > pop (v_array< v_array< T > > &stack)
 
template<class T >
bool v_array_contains (v_array< T > &A, T x)
 
template<class T >
std::ostream & operator<< (std::ostream &os, const v_array< T > &v)
 
template<class T , class U >
std::ostream & operator<< (std::ostream &os, const v_array< std::pair< T, U > > &v)
 
v_string string2v_string (const std::string &s)
 
std::string v_string2string (const v_string &v_s)
 

Variables

const size_t erase_point = ~((1u << 10u) - 1u)
 

Macro Definition Documentation

◆ __INLINE

#define __INLINE   inline

Definition at line 19 of file v_array.h.

◆ NOMINMAX

#define NOMINMAX

Definition at line 8 of file v_array.h.

Typedef Documentation

◆ v_string

typedef v_array<unsigned char> v_string

Definition at line 263 of file v_array.h.

Function Documentation

◆ calloc_reserve()

template<class T >
void calloc_reserve ( v_array< T > &  v,
size_t  length 
)

Definition at line 220 of file v_array.h.

References v_array< T >::_begin, v_array< T >::_end, and v_array< T >::end_array.

Referenced by mwt_setup().

221 {
222  v._begin = calloc_or_throw<T>(length);
223  v._end = v._begin;
224  v.end_array = v._begin + length;
225 }
T * _end
Definition: v_array.h:35
T * _begin
Definition: v_array.h:34
T * end_array
Definition: v_array.h:38

◆ copy_array() [1/2]

template<class T >
void copy_array ( v_array< T > &  dst,
const v_array< T > &  src 
)

Definition at line 185 of file v_array.h.

References v_array< T >::_begin, v_array< T >::clear(), push_many(), and v_array< T >::size().

Referenced by memory_tree_ns::copy_example_data(), VW::copy_example_data(), VW::copy_example_metadata(), MULTILABEL::copy_label(), CB::copy_label(), COST_SENSITIVE::copy_label(), CCB::copy_label(), features::deep_copy_from(), learn(), predict(), and SelectiveBranchingMT::run().

186 {
187  dst.clear();
188  push_many(dst, src._begin, src.size());
189 }
size_t size() const
Definition: v_array.h:68
void push_many(v_array< T > &v, const T *_begin, size_t num)
Definition: v_array.h:207
void clear()
Definition: v_array.h:88
T * _begin
Definition: v_array.h:34

◆ copy_array() [2/2]

template<class T >
void copy_array ( v_array< T > &  dst,
const v_array< T > &  src,
T(*)(T &)  copy_item 
)

Definition at line 200 of file v_array.h.

References v_array< T >::_begin, v_array< T >::_end, v_array< T >::clear(), and v_array< T >::push_back().

201 {
202  dst.clear();
203  for (T* item = src._begin; item != src._end; ++item) dst.push_back(copy_item(*item));
204 }
void push_back(const T &new_ele)
Definition: v_array.h:107
void clear()
Definition: v_array.h:88
T * _end
Definition: v_array.h:35
T * _begin
Definition: v_array.h:34

◆ copy_array_no_memcpy()

template<class T >
void copy_array_no_memcpy ( v_array< T > &  dst,
const v_array< T > &  src 
)

Definition at line 193 of file v_array.h.

References v_array< T >::_begin, v_array< T >::_end, v_array< T >::clear(), and v_array< T >::push_back().

Referenced by features::deep_copy_from().

194 {
195  dst.clear();
196  for (T* item = src._begin; item != src._end; ++item) dst.push_back(*item);
197 }
void push_back(const T &new_ele)
Definition: v_array.h:107
void clear()
Definition: v_array.h:88
T * _end
Definition: v_array.h:35
T * _begin
Definition: v_array.h:34

◆ operator<<() [1/2]

template<class T >
std::ostream& operator<< ( std::ostream &  os,
const v_array< T > &  v 
)

Definition at line 246 of file v_array.h.

247 {
248  os << '[';
249  for (T* i = v._begin; i != v._end; ++i) os << ' ' << *i;
250  os << " ]";
251  return os;
252 }
T * _end
Definition: v_array.h:35
T * _begin
Definition: v_array.h:34

◆ operator<<() [2/2]

template<class T , class U >
std::ostream& operator<< ( std::ostream &  os,
const v_array< std::pair< T, U > > &  v 
)

Definition at line 255 of file v_array.h.

256 {
257  os << '[';
258  for (std::pair<T, U>* i = v._begin; i != v._end; ++i) os << ' ' << i->first << ':' << i->second;
259  os << " ]";
260  return os;
261 }
T * _end
Definition: v_array.h:35
T * _begin
Definition: v_array.h:34

◆ pop()

template<class T >
v_array<T> pop ( v_array< v_array< T > > &  stack)

Definition at line 228 of file v_array.h.

229 {
230  if (stack._end != stack._begin)
231  return *(--stack._end);
232  else
233  return v_array<T>();
234 }
T * _end
Definition: v_array.h:35
T * _begin
Definition: v_array.h:34

◆ push_many()

template<class T >
void push_many ( v_array< T > &  v,
const T *  _begin,
size_t  num 
)

Definition at line 207 of file v_array.h.

References v_array< T >::_begin, v_array< T >::_end, v_array< T >::end_array, v_array< T >::resize(), and v_array< T >::size().

Referenced by copy_array(), make_write_cache(), TC_parser< audit >::maybeFeature(), TC_parser< audit >::nameSpaceInfo(), TagState< audit >::String(), string2v_string(), and substring_to_example().

208 {
209  if (v._end + num >= v.end_array)
210  v.resize(std::max(2 * (size_t)(v.end_array - v._begin) + 3, v._end - v._begin + num));
211 #ifdef _WIN32
212  memcpy_s(v._end, v.size() - (num * sizeof(T)), _begin, num * sizeof(T));
213 #else
214  memcpy(v._end, _begin, num * sizeof(T));
215 #endif
216  v._end += num;
217 }
void resize(size_t length)
Definition: v_array.h:69
size_t size() const
Definition: v_array.h:68
T * _end
Definition: v_array.h:35
T * _begin
Definition: v_array.h:34
T * end_array
Definition: v_array.h:38

◆ string2v_string()

v_string string2v_string ( const std::string &  s)
inline

Definition at line 265 of file v_array.h.

References push_many(), and v_array< T >::size().

266 {
267  v_string res = v_init<unsigned char>();
268  if (!s.empty())
269  push_many(res, (unsigned char*)s.data(), s.size());
270  return res;
271 }
size_t size() const
Definition: v_array.h:68
void push_many(v_array< T > &v, const T *_begin, size_t num)
Definition: v_array.h:207

◆ v_array_contains()

template<class T >
bool v_array_contains ( v_array< T > &  A,
x 
)

Definition at line 237 of file v_array.h.

References v_array< T >::_begin, and v_array< T >::_end.

Referenced by memory_tree_ns::collect_labels_from_leaf(), Search::get_training_timesteps(), Search::single_prediction_notLDF(), and memory_tree_ns::train_one_against_some_at_leaf().

238 {
239  for (T* e = A._begin; e != A._end; ++e)
240  if (*e == x)
241  return true;
242  return false;
243 }
T * _end
Definition: v_array.h:35
T * _begin
Definition: v_array.h:34

◆ v_init()

template<class T >
v_array<T> v_init ( )
inline

Definition at line 179 of file v_array.h.

180 {
181  return {nullptr, nullptr, nullptr, 0};
182 }

◆ v_string2string()

std::string v_string2string ( const v_string v_s)
inline

Definition at line 273 of file v_array.h.

References v_array< T >::_begin, and v_array< T >::_end.

274 {
275  std::string res;
276  for (unsigned char* i = v_s._begin; i != v_s._end; ++i) res.push_back(*i);
277  return res;
278 }
T * _end
Definition: v_array.h:35
T * _begin
Definition: v_array.h:34

Variable Documentation

◆ erase_point

const size_t erase_point = ~((1u << 10u) - 1u)

Definition at line 28 of file v_array.h.

Referenced by v_array< uint64_t >::clear().