#ifndef V_NODE_H
#define V_NODE_H
#include <fs_interface.h>
#include "StatItem.h"
class VNode {
public:
VNode();
VNode(const VNode &node);
VNode(ino_t id);
VNode(uint32 dirID, uint32 objectID);
~VNode();
status_t SetTo(ino_t id);
status_t SetTo(uint32 dirID, uint32 objectID);
void SetDirID(uint32 id) { fDirID = id; }
uint32 GetDirID() const { return fDirID; }
void SetObjectID(uint32 id) { fObjectID = id; }
uint32 GetObjectID() const { return fObjectID; }
ino_t GetID() const;
void SetParentID(uint32 dirID, uint32 objectID);
void SetParentID(ino_t id) { fParentID = id; }
ino_t GetParentID() const { return fParentID; }
StatData *GetStatData() { return &fStatData; }
const StatData *GetStatData() const { return &fStatData; }
bool IsDir() const { return fStatData.IsDir(); }
bool IsFile() const { return fStatData.IsFile(); }
bool IsSymlink() const { return fStatData.IsSymlink(); }
bool IsEsoteric() const { return fStatData.IsEsoteric(); }
static ino_t GetIDFor(uint32 dirID, uint32 objectID)
{ return (ino_t)((uint64)dirID << 32 | (uint64)objectID); }
static uint32 GetDirIDFor(ino_t id) { return uint32((uint64)id >> 32); }
static uint32 GetObjectIDFor(ino_t id)
{ return uint32((uint64)id & 0xffffffffULL); }
VNode &operator=(const VNode &node);
private:
ino_t fParentID;
uint32 fDirID;
uint32 fObjectID;
StatData fStatData;
};
#endif