Caffe2 - C++ API
A deep learning, cross platform ML framework
blob_stats.h
1 
17 #pragma once
18 
19 #include "caffe2/core/blob.h"
20 #include "caffe2/core/registry.h"
21 #include "caffe2/core/typeid.h"
22 
23 #include <unordered_map>
24 
25 namespace caffe2 {
26 
28  virtual size_t sizeBytes(const Blob& blob) const = 0;
29  virtual ~BlobStatGetter() {}
30 };
31 
33  private:
34  std::unordered_map<CaffeTypeId, std::unique_ptr<BlobStatGetter>> map_;
35  void doRegister(CaffeTypeId id, std::unique_ptr<BlobStatGetter>&& v);
36 
37  public:
38  template <typename T, typename Getter>
39  struct Registrar {
40  Registrar() {
41  BlobStatRegistry::instance().doRegister(
42  TypeMeta::Id<T>(), std::unique_ptr<Getter>(new Getter));
43  }
44  };
45 
46  const BlobStatGetter* get(CaffeTypeId id);
47  static BlobStatRegistry& instance();
48 };
49 
50 #define REGISTER_BLOB_STAT_GETTER(Type, BlobStatGetterClass) \
51  static BlobStatRegistry::Registrar<Type, BlobStatGetterClass> \
52  CAFFE_ANONYMOUS_VARIABLE(BlobStatRegistry)
53 
54 namespace BlobStat {
55 
60 size_t sizeBytes(const Blob& blob);
61 }
62 }
Blob is a general container that hosts a typed pointer.
Definition: blob.h:41
Copyright (c) 2016-present, Facebook, Inc.