jubatus_core  0.1.2
Jubatus: Online machine learning framework for distributed environment
Public Member Functions | Private Attributes | List of all members
jubatus::core::driver::driver_base::mixable_holder Class Reference

#include <driver.hpp>

Inheritance diagram for jubatus::core::driver::driver_base::mixable_holder:
Inheritance graph
Collaboration diagram for jubatus::core::driver::driver_base::mixable_holder:
Collaboration graph

Public Member Functions

framework::diff_object convert_diff_object (const msgpack::object &) const
 
void get_argument (framework::packer &) const
 
void get_diff (framework::packer &) const
 
std::vector< storage::versionget_versions () const
 
void mix (const msgpack::object &obj, framework::diff_object) const
 
std::set< std::string > mixables () const
 
void pull (const msgpack::object &arg, framework::packer &) const
 
void push (const msgpack::object &)
 
bool put_diff (const framework::diff_object &obj)
 
void register_mixable (framework::mixable *mixable)
 
- Public Member Functions inherited from jubatus::core::framework::linear_mixable
 linear_mixable ()
 
virtual ~linear_mixable ()
 
- Public Member Functions inherited from jubatus::core::framework::mixable
virtual storage::version get_version () const
 
 mixable ()
 
 mixable (const std::string &name)
 
virtual ~mixable ()
 
- Public Member Functions inherited from jubatus::core::framework::push_mixable
 push_mixable ()
 
virtual ~push_mixable ()
 

Private Attributes

std::vector< mixable * > mixables_
 

Additional Inherited Members

- Protected Attributes inherited from jubatus::core::framework::mixable
std::set< std::string > mixables_
 

Detailed Description

Definition at line 47 of file driver.hpp.

Member Function Documentation

diff_object jubatus::core::driver::driver_base::mixable_holder::convert_diff_object ( const msgpack::object &  o) const
virtual

Implements jubatus::core::framework::linear_mixable.

Definition at line 90 of file driver.cpp.

References jubatus::core::framework::linear_mixable::convert_diff_object(), and JUBATUS_EXCEPTION.

91  {
92  if (o.type != msgpack::type::ARRAY ||
93  o.via.array.size != count_mixable<linear_mixable>(mixables_)) {
94  throw JUBATUS_EXCEPTION(
95  core::common::exception::runtime_error("conversion failed"));
96  }
97 
98  vector<diff_object> diffs;
99  for (size_t i = 0; i < mixables_.size(); i++) {
100  const linear_mixable* mixable =
101  dynamic_cast<const linear_mixable*>(mixables_[i]);
102  if (!mixable) {
103  continue;
104  }
105  diffs.push_back(mixable->convert_diff_object(o.via.array.ptr[i]));
106  }
107 
108  return diff_object(new internal_diff_object(diffs));
109 }
jubatus::util::lang::shared_ptr< diff_object_raw > diff_object
#define JUBATUS_EXCEPTION(e)
Definition: exception.hpp:79
virtual diff_object convert_diff_object(const msgpack::object &) const =0

Here is the call graph for this function:

void jubatus::core::driver::driver_base::mixable_holder::get_argument ( framework::packer ) const
virtual

Implements jubatus::core::framework::push_mixable.

Definition at line 179 of file driver.cpp.

References jubatus::core::framework::push_mixable::get_argument().

179  {
180  pk.pack_array(count_mixable<push_mixable>(mixables_));
181  for (size_t i = 0; i < mixables_.size(); i++) {
182  const push_mixable* mixable =
183  dynamic_cast<const push_mixable*>(mixables_[i]);
184  if (!mixable) {
185  continue;
186  }
187  mixable->get_argument(pk);
188  }
189 }
virtual void get_argument(packer &) const =0

Here is the call graph for this function:

void jubatus::core::driver::driver_base::mixable_holder::get_diff ( framework::packer ) const
virtual

Implements jubatus::core::framework::linear_mixable.

Definition at line 142 of file driver.cpp.

References jubatus::core::framework::linear_mixable::get_diff().

142  {
143  pk.pack_array(count_mixable<linear_mixable>(mixables_));
144  for (size_t i = 0; i < mixables_.size(); i++) {
145  const linear_mixable* mixable =
146  dynamic_cast<const linear_mixable*>(mixables_[i]);
147  if (!mixable) {
148  continue;
149  }
150  mixable->get_diff(pk);
151  }
152 }
virtual void get_diff(packer &) const =0

Here is the call graph for this function:

std::vector< storage::version > jubatus::core::driver::driver_base::mixable_holder::get_versions ( ) const

Definition at line 230 of file driver.cpp.

Referenced by jubatus::core::driver::driver_base::get_versions().

230  {
231  std::vector<storage::version> ret;
232  for (size_t i = 0; i < mixables_.size(); ++i) {
233  ret.push_back(mixables_[i]->get_version());
234  }
235  return ret;
236 }
virtual storage::version get_version() const
Definition: mixable.cpp:39

Here is the caller graph for this function:

void jubatus::core::driver::driver_base::mixable_holder::mix ( const msgpack::object &  obj,
framework::diff_object   
) const
virtual

Implements jubatus::core::framework::linear_mixable.

Definition at line 111 of file driver.cpp.

References JUBATUS_EXCEPTION, and jubatus::core::framework::linear_mixable::mix().

