Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cFileText.h
Go to the documentation of this file.
1 //
4 //
5 
6 #ifndef _INC_cFileText_H
7 #define _INC_cFileText_H
8 #ifndef NO_PRAGMA_ONCE
9 #pragma once
10 #endif
11 
12 #include "cFile.h"
13 #include "cTextPos.h"
14 
15 #if USE_CRT
16 
17 namespace Gray
18 {
19  UNITTEST2_PREDEF(cFileText);
20 
21 #if defined(UNDER_CE) || defined(__linux__)
22  typedef HANDLE FILEDESC_t;
23 #else
24  typedef int FILEDESC_t;
25 #endif
26 
27  class GRAYCORE_LINK cFileText : public cFile // Try to be compatible with MFC CStdioFile
28  {
33 
34  typedef cFile SUPER_t;
35 
36  protected:
37  FILE* m_pStream;
38  private:
39  ITERATE_t m_iCurLineNum;
40 
41  private:
42  const FILECHAR_t* get_ModeCPtr() const;
43  HRESULT OpenCreate(cStringF sFilePath, OF_FLAGS_t nOpenFlags = OF_CREATE | OF_WRITE, _SECURITY_ATTRIBUTES* pSa = nullptr)
44  {
46  ASSERT(0);
47  UNREFERENCED_PARAMETER(sFilePath);
48  UNREFERENCED_PARAMETER(nOpenFlags);
50  return E_NOTIMPL;
51  }
52 
53  public:
55  cFileText(cStringF sFilePath, OF_FLAGS_t nOpenFlags);
56  virtual ~cFileText();
57 
58  virtual bool isFileOpen() const override
59  {
60  return m_pStream != nullptr;
61  }
62  bool isEOF() const;
64 
65  // NOT OF_TEXT since \n processing is weird.
66  virtual HRESULT OpenX(cStringF sFilePath = "", OF_FLAGS_t nOpenFlags = OF_READ | OF_SHARE_DENY_NONE) override;
67  virtual void Close(void) override;
68  HRESULT OpenFileHandle(HANDLE h, OF_FLAGS_t nOpenFlags);
69 
71  {
72  FILE* pStream = m_pStream;
73  DetachFileHandle();
74  m_pStream = nullptr;
75  return pStream;
76  }
77 
78  virtual STREAM_SEEKRET_t Seek(STREAM_OFFSET_t offset = 0, SEEK_ORIGIN_TYPE eSeekOrigin = SEEK_Set) override;
79  virtual STREAM_POS_t GetPosition() const override;
80 
81  virtual HRESULT FlushX() override;
82  virtual HRESULT ReadX(void* pBuffer, size_t nSizeMax) override;
83  virtual HRESULT WriteX(const void* pData, size_t nDataSize) override;
84 
85  virtual HRESULT WriteString(const char* pszStr) override;
86  virtual HRESULT WriteString(const wchar_t* pszStr) override
87  {
88  return SUPER_t::WriteString(pszStr);
89  }
90  virtual HRESULT ReadStringLine(char* pBuffer, StrLen_t nSizeMax) override;
91  virtual HRESULT ReadStringLine(wchar_t* pszBuffer, StrLen_t iSizeMax) override
92  {
93  return SUPER_t::ReadStringLine(pszBuffer, iSizeMax);
94  }
95 
97  // HRESULT ReadStringLineW(cStringW &r);
98 
99 #ifndef _MFC_VER
100  BOOL ReadString(CString& rString)
101  {
102  // Emulate MFC
103  HRESULT hRes = ReadStringLineA(rString);
104  return SUCCEEDED(hRes);
105  }
106 #endif
107 
108  bool put_TextPos(const cTextPos& rPos);
110  {
111  return cTextPos(GetPosition(), m_iCurLineNum, 0);
112  }
114  {
115  return m_iCurLineNum;
116  }
117 
118  FILE* get_FileStream() const noexcept
119  {
120  return m_pStream;
121  }
122  // operator FILE* () const { return m_pStream; } // Dangerous.
123 
125  };
126 }
127 
128 #ifndef _MFC_VER
129 typedef Gray::cFileText CStdioFile; // emulate _MFC_VER
130 #endif
131 
132 #endif // USE_CRT
133 #endif // _INC_cFileText_H
#define GRAYCORE_LINK
Definition: GrayCore.h:47
#define SUCCEEDED(x)
Definition: HResult.h:29
#define UNREFERENCED_PARAMETER(P)
< _WIN32 type thing. get rid of stupid warning.
Definition: SysTypes.h:299
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
#define ASSERT(exp)
Definition: cDebugAssert.h:87
Gray::cFileText CStdioFile
Definition: cFileText.h:129
#define UNITTEST2_PREDEF(x)
Definition: cUnitTestDecl.h:19
#define UNITTEST_FRIEND(n)
Define this in the class body to be unit tested. Allow the unit test to access private/protected stuf...
Definition: cUnitTestDecl.h:17
Definition: cFile.h:84
Definition: cFileText.h:28
virtual HRESULT ReadStringLine(wchar_t *pszBuffer, StrLen_t iSizeMax) override
Definition: cFileText.h:91
FILE * DetachFileStream()
Definition: cFileText.h:70
virtual HRESULT ReadX(void *pBuffer, size_t nSizeMax) override
virtual bool isFileOpen() const override
Definition: cFileText.h:58
HRESULT OpenFileHandle(HANDLE h, OF_FLAGS_t nOpenFlags)
virtual HRESULT WriteString(const char *pszStr) override
HRESULT ReadStringLineA(cStringA &r)
virtual HRESULT WriteString(const wchar_t *pszStr) override
Definition: cFileText.h:86
cFileText(cStringF sFilePath, OF_FLAGS_t nOpenFlags)
virtual HRESULT WriteX(const void *pData, size_t nDataSize) override
FILE * get_FileStream() const noexcept
Definition: cFileText.h:118
bool put_TextPos(const cTextPos &rPos)
virtual void Close(void) override
virtual HRESULT OpenX(cStringF sFilePath="", OF_FLAGS_t nOpenFlags=OF_READ|OF_SHARE_DENY_NONE) override
virtual HRESULT FlushX() override
cTextPos get_TextPos() const
Definition: cFileText.h:109
FILE * m_pStream
the current open script/text type file. named as MFC CStdioFile.
Definition: cFileText.h:37
virtual HRESULT ReadStringLine(char *pBuffer, StrLen_t nSizeMax) override
virtual ~cFileText()
bool isEOF() const
HRESULT GetStreamError() const
ITERATE_t get_CurrentLineNumber() const noexcept
Definition: cFileText.h:113
BOOL ReadString(CString &rString)
Definition: cFileText.h:100
virtual STREAM_SEEKRET_t Seek(STREAM_OFFSET_t offset=0, SEEK_ORIGIN_TYPE eSeekOrigin=SEEK_Set) override
virtual STREAM_POS_t GetPosition() const override
Definition: cFile.h:137
Definition: cTextPos.h:18
< The main namespace for all Core functions.
Definition: GrayCore.cpp:14
LONG_PTR STREAM_OFFSET_t
Might be 64 or 32 bit. TODO SET USE_FILE_POS64.
Definition: cOSHandle.h:52
int FILEDESC_t
Posix file descriptor id for std C. used for separate _fileno in FILE*.
Definition: cFileText.h:19
int StrLen_t
the length of a string in chars (bytes for UTF8, wchar_t for UNICODE). or offset in characters....
Definition: StrConst.h:32
UINT32 OF_FLAGS_t
Mask of file open flags OF_FLAGS_TYPE_.
Definition: cFile.h:77
LONG_PTR STREAM_SEEKRET_t
return from Seek()
Definition: cOSHandle.h:53
int ITERATE_t
like size_t but signed
Definition: Index.h:28
char FILECHAR_t
a UTF8 char in a file name. like TCHAR
Definition: FileName.h:22
ULONG_PTR STREAM_POS_t
NOT same as FILE_SIZE_t in 32 bit. Why not ?
Definition: cOSHandle.h:54
SEEK_ORIGIN_TYPE
Definition: cOSHandle.h:34
@ SEEK_Set
SEEK_SET = FILE_BEGIN = STREAM_SEEK_SET = 0 = relative to the start of the file.
Definition: cOSHandle.h:39