/** * Copyright (C) ARM Limited 2013. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ #ifndef BUFFER_H #define BUFFER_H #include #include #include class Sender; class Buffer { public: static const size_t MAXSIZE_PACK32 = 5; static const size_t MAXSIZE_PACK64 = 10; Buffer (int32_t core, int32_t buftype, const int size, sem_t *const readerSem); ~Buffer (); void write (Sender * sender); int bytesAvailable () const; void commit (const uint64_t time); void check (const uint64_t time); void frame (); bool eventHeader (uint64_t curr_time); bool eventTid (int tid); void event (int32_t key, int32_t value); void event64 (int64_t key, int64_t value); void setDone (); bool isDone () const; private: bool commitReady () const; bool checkSpace (int bytes); void packInt (int32_t x); void packInt64 (int64_t x); const int32_t core; const int32_t buftype; const int size; int readPos; int writePos; int commitPos; bool available; bool done; char *const buf; uint64_t commitTime; sem_t *const readerSem; // Intentionally unimplemented Buffer(const Buffer &); Buffer &operator=(const Buffer &); }; #endif // BUFFER_H