Implementation of 1-Wire with added Alarm Search Functionality
Dependents: Max32630_One_Wire_Interface
array.h@73:2cecc1372acc, 2016-05-12 (annotated)
- 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?
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 | 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 |