a bunch of updates. to be checked on durian. does not build.
[jacinto-ai/caffe-jacinto.git] / src / caffeine / blob.hpp
1 #ifndef CAFFEINE_BLOB_HPP
2 #define CAFFEINE_BLOB_HPP
4 #include <memory>
6 #include "caffeine/common.hpp"
7 #include "caffeine/syncedmem.hpp"
9 namespace caffeine {
11 template <typename Dtype>
12 class Blob {
13  public:
14   Blob()
15        : num_(0), channels_(0), height_(0), width_(0), count_(0), data_(),
16        diff_() {};
17   explicit Blob(const int num, const int channels, const int height,
18       const int width) {
19     Reshape(num, channels, height, width);
20   };
21   ~Blob() {};
22   void Reshape(const int num, const int channels, const int height,
23                const int width);
24   inline int num() { return num_; }
25   inline int channels() { return channels_; }
26   inline int height() { return height_; }
27   inline int width() { return width_; }
28   
29   const Dtype* cpu_data();
30   const Dtype* gpu_data();
31   const Dtype* cpu_diff();
32   const Dtype* gpu_diff();
33   Dtype* mutable_cpu_data();
34   Dtype* mutable_gpu_data();
35   Dtype* mutable_cpu_diff();
36   Dtype* mutable_gpu_diff();
37   void update();
38  private:
39   void check_data();
40   void check_diff();
41   shared_ptr<SyncedMemory> data_;
42   shared_ptr<SyncedMemory> diff_;
43   int num_;
44   int channels_;
45   int height_;
46   int width_;
47   int count_;
48 };  // class Blob
50 }  // namespace caffeine
52 #endif  // CAFFEINE_BLOB_HPP_