22 #ifndef BAGEL_MFC_AFX_H 23 #define BAGEL_MFC_AFX_H 25 #include "common/stream.h" 26 #include "bagel/mfc/minwindef.h" 36 #define DECLARE_DYNAMIC(class_name) \ 38 static const CRuntimeClass class##class_name; \ 39 virtual const CRuntimeClass *GetRuntimeClass() const override; \ 42 #define RUNTIME_CLASS(class_name) ((const CRuntimeClass *)(&class_name::class##class_name)) 44 #define IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, pfnNew) \ 45 const CRuntimeClass class_name::class##class_name = { \ 46 #class_name, sizeof(class class_name), wSchema, pfnNew, \ 47 RUNTIME_CLASS(base_class_name) }; \ 48 const CRuntimeClass* class_name::GetRuntimeClass() const \ 49 { return RUNTIME_CLASS(class_name); } 51 #define IMPLEMENT_DYNAMIC(class_name, base_class_name) \ 52 IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF, nullptr) 54 #define IMPLEMENT_DYNCREATE(class_name, base_class_name) \ 55 CObject *class_name::CreateObject() \ 56 { return new class_name; } \ 57 IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF, \ 58 class_name::CreateObject) 60 #define ASSERT_KINDOF(class_name, object) \ 61 assert((object)->IsKindOf(RUNTIME_CLASS(class_name))) 62 #define ASSERT_VALID(X) assert((X) != nullptr) 65 const char *m_lpszClassName;
67 unsigned int m_wSchema;
68 CObject *(*m_pfnCreateObject)();
88 virtual void AssertValid()
const {}
95 DECLARE_DYNAMIC(
CFile)
99 modeRead = (int)0x00000,
100 modeWrite = (
int)0x00001,
101 modeReadWrite = (int)0x00002,
102 shareCompat = (
int)0x00000,
103 shareExclusive = (int)0x00010,
104 shareDenyWrite = (
int)0x00020,
105 shareDenyRead = (int)0x00030,
106 shareDenyNone = (
int)0x00040,
107 modeNoInherit = (int)0x00080,
108 typeUnicode = (
int)0x00400,
109 modeCreate = (int)0x01000,
110 modeNoTruncate = (
int)0x02000,
111 typeText = (int)0x04000,
112 typeBinary = (
int)0x08000,
113 osNoBuffer = (int)0x10000,
114 osWriteThrough = (
int)0x20000,
115 osRandomAccess = (int)0x40000,
116 osSequentialScan = (
int)0x80000,
121 readOnly = FILE_ATTRIBUTE_READONLY,
122 hidden = FILE_ATTRIBUTE_HIDDEN,
123 system = FILE_ATTRIBUTE_SYSTEM,
125 directory = FILE_ATTRIBUTE_DIRECTORY,
126 archive = FILE_ATTRIBUTE_ARCHIVE,
127 device = FILE_ATTRIBUTE_DEVICE,
128 temporary = FILE_ATTRIBUTE_TEMPORARY,
129 sparse = FILE_ATTRIBUTE_SPARSE_FILE,
130 reparsePt = FILE_ATTRIBUTE_REPARSE_POINT,
131 compressed = FILE_ATTRIBUTE_COMPRESSED,
132 offline = FILE_ATTRIBUTE_OFFLINE,
133 notIndexed = FILE_ATTRIBUTE_NOT_CONTENT_INDEXED,
134 encrypted = FILE_ATTRIBUTE_ENCRYPTED
138 begin = 0x0, current = 0x1, end = 0x2
149 CFile(
const char *lpszFileName,
unsigned int nOpenFlags);
154 bool Open(
const char *lpszFileName,
155 unsigned int nOpenFlags = CFile::modeRead,
161 virtual uint64 Seek(int64 lOff,
unsigned int nFrom);
162 virtual uint64 GetLength()
const;
163 virtual uint64 GetPosition()
const;
165 virtual unsigned int Read(
void *lpBuf,
unsigned int nCount);
166 virtual void Write(
const void *lpBuf,
unsigned int nCount);
167 unsigned int ReadHuge(
void *lpBuf,
unsigned int nCount) {
168 return Read(lpBuf, nCount);
175 return *readStream();