1-Wire® library for mbed. Complete 1-Wire library that supports our silicon masters along with a bit-bang master on the MAX32600MBED platform with one common interface for mbed. Slave support has also been included and more slaves will be added as time permits.

Dependents:   MAXREFDES131_Qt_Demo MAX32630FTHR_iButton_uSD_Logger MAX32630FTHR_DS18B20_uSD_Logger MAXREFDES130_131_Demo ... more

Superseded by MaximInterface.

Committer:
IanBenzMaxim
Date:
Wed Apr 06 08:49:27 2016 -0500
Revision:
43:23017dcd2ec3
Parent:
33:a4c015046956
Child:
49:36954b62f503
Add check for self-assignment to array since it could lead to undefined behavior with memcpy. Minor cleanup to OneWireMaster.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
IanBenzMaxim 33:a4c015046956 1 #ifndef _ARRAY_HPP
IanBenzMaxim 33:a4c015046956 2 #define _ARRAY_HPP
IanBenzMaxim 33:a4c015046956 3
IanBenzMaxim 33:a4c015046956 4 #include <cstdint>
IanBenzMaxim 33:a4c015046956 5 #include <cstring>
IanBenzMaxim 33:a4c015046956 6
IanBenzMaxim 33:a4c015046956 7 template <typename T, std::size_t N>
IanBenzMaxim 33:a4c015046956 8 class array
IanBenzMaxim 33:a4c015046956 9 {
IanBenzMaxim 33:a4c015046956 10 public:
IanBenzMaxim 33:a4c015046956 11 static const std::size_t length = N;
IanBenzMaxim 33:a4c015046956 12 typedef T Buffer[N];
IanBenzMaxim 33:a4c015046956 13
IanBenzMaxim 33:a4c015046956 14 private:
IanBenzMaxim 33:a4c015046956 15 Buffer m_buffer;
IanBenzMaxim 33:a4c015046956 16
IanBenzMaxim 33:a4c015046956 17 public:
IanBenzMaxim 33:a4c015046956 18 const array<T, N> & operator=(const array<T, N> & rhs)
IanBenzMaxim 33:a4c015046956 19 {
IanBenzMaxim 43:23017dcd2ec3 20 if (this != &rhs)
IanBenzMaxim 43:23017dcd2ec3 21 {
IanBenzMaxim 33:a4c015046956 22 std::memcpy(this->m_buffer, rhs.m_buffer, N * sizeof(T));
IanBenzMaxim 43:23017dcd2ec3 23 }
IanBenzMaxim 43:23017dcd2ec3 24 return rhs;
IanBenzMaxim 33:a4c015046956 25 }
IanBenzMaxim 33:a4c015046956 26
IanBenzMaxim 33:a4c015046956 27 bool operator==(const array<T, N> & rhs) const
IanBenzMaxim 33:a4c015046956 28 {
IanBenzMaxim 33:a4c015046956 29 return (std::memcmp(this->m_buffer, rhs.m_buffer, N * sizeof(T)) == 0);
IanBenzMaxim 33:a4c015046956 30 }
IanBenzMaxim 33:a4c015046956 31
IanBenzMaxim 33:a4c015046956 32 bool operator!=(const array<T, N> & rhs) const
IanBenzMaxim 33:a4c015046956 33 {
IanBenzMaxim 33:a4c015046956 34 return !operator==(rhs);
IanBenzMaxim 33:a4c015046956 35 }
IanBenzMaxim 33:a4c015046956 36
IanBenzMaxim 33:a4c015046956 37 operator Buffer &()
IanBenzMaxim 33:a4c015046956 38 {
IanBenzMaxim 33:a4c015046956 39 return m_buffer; // Conversion to array reference
IanBenzMaxim 33:a4c015046956 40 }
IanBenzMaxim 33:a4c015046956 41
IanBenzMaxim 33:a4c015046956 42 operator const Buffer&() const
IanBenzMaxim 33:a4c015046956 43 {
IanBenzMaxim 33:a4c015046956 44 return m_buffer; // Conversion to const array reference
IanBenzMaxim 33:a4c015046956 45 }
IanBenzMaxim 33:a4c015046956 46
IanBenzMaxim 33:a4c015046956 47 array<T, N>() { }
IanBenzMaxim 33:a4c015046956 48
IanBenzMaxim 33:a4c015046956 49 array<T, N>(const array<T, N> & copy)
IanBenzMaxim 33:a4c015046956 50 {
IanBenzMaxim 33:a4c015046956 51 operator=(copy);
IanBenzMaxim 33:a4c015046956 52 }
IanBenzMaxim 33:a4c015046956 53
IanBenzMaxim 33:a4c015046956 54 array<T, N>(const Buffer & buffer)
IanBenzMaxim 33:a4c015046956 55 {
IanBenzMaxim 33:a4c015046956 56 std::memcpy(m_buffer, buffer, N * sizeof(T));
IanBenzMaxim 33:a4c015046956 57 }
IanBenzMaxim 33:a4c015046956 58 };
IanBenzMaxim 33:a4c015046956 59
IanBenzMaxim 33:a4c015046956 60 #endif