jubatus_core  0.1.2
Jubatus: Online machine learning framework for distributed environment
column_table.cpp
Go to the documentation of this file.
1 // Jubatus: Online machine learning framework for distributed environment
2 // Copyright (C) 2012,2013 Preferred Networks and Nippon Telegraph and Telephone Corporation.
3 //
4 // This library is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU Lesser General Public
6 // License version 2.1 as published by the Free Software Foundation.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16 
17 #include <algorithm>
18 #include <cstring>
19 #include <string>
20 #include <utility>
21 #include <vector>
22 
23 #include "column_table.hpp"
24 #include "../common/assert.hpp"
25 
26 namespace jutil = jubatus::util;
27 
28 namespace jubatus {
29 namespace core {
30 namespace storage {
31 
32 void column_table::init(const std::vector<column_type>& schema) {
33  jutil::concurrent::scoped_wlock lk(table_lock_);
34  /* defining tuple */
35  if (!columns_.empty()) {
36  throw storage_exception(
37  "Storage's schemas cannot be over written. Clear schemas before "
38  "init()");
39  }
40  for (std::vector<column_type>::const_iterator it = schema.begin();
41  it != schema.end();
42  ++it) {
43  columns_.push_back(detail::abstract_column(*it));
44  }
45 }
46 
48  jutil::concurrent::scoped_wlock lk(table_lock_);
49  // it keeps schema
50  keys_.clear();
51  versions_.clear();
52  for (size_t i = 0; i < columns_.size(); ++i) {
53  columns_[i].clear();
54  }
55  tuples_ = 0;
56  clock_ = 0;
57  index_.clear();
58 }
59 
60 std::pair<bool, uint64_t> column_table::exact_match(
61  const std::string& prefix) const {
62  jutil::concurrent::scoped_rlock lk(table_lock_);
63  index_table::const_iterator it = index_.find(prefix);
64  if (it == index_.end()) {
65  return std::make_pair(false, 0LLU);
66  } else {
67  return std::make_pair(true, it->second);
68  }
69 }
70 
72  JUBATUS_ASSERT(columns_[column_id].type().is(column_type::uint8_type));
73  return *static_cast<uint8_column*>(columns_[column_id].get());
74 }
76  JUBATUS_ASSERT(columns_[column_id].type().is(column_type::uint8_type));
77  return *static_cast<const uint8_column*>(columns_[column_id].get());
78 }
80  JUBATUS_ASSERT(columns_[column_id].type().is(column_type::uint16_type));
81  return *static_cast<uint16_column*>(columns_[column_id].get());
82 }
84  JUBATUS_ASSERT(columns_[column_id].type().is(column_type::uint16_type));
85  return *static_cast<const uint16_column*>(columns_[column_id].get());
86 }
88  JUBATUS_ASSERT(columns_[column_id].type().is(column_type::uint32_type));
89  return *static_cast<uint32_column*>(columns_[column_id].get());
90 }
92  JUBATUS_ASSERT(columns_[column_id].type().is(column_type::uint32_type));
93  return *static_cast<const_uint32_column*>(columns_[column_id].get());
94 }
96  JUBATUS_ASSERT(columns_[column_id].type().is(column_type::uint64_type));
97  return *static_cast<uint64_column*>(columns_[column_id].get());
98 }
100  JUBATUS_ASSERT(columns_[column_id].type().is(column_type::uint64_type));
101  return *static_cast<const_uint64_column*>(columns_[column_id].get());
102 }
104  JUBATUS_ASSERT(columns_[column_id].type().is(column_type::int8_type));
105  return *static_cast<int8_column*>(columns_[column_id].get());
106 }
108  JUBATUS_ASSERT(columns_[column_id].type().is(column_type::int8_type));
109  return *static_cast<const_int8_column*>(columns_[column_id].get());
110 }
112  JUBATUS_ASSERT(columns_[column_id].type().is(column_type::int16_type));
113  return *static_cast<int16_column*>(columns_[column_id].get());
114 }
116  JUBATUS_ASSERT(columns_[column_id].type().is(column_type::int16_type));
117  return *static_cast<const_int16_column*>(columns_[column_id].get());
118 }
120  JUBATUS_ASSERT(columns_[column_id].type().is(column_type::int32_type));
121  return *static_cast<int32_column*>(columns_[column_id].get());
122 }
124  JUBATUS_ASSERT(columns_[column_id].type().is(column_type::int32_type));
125  return *static_cast<const_int32_column*>(columns_[column_id].get());
126 }
128  JUBATUS_ASSERT(columns_[column_id].type().is(column_type::int64_type));
129  return *static_cast<int64_column*>(columns_[column_id].get());
130 }
132  JUBATUS_ASSERT(columns_[column_id].type().is(column_type::int64_type));
133  return *static_cast<const_int64_column*>(columns_[column_id].get());
134 }
136  JUBATUS_ASSERT(columns_[column_id].type().is(column_type::float_type));
137  return *static_cast<float_column*>(columns_[column_id].get());
138 }
140  JUBATUS_ASSERT(columns_[column_id].type().is(column_type::float_type));
141  return *static_cast<const_float_column*>(columns_[column_id].get());
142 }
144  JUBATUS_ASSERT(columns_[column_id].type().is(column_type::double_type));
145  return *static_cast<double_column*>(columns_[column_id].get());
146 }
148  JUBATUS_ASSERT(columns_[column_id].type().is(column_type::double_type));
149  return *static_cast<const_double_column*>(columns_[column_id].get());
150 }
152  JUBATUS_ASSERT(columns_[column_id].type().is(column_type::string_type));
153  return *static_cast<string_column*>(columns_[column_id].get());
154 }
156  JUBATUS_ASSERT(columns_[column_id].type().is(column_type::string_type));
157  return *static_cast<const_string_column*>(columns_[column_id].get());
158 }
161  return *static_cast<bit_vector_column*>(columns_[column_id].get());
162 }
164  size_t column_id) const {
166  return *static_cast<const_bit_vector_column*>(columns_[column_id].get());
167 }
168 
169 
170 } // namespace storage
171 } // namespace core
172 } // namespace jubatus
uint64_column & get_uint64_column(size_t column_id)
float_column & get_float_column(size_t column_id)
uint8_column & get_uint8_column(size_t column_id)
int64_column & get_int64_column(size_t column_id)
int32_column & get_int32_column(size_t column_id)
int16_column & get_int16_column(size_t column_id)
std::pair< bool, uint64_t > exact_match(const std::string &prefix) const
uint32_column & get_uint32_column(size_t column_id)
#define JUBATUS_ASSERT(expr)
Definition: assert.hpp:55
void init(const std::vector< column_type > &schema)
string_column & get_string_column(size_t column_id)
bit_vector_column & get_bit_vector_column(size_t column_id)
std::vector< version_t > versions_
std::vector< std::string > keys_
int8_column & get_int8_column(size_t column_id)
jubatus::util::concurrent::rw_mutex table_lock_
double_column & get_double_column(size_t column_id)
std::vector< detail::abstract_column > columns_
uint16_column & get_uint16_column(size_t column_id)