Implementation of 1-Wire with added Alarm Search Functionality
Dependents: Max32630_One_Wire_Interface
array.h@74:23be10c32fa3, 2016-05-13 (annotated)
- 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?
User | Revision | Line number | New 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 |