File indexing completed on 2025-09-15 09:11:50
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #ifndef TMVA_DNN_ARCHITECTURES_CPU_CPUBUFFER
0017 #define TMVA_DNN_ARCHITECTURES_CPU_CPUBUFFER
0018
0019 #include "TMVA/DNN/DataLoader.h"
0020
0021 #include <memory>
0022
0023 namespace TMVA
0024 {
0025 namespace DNN
0026 {
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042 template<typename AFloat>
0043 class TCpuBuffer
0044 {
0045 private:
0046
0047 size_t fSize;
0048 size_t fOffset;
0049 std::shared_ptr<AFloat *> fBuffer;
0050
0051 struct TDestructor
0052 {
0053 void operator()(AFloat ** pointer);
0054 friend TCpuBuffer;
0055 } fDestructor;
0056
0057 public:
0058
0059
0060 TCpuBuffer(size_t size);
0061 TCpuBuffer() = default;
0062 TCpuBuffer(const TCpuBuffer &) = default;
0063 TCpuBuffer( TCpuBuffer &&) = default;
0064 TCpuBuffer & operator=(const TCpuBuffer &) = default;
0065 TCpuBuffer & operator=( TCpuBuffer &&) = default;
0066
0067 inline operator AFloat * () const { return data(); }
0068 AFloat * data() const {return (* fBuffer) + fOffset;}
0069
0070 class FakeIteratorBegin{
0071 private:
0072 AFloat& fBeginRet;
0073 public:
0074 FakeIteratorBegin(AFloat& x): fBeginRet(x){}
0075 AFloat& operator*()
0076 {
0077 return fBeginRet;
0078 }
0079 };
0080 FakeIteratorBegin begin(){
0081 return FakeIteratorBegin(*((* fBuffer) + fOffset));
0082 }
0083
0084
0085
0086
0087 TCpuBuffer GetSubBuffer(size_t offset, size_t start) const;
0088
0089 AFloat & operator[](size_t i) {return (*fBuffer.get())[fOffset + i];}
0090 AFloat operator[](size_t i) const {return (*fBuffer.get())[fOffset + i];}
0091
0092
0093
0094 void CopyFrom(const TCpuBuffer &);
0095
0096
0097 void CopyTo(TCpuBuffer &) const;
0098
0099
0100
0101
0102
0103 size_t GetSize() const {return fSize;}
0104
0105 size_t GetUseCount() const { return fBuffer.use_count(); }
0106 };
0107
0108 }
0109 }
0110
0111 #endif