aboutsummaryrefslogtreecommitdiff
path: root/daemon/Fifo.h
diff options
context:
space:
mode:
Diffstat (limited to 'daemon/Fifo.h')
-rw-r--r--daemon/Fifo.h39
1 files changed, 24 insertions, 15 deletions
diff --git a/daemon/Fifo.h b/daemon/Fifo.h
index d46e1af..ada42b9 100644
--- a/daemon/Fifo.h
+++ b/daemon/Fifo.h
@@ -9,27 +9,36 @@
#ifndef __FIFO_H__
#define __FIFO_H__
+#ifdef WIN32
+#include <windows.h>
+#define sem_t HANDLE
+#define sem_init(sem, pshared, value) ((*(sem) = CreateSemaphore(NULL, value, INFINITE, NULL)) == NULL)
+#define sem_wait(sem) WaitForSingleObject(*(sem), INFINITE)
+#define sem_post(sem) ReleaseSemaphore(*(sem), 1, NULL)
+#define sem_destroy(sem) CloseHandle(*(sem))
+#else
#include <semaphore.h>
+#endif
class Fifo {
public:
- Fifo(int singleBufferSize, int totalBufferSize, sem_t* readerSem);
- ~Fifo();
- int numBytesFilled() const;
- bool isEmpty() const;
- bool isFull() const;
- bool willFill(int additional) const;
- char* start() const;
- char* write(int length);
- void release();
- char* read(int *const length);
+ Fifo(int singleBufferSize, int totalBufferSize, sem_t* readerSem);
+ ~Fifo();
+ int numBytesFilled() const;
+ bool isEmpty() const;
+ bool isFull() const;
+ bool willFill(int additional) const;
+ char* start() const;
+ char* write(int length);
+ void release();
+ char* read(int *const length);
private:
- int mSingleBufferSize, mWrite, mRead, mReadCommit, mRaggedEnd, mWrapThreshold;
- sem_t mWaitForSpaceSem;
- sem_t* mReaderSem;
- char* mBuffer;
- bool mEnd;
+ int mSingleBufferSize, mWrite, mRead, mReadCommit, mRaggedEnd, mWrapThreshold;
+ sem_t mWaitForSpaceSem;
+ sem_t* mReaderSem;
+ char* mBuffer;
+ bool mEnd;
};
#endif //__FIFO_H__