xref: /netbsd-src/external/bsd/elftosb/dist/common/Blob.h (revision 993229b6fea628ff8b1fa09146c80b0cfb2768eb)
1 /*
2  * File:	Blob.h
3  *
4  * Copyright (c) Freescale Semiconductor, Inc. All rights reserved.
5  * See included license file for license details.
6  */
7 #if !defined(_Blob_h_)
8 #define _Blob_h_
9 
10 #include "stdafx.h"
11 
12 /*!
13  * \brief Manages a binary object of arbitrary length.
14  *
15  * The data block is allocated with malloc() instead of the new
16  * operator so that we can use realloc() to resize it.
17  */
18 class Blob
19 {
20 public:
21 	//! \brief Default constructor.
22 	Blob();
23 
24 	//! \brief Constructor.
25 	Blob(const uint8_t * data, unsigned length);
26 
27 	//! \brief Copy constructor.
28 	Blob(const Blob & other);
29 
30 	//! \brief Destructor.
31 	virtual ~Blob();
32 
33 	//! \name Operations
34 	//@{
35 	//! \brief Replaces the blob's data.
36 	void setData(const uint8_t * data, unsigned length);
37 
38 	//! \brief Change the size of the blob's data.
39 	void setLength(unsigned length);
40 
41 	//! \brief Adds data to the end of the blob.
42 	void append(const uint8_t * newData, unsigned newDataLength);
43 
44 	//! \brief Disposes of the data.
45 	void clear();
46 
47 	//! \brief Tell the blob that it no longer owns its data.
48 	void relinquish();
49 	//@}
50 
51 	//! \name Accessors
52 	//@{
getData()53 	uint8_t * getData() { return m_data; }
getData()54 	const uint8_t * getData() const { return m_data; }
getLength()55 	unsigned getLength() const { return m_length; }
56 	//@}
57 
58 	//! \name Operators
59 	//@{
60 	operator uint8_t * () { return m_data; }
61 	operator const uint8_t * () const { return m_data; }
62 	//@}
63 
64 protected:
65 	uint8_t * m_data;	//!< The binary data held by this object.
66 	unsigned m_length;	//!< Number of bytes pointed to by #m_data.
67 };
68 
69 #endif // _Blob_h_
70 
71