Vowpal Wabbit
Public Member Functions | Private Attributes | List of all members
namedlabels Class Reference

#include <global_data.h>

Public Member Functions

 namedlabels (std::string label_list)
 
 ~namedlabels ()
 
uint32_t getK ()
 
uint64_t get (substring &s)
 
substring get (uint32_t v)
 

Private Attributes

std::vector< substringid2name
 
v_hashmap< substring, uint64_t > name2id
 
uint32_t K
 

Detailed Description

Definition at line 64 of file global_data.h.

Constructor & Destructor Documentation

◆ namedlabels()

namedlabels::namedlabels ( std::string  label_list)
inline

Definition at line 72 of file global_data.h.

References substring::begin, v_hashmap< K, V >::delete_v(), substring::end, v_hashmap< K, V >::get(), v_hashmap< K, V >::init(), v_hashmap< K, V >::put(), substring_equal(), THROW, tokenize(), and uniform_hash().

73  {
74  char* temp = calloc_or_throw<char>(1 + label_list.length());
75  memcpy(temp, label_list.c_str(), strlen(label_list.c_str()));
76  substring ss = {temp, nullptr};
77  ss.end = ss.begin + label_list.length();
78  tokenize(',', ss, id2name);
79 
80  K = (uint32_t)id2name.size();
81  name2id.delete_v(); // delete automatically allocated vector.
82  name2id.init(4 * K + 1, 0, substring_equal);
83  for (size_t k = 0; k < K; k++)
84  {
85  substring& l = id2name[k];
86  uint64_t hash = uniform_hash((unsigned char*)l.begin, l.end - l.begin, 378401);
87  uint64_t id = name2id.get(l, hash);
88  if (id != 0) // TODO: memory leak: char* temp
89  THROW("error: label dictionary initialized with multiple occurances of: " << l);
90  size_t len = l.end - l.begin;
91  substring l_copy = {calloc_or_throw<char>(len), nullptr};
92  memcpy(l_copy.begin, l.begin, len * sizeof(char));
93  l_copy.end = l_copy.begin + len;
94  name2id.put(l_copy, hash, k + 1);
95  }
96  }
uint32_t K
Definition: global_data.h:69
char * end
Definition: hashstring.h:10
char * begin
Definition: hashstring.h:9
v_hashmap< substring, uint64_t > name2id
Definition: global_data.h:68
VW_STD14_CONSTEXPR uint64_t uniform_hash(const void *key, size_t len, uint64_t seed)
Definition: hash.h:67
void tokenize(char delim, substring s, ContainerT &ret, bool allow_empty=false)
void init(size_t min_size, const V &def, bool(*eq)(const K &, const K &))
Definition: v_hashmap.h:54
bool substring_equal(const substring &a, const substring &b)
void delete_v()
Definition: v_hashmap.h:103
std::vector< substring > id2name
Definition: global_data.h:67
void put(const K &key, uint64_t hash, const V &val)
Definition: v_hashmap.h:275
#define THROW(args)
Definition: vw_exception.h:181
V & get(const K &key, uint64_t hash)
Definition: v_hashmap.h:203

◆ ~namedlabels()

namedlabels::~namedlabels ( )
inline

Definition at line 98 of file global_data.h.

References v_hashmap< K, V >::delete_v(), deleter(), and v_hashmap< K, V >::iter().

Referenced by VW::finish().

99  {
100  if (id2name.size() > 0)
101  free(id2name[0].begin);
103  name2id.delete_v();
104  }
v_hashmap< substring, uint64_t > name2id
Definition: global_data.h:68
void deleter(substring ss, uint64_t)
Definition: global_data.h:62
void delete_v()
Definition: v_hashmap.h:103
std::vector< substring > id2name
Definition: global_data.h:67
void iter(void(*func)(K, V))
Definition: v_hashmap.h:149

Member Function Documentation

◆ get() [1/2]

uint64_t namedlabels::get ( substring s)
inline

Definition at line 108 of file global_data.h.

References c, v_hashmap< K, V >::get(), and uniform_hash().

Referenced by MULTICLASS::finish_example(), finish_example_scores(), COST_SENSITIVE::output_example(), MULTICLASS::parse_label(), COST_SENSITIVE::parse_label(), Search::search::pretty_label(), MULTICLASS::print_label_pred(), and COST_SENSITIVE::print_update().

109  {
110  uint64_t hash = uniform_hash((unsigned char*)s.begin, s.end - s.begin, 378401);
111  uint64_t v = name2id.get(s, hash);
112  if (v == 0)
113  {
114  std::cerr << "warning: missing named label '";
115  for (char* c = s.begin; c != s.end; c++) std::cerr << *c;
116  std::cerr << '\'' << std::endl;
117  }
118  return v;
119  }
char * end
Definition: hashstring.h:10
char * begin
Definition: hashstring.h:9
v_hashmap< substring, uint64_t > name2id
Definition: global_data.h:68
VW_STD14_CONSTEXPR uint64_t uniform_hash(const void *key, size_t len, uint64_t seed)
Definition: hash.h:67
V & get(const K &key, uint64_t hash)
Definition: v_hashmap.h:203
constexpr uint64_t c
Definition: rand48.cc:12

◆ get() [2/2]

substring namedlabels::get ( uint32_t  v)
inline

Definition at line 121 of file global_data.h.

122  {
123  if ((v == 0) || (v > K))
124  {
125  substring ss = {nullptr, nullptr};
126  return ss;
127  }
128  else
129  return id2name[v - 1];
130  }
uint32_t K
Definition: global_data.h:69
std::vector< substring > id2name
Definition: global_data.h:67

◆ getK()

uint32_t namedlabels::getK ( )
inline

Definition at line 106 of file global_data.h.

Referenced by oaa_setup(), and parse_example_tweaks().

106 { return K; }
uint32_t K
Definition: global_data.h:69

Member Data Documentation

◆ id2name

std::vector<substring> namedlabels::id2name
private

Definition at line 67 of file global_data.h.

◆ K

uint32_t namedlabels::K
private

Definition at line 69 of file global_data.h.

◆ name2id

v_hashmap<substring, uint64_t> namedlabels::name2id
private

Definition at line 68 of file global_data.h.


The documentation for this class was generated from the following file: