Procházet zdrojové kódy

Dynamic array class.

Bart Hertog před 6 roky
rodič
revize
4f39d84d54
1 změnil soubory, kde provedl 96 přidání a 0 odebrání
  1. 96 0
      src/DynamicArray.h

+ 96 - 0
src/DynamicArray.h

@@ -0,0 +1,96 @@
+
+#ifndef _DYNAMIC_BUFFER_H_
+#define _DYNAMIC_BUFFER_H_
+
+#include <cstring>
+
+namespace EmbeddedProto
+{
+
+  //! Class template that specifies the interface of an arry with the data type.
+  template<class DATA_TYPE>
+  class DynamicArray
+  {
+    public:
+
+      DynamicArray() = default;
+      virtual ~DynamicArray() = default;
+
+      //! Obtain the total number of bytes currently stored in the array.
+      virtual uint32_t get_size() const = 0;
+
+      //! Obtain the maximum number of bytes which can at most be stored in the array.
+      virtual uint32_t get_max_size() const = 0;
+
+      //! Obtain the total number of DATA_TYPE items in the array.
+      virtual uint32_t get_length() const = 0;
+
+      //! Obtain the maximum number of DATA_TYPE items which can at most be stored in the array.
+      virtual uint32_t get_max_length() const = 0;
+
+      //! Get a pointer to the first element in the array.
+      virtual DATA_TYPE* get_data() = 0;
+
+      //! Get the value at the given index. 
+      /*!
+        \param[in] index The desired index to return.
+        \return The value at the given index. If index is out of bound zero is returned.
+      */
+      virtual DATA_TYPE operator[](uint32_t index) = 0;
+
+      //! Given a different array of known length copy that data into this object.
+      /*!
+        \param[in] data A pointer the array to copy from.
+        \param[in] length The number of value of DATA_TYPE in the array.
+        \return True when copying the data succedded. (Could be false if it does not fit.)
+      */
+      virtual bool set_data(const DATA_TYPE* data, const uint32_t length) = 0;
+
+  };
+
+  //! A template class that actually holds some data.
+  /*!
+    This is a seperate class to make it possible to not have the size defined in every function or 
+    class using this type of object.
+  */
+  template<class DATA_TYPE, uint32_t MAX_SIZE>
+  class DynamicArraySize : DynamicArray<DATA_TYPE>
+  { 
+    public:
+
+      DynamicArraySize()
+        : current_size_(0)
+      {
+
+      }  
+
+      uint32_t get_size() const override { return current_size_; }
+
+      uint32_t get_max_size() const override { return MAX_SIZE; }
+
+      DATA_TYPE* get_data() { return data_; }
+
+      bool set_data(const DATA_TYPE* data, const uint32_t length) override 
+      {
+        uint32_t size = length * sizeof(DATA_TYPE);
+        bool result = MAX_SIZE >= size;
+        if(result) 
+        {
+          current_size_ = size;
+          memcpy(data_, data, size);
+        }
+        return result;
+      }
+
+    private:
+
+      //! Number of item in the data array.
+      uint32_t current_size_;
+
+      //! The actual data 
+      DATA_TYPE data_[MAX_SIZE];
+  };
+
+} // End of namespace EmbeddedProto
+
+#endif // End of _DYNAMIC_BUFFER_H_