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