OmniSciDB  1dac507f6e
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
AbstractBufferMgr.h
Go to the documentation of this file.
1 /*
2  * Copyright 2017 MapD Technologies, Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
22 #pragma once
23 
24 #include <boost/preprocessor.hpp>
25 #include "../Shared/types.h"
26 #include "AbstractBuffer.h"
27 
28 #define X_DEFINE_ENUM_WITH_STRING_CONVERSIONS_TOSTRING_CASE(r, data, elem) \
29  case elem: \
30  return BOOST_PP_STRINGIZE(elem);
31 
32 #define DEFINE_ENUM_WITH_STRING_CONVERSIONS(name, enumerators) \
33  enum name { BOOST_PP_SEQ_ENUM(enumerators) }; \
34  \
35  inline const char* ToString(name v) { \
36  switch (v) { \
37  BOOST_PP_SEQ_FOR_EACH( \
38  X_DEFINE_ENUM_WITH_STRING_CONVERSIONS_TOSTRING_CASE, name, enumerators) \
39  default: \
40  return "[Unknown " BOOST_PP_STRINGIZE(name) "]"; \
41  } \
42  }
43 
45  (FILE_MGR)(CPU_MGR)(GPU_MGR)(GLOBAL_FILE_MGR))
46 
47 namespace Data_Namespace {
48 
61 class AbstractBufferMgr {
62  public:
63  virtual ~AbstractBufferMgr() {}
64  AbstractBufferMgr(const int deviceId) : device_id_(deviceId) {}
65 
66  // Chunk API
67  virtual AbstractBuffer* createBuffer(const ChunkKey& key,
68  const size_t pageSize = 0,
69  const size_t initialSize = 0) = 0;
70  virtual void deleteBuffer(
71  const ChunkKey& key,
72  const bool purge = true) = 0; // purge param only used in FileMgr
73  virtual void deleteBuffersWithPrefix(const ChunkKey& keyPrefix,
74  const bool purge = true) = 0;
75  virtual AbstractBuffer* getBuffer(const ChunkKey& key, const size_t numBytes = 0) = 0;
76  virtual void fetchBuffer(const ChunkKey& key,
77  AbstractBuffer* destBuffer,
78  const size_t numBytes = 0) = 0;
79  virtual AbstractBuffer* putBuffer(const ChunkKey& key,
80  AbstractBuffer* srcBuffer,
81  const size_t numBytes = 0) = 0;
82  virtual void getChunkMetadataVec(
83  std::vector<std::pair<ChunkKey, ChunkMetadata>>& chunkMetadata) = 0;
84  virtual void getChunkMetadataVecForKeyPrefix(
85  std::vector<std::pair<ChunkKey, ChunkMetadata>>& chunkMetadataVec,
86  const ChunkKey& keyPrefix) = 0;
87 
88  virtual bool isBufferOnDevice(const ChunkKey& key) = 0;
89  virtual std::string printSlabs() = 0;
90  virtual void clearSlabs() = 0;
91  virtual size_t getMaxSize() = 0;
92  virtual size_t getInUseSize() = 0;
93  virtual size_t getAllocated() = 0;
94  virtual bool isAllocationCapped() = 0;
95 
96  virtual void checkpoint() = 0;
97  virtual void checkpoint(const int db_id, const int tb_id) = 0;
98 
99  // Buffer API
100  virtual AbstractBuffer* alloc(const size_t numBytes = 0) = 0;
101  virtual void free(AbstractBuffer* buffer) = 0;
102  virtual MgrType getMgrType() = 0;
103  virtual std::string getStringMgrType() = 0;
104  virtual size_t getNumChunks() = 0;
105  inline int getDeviceId() { return device_id_; }
106 
107  protected:
108  AbstractBufferMgr* parentMgr_;
109  int device_id_;
110 };
111 
112 } // namespace Data_Namespace
std::vector< int > ChunkKey
Definition: types.h:35
#define DEFINE_ENUM_WITH_STRING_CONVERSIONS(name, enumerators)