summaryrefslogtreecommitdiff
path: root/include/nw4r/ut/ut_FileStream.h
blob: 0252762dd3aed899cc4a4cb84a37cb38d2554f06 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#ifndef NW4R_UT_FILE_STREAM_H
#define NW4R_UT_FILE_STREAM_H
#include "nw4r/types_nw4r.h"
#include "nw4r/ut/ut_IOStream.h"

namespace nw4r {
namespace ut {

class FileStream : public IOStream {
public:
    NW4R_UT_RTTI_DECL(FileStream);

    enum SeekOrigin {
        SEEKORG_BEG,
        SEEKORG_CUR,
        SEEKORG_END
    };

    enum SeekOrigin_ {
        SEEK_ORIGIN_SET,
        SEEK_ORIGIN_CUR,
        SEEK_ORIGIN_END
    };

    class FilePosition {
    public:
        FilePosition() : mFileSize(0), mFileOffset(0) {}

        u32 GetFileSize() const {
            return mFileSize;
        }
        void SetFileSize(u32 fileSize) {
            mFileSize = fileSize;
        }

        u32 Tell() const {
            return mFileOffset;
        }

        u32 Skip(s32 offset);
        u32 Append(s32 offset);
        void Seek(s32 offset, u32 origin);

    private:
        u32 mFileSize;   // at 0x0
        u32 mFileOffset; // at 0x4
    };

public:
    FileStream() {}
    virtual ~FileStream() {} // at 0xC

    virtual u32 GetSize() const = 0;                             // at 0x40
    virtual void Seek(s32 offset, u32 origin);                   // at 0x44
    virtual void Cancel();                                       // at 0x48
    virtual bool CancelAsync(AsyncCallback callback, void *arg); // at 0x4C
    virtual bool CanSeek() const = 0;                            // at 0x50
    virtual bool CanCancel() const = 0;                          // at 0x54
    virtual u32 Tell() const = 0;                                // at 0x58
};

} // namespace ut
} // namespace nw4r

#endif