113  {
114  if (o.type != msgpack::type::ARRAY ||
115  o.via.array.size != count_mixable<linear_mixable>(mixables_)) {
116  throw JUBATUS_EXCEPTION(
117  core::common::exception::runtime_error("mix failed"));
118  }
119 
120  internal_diff_object* diff_obj =
121  dynamic_cast<internal_diff_object*>(ptr.get());
122  if (!diff_obj) {
123  throw JUBATUS_EXCEPTION(
124  core::common::exception::runtime_error("bad diff_object"));
125  }
126 
127  if (mixables_.size() != diff_obj->diffs_.size()) {
128  throw JUBATUS_EXCEPTION(
129  core::common::exception::runtime_error("diff size is wrong"));
130  }
131 
132  for (size_t i = 0; i < mixables_.size(); i++) {
133  const linear_mixable* mixable =
134  dynamic_cast<const linear_mixable*>(mixables_[i]);
135  if (!mixable) {
136  continue;
137  }
138  mixable->mix(o.via.array.ptr[i], diff_obj->diffs_[i]);
139  }
140 }
virtual void mix(const msgpack::object &obj, diff_object) const =0
#define JUBATUS_EXCEPTION(e)
Definition: exception.hpp:79

Here is the call graph for this function:

set< string > jubatus::core::driver::driver_base::mixable_holder::mixables ( ) const
virtual

Reimplemented from jubatus::core::framework::mixable.

Definition at line 70 of file driver.cpp.

References mixables_.

70  {
71  set<string> s;
72 
73  if (count_mixable<linear_mixable>(mixables_) > 0) {
74  s.insert("linear_mixable");
75  }
76 
77  if (count_mixable<push_mixable>(mixables_) > 0) {
78  s.insert("push_mixable");
79  }
80 
81  return s;
82 }
void jubatus::core::driver::driver_base::mixable_holder::pull ( const msgpack::object &  arg,
framework::packer  
) const
virtual

Implements jubatus::core::framework::push_mixable.

Definition at line 191 of file driver.cpp.

References JUBATUS_EXCEPTION, and jubatus::core::framework::push_mixable::pull().

193  {
194  if (arg.type != msgpack::type::ARRAY ||
195  arg.via.array.size != count_mixable<push_mixable>(mixables_)) {
196  throw JUBATUS_EXCEPTION(
197  core::common::exception::runtime_error("pull array failed"));
198  }
199 
200  pk.pack_array(count_mixable<push_mixable>(mixables_));
201  for (size_t i = 0, obj_index = 0; i < mixables_.size(); i++) {
202  const push_mixable* mixable =
203  dynamic_cast<const push_mixable*>(mixables_[i]);
204  if (!mixable) {
205  continue;
206  }
207  mixable->pull(arg.via.array.ptr[obj_index], pk);
208  obj_index++;
209  }
210 }
#define JUBATUS_EXCEPTION(e)
Definition: exception.hpp:79
virtual void pull(const msgpack::object &arg, packer &) const =0

Here is the call graph for this function:

void jubatus::core::driver::driver_base::mixable_holder::push ( const msgpack::object &  o)
virtual

Implements jubatus::core::framework::push_mixable.

Definition at line 212 of file driver.cpp.

References JUBATUS_EXCEPTION, and jubatus::core::framework::push_mixable::push().

212  {
213  if (o.type != msgpack::type::ARRAY ||
214  o.via.array.size != count_mixable<push_mixable>(mixables_)) {
215  throw JUBATUS_EXCEPTION(
216  core::common::exception::runtime_error("push failed"));
217  }
218 
219  for (size_t i = 0, obj_index = 0; i < mixables_.size(); i++) {
220  push_mixable* mixable = dynamic_cast<push_mixable*>(mixables_[i]);
221  if (!mixable) {
222  continue;
223  }
224  mixable->push(o.via.array.ptr[obj_index]);
225  obj_index++;
226  }
227 }
#define JUBATUS_EXCEPTION(e)
Definition: exception.hpp:79
virtual void push(const msgpack::object &)=0

Here is the call graph for this function:

bool jubatus::core::driver::driver_base::mixable_holder::put_diff ( const framework::diff_object obj)
virtual

Implements jubatus::core::framework::linear_mixable.

Definition at line 154 of file driver.cpp.

References JUBATUS_EXCEPTION, and jubatus::core::framework::linear_mixable::put_diff().

154  {
155  internal_diff_object* diff_obj =
156  dynamic_cast<internal_diff_object*>(obj.get());
157  if (!diff_obj) {
158  throw JUBATUS_EXCEPTION(
159  core::common::exception::runtime_error("bad diff_object"));
160  }
161 
162  if (count_mixable<linear_mixable>(mixables_) != diff_obj->diffs_.size()) {
163  throw JUBATUS_EXCEPTION(
164  core::common::exception::runtime_error("diff size is wrong"));
165  }
166 
167  bool success = true;
168  for (size_t i = 0; i < mixables_.size(); i++) {
169  linear_mixable* mixable = dynamic_cast<linear_mixable*>(mixables_[i]);
170  if (!mixable) {
171  continue;
172  }
173  success = mixable->put_diff(diff_obj->diffs_[i]) && success;
174  }
175 
176  return success;
177 }
#define JUBATUS_EXCEPTION(e)
Definition: exception.hpp:79
virtual bool put_diff(const diff_object &obj)=0

Here is the call graph for this function:

void jubatus::core::driver::driver_base::mixable_holder::register_mixable ( framework::mixable mixable)

Definition at line 84 of file driver.cpp.

Referenced by jubatus::core::driver::driver_base::register_mixable().

84  {
85  if (find(mixables_.begin(), mixables_.end(), mixable) == mixables_.end()) {
86  mixables_.push_back(mixable);
87  }
88 }

Here is the caller graph for this function:

Member Data Documentation

std::vector<mixable*> jubatus::core::driver::driver_base::mixable_holder::mixables_
private

Definition at line 66 of file driver.hpp.

Referenced by mixables().


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