nuclear@1: #ifndef FS_H_ nuclear@1: #define FS_H_ nuclear@1: nuclear@1: #include nuclear@1: nuclear@1: class FSNode { nuclear@2: public: nuclear@2: enum Type { UNKNOWN, DIRECTORY, REGFILE, LINK, DEVICE, SOCKET, FIFO }; nuclear@2: nuclear@1: protected: nuclear@1: char *path, *name; nuclear@1: FSNode *parent; nuclear@1: nuclear@1: std::vector children; nuclear@2: bool expanded, sorted; nuclear@1: nuclear@2: Type type; nuclear@1: unsigned int uid, gid, mode; nuclear@1: nuclear@1: private: nuclear@1: FSNode(const FSNode&); nuclear@1: FSNode &operator =(const FSNode&); nuclear@1: nuclear@2: void sort_children(); nuclear@2: nuclear@1: public: nuclear@1: FSNode(); nuclear@1: virtual ~FSNode(); nuclear@1: nuclear@2: virtual void init(); nuclear@2: virtual void destroy(); nuclear@2: virtual void destroy_tree(); nuclear@2: nuclear@2: virtual void set_type(Type type); nuclear@2: virtual Type get_type() const; nuclear@2: virtual bool is_file() const; nuclear@2: virtual bool is_directory() const; nuclear@1: nuclear@1: virtual void set_path(const char *path); nuclear@1: virtual void set_name(const char *name); nuclear@1: nuclear@1: virtual const char *get_path() const; nuclear@1: virtual const char *get_name() const; nuclear@1: nuclear@2: virtual bool add_child(FSNode *node); nuclear@2: virtual bool remove_child(FSNode *node); nuclear@2: nuclear@2: virtual int find_child(FSNode *node) const; nuclear@2: virtual int find_child(const char *name) const; nuclear@1: nuclear@1: virtual FSNode *get_parent(); nuclear@1: virtual const FSNode *get_parent() const; nuclear@1: nuclear@1: virtual int get_child_count() const; nuclear@1: virtual FSNode *get_child(int n); nuclear@1: virtual const FSNode *get_child(int n) const; nuclear@1: nuclear@2: virtual bool expand(); nuclear@1: virtual bool is_expanded() const; nuclear@1: }; nuclear@1: nuclear@1: class FSDir : public FSNode { nuclear@1: public: nuclear@1: FSDir(); nuclear@1: nuclear@2: virtual bool expand(); nuclear@1: }; nuclear@1: nuclear@1: class FSFile : public FSNode { nuclear@1: protected: nuclear@1: unsigned long size; nuclear@2: enum Type type; nuclear@1: nuclear@1: public: nuclear@1: FSFile(); nuclear@1: nuclear@2: virtual void set_size(unsigned long s); nuclear@2: virtual unsigned long get_size() const; nuclear@1: }; nuclear@1: nuclear@1: #endif // FS_H_