#pragma once
#include "common.hpp"
#include "ent.hpp"
#include <vector>
#include <stack>
bool matches(const char**, const char*);
class DirEntries {
private:
std::vector<Ent*> entries;
public:
static bool before(const Ent*, const Ent*);
static bool after(const Ent* a, const Ent* b) { return !before(a, b); }
static DirEntries* getInst(int);
~DirEntries();
Ent* pop();
void unpop(Ent*);
};
class Dir {
private:
Dir(int, DirEntries*, Attr*);
public:
const int fd;
Attr* const attr;
DirEntries* const entries;
static Dir* getInst(const char*, Dir* parent=NULL);
~Dir();
};
class DirStack {
private:
std::stack<Dir*> st;
public:
DirStack(const char*);
~DirStack();
Dir* push(const char*);
Dir* get();
void pop();
};