Implementation of 1-Wire with added Alarm Search Functionality

Dependents:   Max32630_One_Wire_Interface

Committer:
IanBenzMaxim
Date:
Fri May 13 07:48:35 2016 -0500
Revision:
74:23be10c32fa3
Parent:
73:2cecc1372acc
Child:
75:8b627804927c
Assimilated indentation and braces.

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