Index: platforms/stm/disco_fletch/src/circular_buffer.cc |
diff --git a/platforms/stm/disco_fletch/src/circular_buffer.cc b/platforms/stm/disco_fletch/src/circular_buffer.cc |
deleted file mode 100755 |
index d0ba1efdc22397ccab930fe55d1e68317a78008d..0000000000000000000000000000000000000000 |
--- a/platforms/stm/disco_fletch/src/circular_buffer.cc |
+++ /dev/null |
@@ -1,96 +0,0 @@ |
-// Copyright (c) 2015, the Dartino project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE.md file. |
- |
-#include "platforms/stm/disco_fletch/src/circular_buffer.h" |
- |
-#include <stdlib.h> |
-#include <string.h> |
- |
-CircularBuffer::CircularBuffer(size_t capacity) { |
- monitor_ = fletch::Platform::CreateMonitor(); |
- // One additional byte needed to distinguish between empty and full. |
- capacity_ = capacity + 1; |
- buffer_ = new uint8_t[capacity_]; |
- head_ = tail_ = 0; |
-} |
- |
-CircularBuffer::~CircularBuffer() { |
- delete[] buffer_; |
-} |
- |
-bool CircularBuffer::IsEmpty() { |
- fletch::ScopedMonitorLock locker(monitor_); |
- return head_ == tail_; |
-} |
- |
-bool CircularBuffer::IsFull() { |
- fletch::ScopedMonitorLock locker(monitor_); |
- return ((head_ + 1) % capacity_) == tail_; |
-} |
- |
-size_t CircularBuffer::Read(uint8_t* data, size_t count, Blocking block) { |
- fletch::ScopedMonitorLock locker(monitor_); |
- |
- // If buffer is empty wait for data. |
- if (block == kBlock) { |
- if (head_ == tail_) { |
- monitor_->Wait(); |
- } |
- } |
- |
- int bytes; |
- int read = 0; |
- |
- if (tail_ > head_) { |
- bytes = MIN(capacity_ - tail_, count); |
- memcpy(data, buffer_ + tail_, bytes); |
- read = bytes; |
- tail_ = (tail_ + bytes) % capacity_; |
- } |
- |
- if (tail_ < head_) { |
- bytes = MIN(head_ - tail_, count - read); |
- memcpy(data + read, buffer_ + tail_, bytes); |
- read += bytes; |
- tail_ = (tail_ + bytes) % capacity_; |
- } |
- |
- monitor_->Notify(); |
- |
- return read; |
-} |
- |
-size_t CircularBuffer::Write( |
- const uint8_t* data, size_t count, Blocking block) { |
- fletch::ScopedMonitorLock locker(monitor_); |
- |
- // If buffer is full wait for room. |
- if (block == kBlock) { |
- if (((head_ + 1) % capacity_) == tail_) { |
- monitor_->Wait(); |
- } |
- } |
- |
- int bytes; |
- int written = 0; |
- |
- if (head_ >= tail_) { |
- bytes = (capacity_ - head_) - (tail_ == 0 ? 1 : 0); |
- bytes = MIN(bytes, count); |
- memcpy(buffer_ + head_, data, bytes); |
- written = bytes; |
- head_ = (head_ + bytes) % capacity_; |
- } |
- |
- if (head_ < tail_) { |
- bytes = MIN(tail_ - head_ - 1, count - written); |
- memcpy(buffer_ + head_, data + written, bytes); |
- written += bytes; |
- head_ = (head_ + bytes) % capacity_; |
- } |
- |
- monitor_->Notify(); |
- |
- return written; |
-} |