From d0a6a78022d799e7592a1e5d56344d98dcb688a2 Mon Sep 17 00:00:00 2001 From: Joel Dice Date: Sat, 2 Jun 2007 19:57:37 -0600 Subject: [PATCH] add system.h for interfacing with system-level features --- src/system.h | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/system.h diff --git a/src/system.h b/src/system.h new file mode 100644 index 0000000000..d756ef9a56 --- /dev/null +++ b/src/system.h @@ -0,0 +1,63 @@ +#ifndef SYSTEM_H +#define SYSTEM_H + +#include "common.h" + +class System { + public: + typedef int Status; + + class Thread { + public: + virtual ~Thread() { } + virtual void run() = 0; + }; + + class Monitor { + public: + virtual ~Monitor() { } + virtual void acquire() = 0; + virtual void release() = 0; + virtual void wait() = 0; + virtual void notify() = 0; + virtual void notifyAll() = 0; + virtual void dispose() = 0; + }; + + class File { + public: + virtual ~File() { } + virtual Status read(uint8_t* data, unsigned* size) = 0; + virtual Status write(const uint8_t* data, unsigned size) = 0; + virtual Status close() = 0; + }; + + static const int ReadOnly = 00; + static const int WriteOnly = 01; + static const int ReadWrite = 02; + static const int Append = 02000; + static const int Create = 0100; + + static const int UserRead = 0400; + static const int UserWrite = 0200; + static const int UserExecute = 0100; + static const int GroupRead = 040; + static const int GroupWrite = 020; + static const int GroupExecute = 010; + static const int OtherRead = 04; + static const int OtherWrite = 02; + static const int OtherExecute = 01; + + virtual ~System() { } + + virtual bool success(Status) = 0; + virtual void* allocate(unsigned size) = 0; + virtual void zero(void*, unsigned size) = 0; + virtual void free(void*) = 0; + virtual Status start(Thread*) = 0; + virtual Status make(Monitor**) = 0; + virtual Status open(File**, const char* path, int flags, int mode) = 0; + virtual void NO_RETURN abort() = 0; +}; + +#endif//SYSTEM_H