rpcsx/rpcs3/Emu/FS/vfsDirBase.h

112 lines
1.9 KiB
C
Raw Normal View History

#pragma once
2014-08-25 20:09:48 +02:00
class vfsDevice;
enum DirEntryFlags
{
DirEntry_TypeDir = 0x1,
DirEntry_TypeFile = 0x2,
DirEntry_TypeMask = 0x3,
DirEntry_PermWritable = 0x20,
DirEntry_PermReadable = 0x40,
DirEntry_PermExecutable = 0x80,
};
struct DirEntryInfo
{
std::string name;
u32 flags;
2015-04-15 16:27:37 +02:00
u64 size;
time_t create_time;
time_t access_time;
time_t modify_time;
DirEntryInfo()
: flags(0)
2015-04-15 16:27:37 +02:00
, size(0)
, create_time(0)
, access_time(0)
, modify_time(0)
{
}
};
class vfsDirBase
{
protected:
std::string m_cwd;
std::vector<DirEntryInfo> m_entries;
uint m_pos;
vfsDevice* m_device;
public:
vfsDirBase(vfsDevice* device);
virtual ~vfsDirBase();
virtual bool Open(const std::string& path);
virtual bool IsOpened() const;
virtual bool IsExists(const std::string& path) const;
virtual const std::vector<DirEntryInfo>& GetEntries() const;
virtual void Close();
virtual std::string GetPath() const;
virtual bool Create(const std::string& path) = 0;
//virtual bool Create(const DirEntryInfo& info)=0;
virtual bool Rename(const std::string& from, const std::string& to) = 0;
virtual bool Remove(const std::string& path) = 0;
virtual const DirEntryInfo* Read();
2014-11-29 14:16:53 +01:00
virtual const DirEntryInfo* First();
class iterator
{
vfsDirBase *parent;
const DirEntryInfo* data;
public:
iterator(vfsDirBase* parent)
2015-01-26 20:01:47 +01:00
: parent(parent)
, data(parent->First())
2014-11-29 14:16:53 +01:00
{
}
iterator(vfsDirBase* parent, const DirEntryInfo* data)
: parent(parent)
, data(data)
2014-11-29 14:16:53 +01:00
{
}
iterator& operator++()
{
data = parent->Read();
return *this;
}
iterator operator++(int)
{
const DirEntryInfo* olddata = data;
data = parent->Read();
return iterator(parent, olddata);
2014-11-29 14:16:53 +01:00
}
const DirEntryInfo* operator *()
{
return data;
}
bool operator !=(iterator other) const
2014-11-29 14:16:53 +01:00
{
return data != other.data;
}
};
iterator begin()
{
return iterator(this);
}
iterator end()
{
return iterator(this, nullptr);
2014-11-29 14:16:53 +01:00
}
};