1 //===-- DataBuffer.h --------------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef liblldb_DataBuffer_h_ 11 #define liblldb_DataBuffer_h_ 12 #if defined(__cplusplus) 13 14 #include <stdint.h> 15 #include <string.h> 16 17 namespace lldb_private { 18 19 //---------------------------------------------------------------------- 20 /// @class DataBuffer DataBuffer.h "lldb/Core/DataBuffer.h" 21 /// @brief A pure virtual protocol class for abstracted data buffers. 22 /// 23 /// DataBuffer is an abtract class that gets packaged into a shared pointer 24 /// that can use to implement various ways to store data (on the heap, 25 /// memory mapped, cached inferior memory). It gets used by DataExtractor 26 /// so many DataExtractor objects can share the same data and sub-ranges 27 /// of that shared data, and the last object that contains a reference 28 /// to the shared data will free it. 29 /// 30 /// Subclasses can implement as many different constructors or member 31 /// functions that allow data to be stored in the object's buffer prior 32 /// to handing the shared data to clients that use these buffers. 33 /// 34 /// All subclasses must override all of the pure virtual functions as 35 /// they are used by clients to access the data. Having a common 36 /// interface allows different ways of storing data, yet using it in 37 /// one common way. 38 /// 39 /// This class currently expects all data to be available without any 40 /// extra calls being made, but we can modify it to optionally get 41 /// data on demand with some extra function calls to load the data 42 /// before it gets accessed. 43 //---------------------------------------------------------------------- 44 class DataBuffer 45 { 46 public: 47 //------------------------------------------------------------------ 48 /// Destructor 49 /// 50 /// The destructor is virtual as other classes will inherit from 51 /// this class and be downcast to the DataBuffer pure virtual 52 /// interface. The virtual destructor ensures that destructing the 53 /// base class will destruct the class that inherited from it 54 /// correctly. 55 //------------------------------------------------------------------ 56 virtual ~DataBuffer()57 ~DataBuffer() 58 { 59 } 60 61 //------------------------------------------------------------------ 62 /// Get a pointer to the data. 63 /// 64 /// @return 65 /// A pointer to the bytes owned by this object, or NULL if the 66 /// object contains no bytes. 67 //------------------------------------------------------------------ 68 virtual uint8_t * 69 GetBytes () = 0; 70 71 //------------------------------------------------------------------ 72 /// Get a const pointer to the data. 73 /// 74 /// @return 75 /// A const pointer to the bytes owned by this object, or NULL 76 /// if the object contains no bytes. 77 //------------------------------------------------------------------ 78 virtual const uint8_t * 79 GetBytes () const = 0; 80 81 //------------------------------------------------------------------ 82 /// Get the number of bytes in the data buffer. 83 /// 84 /// @return 85 /// The number of bytes this object currently contains. 86 //------------------------------------------------------------------ 87 virtual lldb::offset_t 88 GetByteSize() const = 0; 89 }; 90 91 } // namespace lldb_private 92 93 #endif /// #if defined(__cplusplus) 94 #endif /// lldb_DataBuffer_h_ 95