#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 bool tryAcquire(void* id) = 0; virtual void acquire(void* id) = 0; virtual void release(void* id) = 0; virtual void wait(void* id) = 0; virtual void notify(void* id) = 0; virtual void notifyAll(void* id) = 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 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