Skip to content

Commit

Permalink
Fix ghostl for Arduino SAMD (Zero, MKR1000, M0)
Browse files Browse the repository at this point in the history
  • Loading branch information
dok-net committed Oct 2, 2019
1 parent 6d9f115 commit 2da9a83
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 22 deletions.
2 changes: 1 addition & 1 deletion library.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "EspSoftwareSerial",
"version": "5.3.1",
"version": "5.3.2",
"keywords": [
"serial", "io", "softwareserial"
],
Expand Down
2 changes: 1 addition & 1 deletion library.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name=EspSoftwareSerial
version=5.3.1
version=5.3.2
author=Peter Lerup, Dirk Kaar
maintainer=Peter Lerup <[email protected]>
sentence=Implementation of the Arduino software serial for ESP8266/ESP32.
Expand Down
45 changes: 25 additions & 20 deletions src/circular_queue/ghostl.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,32 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#ifndef __ghostl_h
#define __ghostl_h

#include <util/atomic.h>
#if defined(ARDUINO_ARCH_SAMD)
#include <atomic>
#endif

namespace std
{
#if !defined(ARDUINO_ARCH_SAMD)
typedef enum memory_order {
memory_order_relaxed,
memory_order_acquire,
memory_order_release,
memory_order_seq_cst
} memory_order;
template< typename T > class atomic {
private:
T value;
public:
atomic() {}
atomic(T desired) { value = desired; }
void store(T desired, std::memory_order = std::memory_order_seq_cst) volatile noexcept { value = desired; }
T load(std::memory_order = std::memory_order_seq_cst) const volatile noexcept { return value; }
};
inline void atomic_thread_fence(std::memory_order order) noexcept {}
template< typename T > T&& move(T& t) noexcept { return static_cast<T&&>(t); }
#endif

template< typename T, int N > class array
{
private:
Expand All @@ -41,7 +63,7 @@ namespace std
template< typename T > class unique_ptr
{
public:
using pointer = T *;
using pointer = T*;
unique_ptr() noexcept : ptr(nullptr) {}
unique_ptr(pointer p) : ptr(p) {}
pointer operator->() const noexcept { return ptr; }
Expand All @@ -56,24 +78,7 @@ namespace std
pointer ptr;
};

typedef enum memory_order {
memory_order_relaxed,
memory_order_acquire,
memory_order_release,
memory_order_seq_cst
} memory_order;
template< typename T > class atomic {
private:
T value;
public:
atomic() {}
atomic(T desired) { value = desired; }
void store(T desired, std::memory_order = std::memory_order_seq_cst) volatile noexcept { value = desired; }
T load(std::memory_order = std::memory_order_seq_cst) const volatile noexcept { return value; }
};
inline void atomic_thread_fence(std::memory_order order) noexcept {}
template< typename T > T&& move(T& t) noexcept { return static_cast<T&&>(t); }
template< typename T > using function = T *;
template< typename T > using function = T*;
}

#endif // __ghostl_h

0 comments on commit 2da9a83

Please sign in to comment.