Implementation of 1-Wire with added Alarm Search Functionality

Dependents:   Max32630_One_Wire_Interface

Committer:
IanBenzMaxim
Date:
Thu May 12 14:38:16 2016 -0500
Revision:
73:2cecc1372acc
Parent:
array.hpp@49:36954b62f503
Child:
74:23be10c32fa3
Added namespaces. Renamed files and directories for consistency. Use <stdint.h> instead of <cstdint> since it is not supported by C++98.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
IanBenzMaxim 73:2cecc1372acc 1 #ifndef OneWire_array
IanBenzMaxim 73:2cecc1372acc 2 #define OneWire_array
IanBenzMaxim 33:a4c015046956 3
IanBenzMaxim 73:2cecc1372acc 4 #include <stdint.h>
IanBenzMaxim 73:2cecc1372acc 5 #include <stddef.h>
IanBenzMaxim 33:a4c015046956 6 #include <cstring>
IanBenzMaxim 33:a4c015046956 7
IanBenzMaxim 73:2cecc1372acc 8 namespace OneWire
IanBenzMaxim 33:a4c015046956 9 {
IanBenzMaxim 73:2cecc1372acc 10 /// Generic array class similar to std::array.
IanBenzMaxim 73:2cecc1372acc 11 template <typename T, size_t N>
IanBenzMaxim 73:2cecc1372acc 12 class array
IanBenzMaxim 33:a4c015046956 13 {
IanBenzMaxim 73:2cecc1372acc 14 public:
IanBenzMaxim 73:2cecc1372acc 15 /// Number of elements contained in the array.
IanBenzMaxim 73:2cecc1372acc 16 static const size_t length = N;
IanBenzMaxim 73:2cecc1372acc 17
IanBenzMaxim 73:2cecc1372acc 18 /// Built-in array representation.
IanBenzMaxim 73:2cecc1372acc 19 typedef T Buffer[N];
IanBenzMaxim 73:2cecc1372acc 20
IanBenzMaxim 73:2cecc1372acc 21 private:
IanBenzMaxim 73:2cecc1372acc 22 Buffer m_buffer;
IanBenzMaxim 73:2cecc1372acc 23
IanBenzMaxim 73:2cecc1372acc 24 public:
IanBenzMaxim 73:2cecc1372acc 25 const array<T, N> & operator=(const array<T, N> & rhs)
IanBenzMaxim 73:2cecc1372acc 26 {
IanBenzMaxim 73:2cecc1372acc 27 if (this != &rhs)
IanBenzMaxim 73:2cecc1372acc 28 {
IanBenzMaxim 73:2cecc1372acc 29 std::memcpy(this->m_buffer, rhs.m_buffer, N * sizeof(T));
IanBenzMaxim 73:2cecc1372acc 30 }
IanBenzMaxim 73:2cecc1372acc 31 return rhs;
IanBenzMaxim 73:2cecc1372acc 32 }
IanBenzMaxim 73:2cecc1372acc 33
IanBenzMaxim 73:2cecc1372acc 34 bool operator==(const array<T, N> & rhs) const
IanBenzMaxim 73:2cecc1372acc 35 {
IanBenzMaxim 73:2cecc1372acc 36 return (std::memcmp(this->m_buffer, rhs.m_buffer, N * sizeof(T)) == 0);
IanBenzMaxim 73:2cecc1372acc 37 }
IanBenzMaxim 73:2cecc1372acc 38
IanBenzMaxim 73:2cecc1372acc 39 bool operator!=(const array<T, N> & rhs) const
IanBenzMaxim 73:2cecc1372acc 40 {
IanBenzMaxim 73:2cecc1372acc 41 return !operator==(rhs);
IanBenzMaxim 73:2cecc1372acc 42 }
IanBenzMaxim 73:2cecc1372acc 43
IanBenzMaxim 73:2cecc1372acc 44 /// Conversion to array reference.
IanBenzMaxim 73:2cecc1372acc 45 operator Buffer &()
IanBenzMaxim 73:2cecc1372acc 46 {
IanBenzMaxim 73:2cecc1372acc 47 return m_buffer;
IanBenzMaxim 73:2cecc1372acc 48 }
IanBenzMaxim 73:2cecc1372acc 49
IanBenzMaxim 73:2cecc1372acc 50 /// Conversion to const array reference.
IanBenzMaxim 73:2cecc1372acc 51 operator const Buffer &() const
IanBenzMaxim 73:2cecc1372acc 52 {
IanBenzMaxim 73:2cecc1372acc 53 return m_buffer;
IanBenzMaxim 73:2cecc1372acc 54 }
IanBenzMaxim 73:2cecc1372acc 55
IanBenzMaxim 73:2cecc1372acc 56 array<T, N>() { }
IanBenzMaxim 73:2cecc1372acc 57
IanBenzMaxim 73:2cecc1372acc 58 array<T, N>(const array<T, N> & copy)
IanBenzMaxim 73:2cecc1372acc 59 {
IanBenzMaxim 73:2cecc1372acc 60 operator=(copy);
IanBenzMaxim 73:2cecc1372acc 61 }
IanBenzMaxim 73:2cecc1372acc 62
IanBenzMaxim 73:2cecc1372acc 63 array<T, N>(const Buffer & buffer)
IanBenzMaxim 73:2cecc1372acc 64 {
IanBenzMaxim 73:2cecc1372acc 65 std::memcpy(m_buffer, buffer, N * sizeof(T));
IanBenzMaxim 73:2cecc1372acc 66 }
IanBenzMaxim 73:2cecc1372acc 67 };
IanBenzMaxim 73:2cecc1372acc 68 }
IanBenzMaxim 33:a4c015046956 69
IanBenzMaxim 49:36954b62f503 70 #endif