| /** |
| * 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 <stddef.h> |
| #include <stdint.h> |
| #include <semaphore.h> |
| |
| 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); |
| 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; |
| }; |
| |
| #endif // BUFFER_H |