#pragma once
#include "backend.h"
#include "file.h"
#include "file_table.h"
#include <assert.h>
#include <emscripten/html5.h>
#include <mutex>
#include <sys/stat.h>
#include <vector>
#include <wasi/api.h>
namespace wasmfs {
class WasmFS {
std::vector<std::unique_ptr<Backend>> backendTable;
FileTable fileTable;
std::shared_ptr<Directory> rootDirectory;
std::shared_ptr<Directory> cwd;
std::mutex mutex;
std::shared_ptr<Directory> initRootDirectory();
void preloadFiles();
public:
WasmFS();
~WasmFS();
FileTable& getFileTable() { return fileTable; }
std::shared_ptr<Directory> getRootDirectory() { return rootDirectory; };
std::shared_ptr<Directory> getCWD() {
const std::lock_guard<std::mutex> lock(mutex);
return cwd;
};
void setCWD(std::shared_ptr<Directory> directory) {
const std::lock_guard<std::mutex> lock(mutex);
cwd = directory;
};
backend_t addBackend(std::unique_ptr<Backend> backend) {
const std::lock_guard<std::mutex> lock(mutex);
backendTable.push_back(std::move(backend));
return backendTable.back().get();
}
};
extern WasmFS wasmFS;
}