23 #define FILE_EOL STR_CRLF
25 #define FILE_EOL STR_NL
57 m_nCount += n.m_nCount;
58 if (n.m_tLast.get_TimeSys() > m_tLast.
get_TimeSys())
88 static const BYTE k_SIZE_MASK = 0x80;
89 static const size_t k_FILE_BLOCK_SIZE = (32 * 1024);
157 HRESULT hRes = WriteX(pVal, nDataSize);
164 template<
typename TYPE >
167 HRESULT WriteSize(
size_t nSize);
171 return WriteSize(nHashCode);
179 HRESULT hRes = WriteSize(nSize);
184 return WriteT(pBuffer, nSize);
187 template<
typename _CH >
192 return WriteN(pszStr, (pszStr ==
nullptr) ? 0 : (
StrT::Len(pszStr) *
sizeof(_CH)));
194 template<
typename _CH >
203 for (; nCount-- > 0;)
205 HRESULT hRes = WriteString(szTmp);
219 if (pszStr ==
nullptr)
222 return WriteT(pszStr, iLen *
sizeof(
char));
231 if (pszStr ==
nullptr)
234 HRESULT hRes = WriteT(pszStr, iLen *
sizeof(
wchar_t));
237 return(hRes /
sizeof(
wchar_t));
245 ASSERT(pszFormat !=
nullptr);
249 return WriteString(szTemp);
256 ASSERT(pszFormat !=
nullptr);
260 return WriteString(szTemp);
269 ASSERT(pszFormat !=
nullptr);
271 va_start(vargs, pszFormat);
272 StrLen_t iLenRet = VPrintf(pszFormat, vargs);
282 ASSERT(pszFormat !=
nullptr);
284 va_start(vargs, pszFormat);
285 StrLen_t iLenRet = VPrintf(pszFormat, vargs);
301 #define CTYPE_DEF(a,_TYPE,c,d,e,f,g,h) template<> inline HRESULT cStreamOutput::WriteT<_TYPE>( _TYPE val ) { return WriteT(&val,sizeof(val)); }
351 size_t nLengthAlloc = (size_t)nLengthStream;
352 if (!block.Alloc(nLengthAlloc + nSizeExtra))
353 return E_OUTOFMEMORY;
354 return ReadT(block.get_Data(), nLengthAlloc);
357 virtual HRESULT ReadStringLine(OUT
char* pszBuffer,
StrLen_t iSizeMax);
358 virtual HRESULT ReadStringLine(OUT
wchar_t* pszBuffer,
StrLen_t iSizeMax);
367 HRESULT hRes = ReadX(pVal, nSize);
374 template<
typename TYPE >
377 template<
typename TYPE >
388 HRESULT ReadSize(OUT
size_t& nSize);
390 template<
typename TYPE >
395 HRESULT hRes = ReadSize(nSize);
402 return ReadSizeT<UINT32>(nHashCode);
407 return ReadSizeT<UINT64>(nHashCode);
415 HRESULT hRes = ReadSize(nSize);
418 if (nSize > nSizeMax)
423 return ReadT(pBuffer, nSize);
426 template<
typename _CH >
436 HRESULT hResRead = ReadN((BYTE*)pszStr, (
size_t)(iSizeMax - 1) *
sizeof(_CH));
439 StrLen_t nSizeRead = hResRead /
sizeof(_CH);
440 ASSERT(nSizeRead < iSizeMax);
441 pszStr[nSizeRead] =
'\0';
442 return nSizeRead + 1;
445 virtual HRESULT ReadPeek(
void* pData,
size_t nDataSize);
449 #define CTYPE_DEF(a,_TYPE,c,d,e,f,g,h) template<> inline HRESULT cStreamInput::ReadT<_TYPE>( OUT _TYPE& rval ) { return ReadT(&rval,sizeof(rval)); }
504 ASSERT(isTransactionActive());
506 if (lPosRet == m_lPosStart)
508 ASSERT(lPosRet == m_lPosStart);
516 ASSERT(m_pInp !=
nullptr);
521 ASSERT(isTransactionActive());
526 if (m_pInp ==
nullptr)
528 if (isTransactionActive())
530 TransactionRollback();
544 ASSERT(isTransactionActive());
546 ASSERT(!isTransactionActive());
551 ASSERT(isTransactionActive());
552 m_lPosStart += nSize;
558 if (m_pInp ==
nullptr)
566 ASSERT(isTransactionActive());
#define GRAYCORE_LINK
Definition: GrayCore.h:47
#define SUCCEEDED(x)
Definition: HResult.h:29
#define HRESULT_WIN32_C(x)
a constant LSTATUS/error_status_t with no check, unlike HRESULT_FROM_WIN32()
Definition: HResult.h:79
#define FAILED(x)
Definition: HResult.h:30
#define STRMAX(x)
Get Max size of static string space. minus the '\0' terminator character.
Definition: StrConst.h:33
#define TYPE
Definition: StrT.cpp:38
#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
#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
static HRESULT GetDef(HRESULT hRes, HRESULT hResDef=E_FAIL) noexcept
Definition: HResult.h:232
void SeekToBegin()
Definition: cStream.h:110
virtual STREAM_POS_t GetLength() const
Definition: cStream.cpp:20
virtual STREAM_POS_t GetPosition() const
Definition: cStream.cpp:12
virtual STREAM_SEEKRET_t Seek(STREAM_OFFSET_t iOffset, SEEK_ORIGIN_TYPE eSeekOrigin=SEEK_Set)
Definition: cStream.h:95
STREAM_POS_t SeekToEnd()
Definition: cStream.h:115
virtual ~cStreamBase()
Definition: cStream.h:92
Definition: cStream.h:571
virtual HRESULT WriteX(const void *pData, size_t nDataSize) override
Definition: cStream.h:576
Definition: cStream.h:126
virtual ~cStreamOutput()
Definition: cStream.h:137
HRESULT WriteHashCode(HASHCODE_t nHashCode)
Definition: cStream.h:168
virtual HRESULT WriteString(const char *pszStr)
Definition: cStream.h:212
virtual HRESULT FlushX()
Definition: cStream.h:293
HRESULT WriteStringN(const _CH *pszStr)
Definition: cStream.h:188
StrLen_t _cdecl Printf(const char *pszFormat,...)
Definition: cStream.h:262
StrLen_t VPrintf(const char *pszFormat, va_list args)
Definition: cStream.h:240
HRESULT WriteT(const void *pVal, size_t nDataSize)
Definition: cStream.h:153
virtual HRESULT WriteX(const void *pData, size_t nDataSize)
Definition: cStream.h:141
HRESULT WriteCharRepeat(_CH nChar, int nCount=1)
Definition: cStream.h:195
HRESULT WriteN(const void *pBuffer, size_t nSize)
Definition: cStream.h:174
StrLen_t VPrintf(const wchar_t *pszFormat, va_list args)
Definition: cStream.h:251
StrLen_t _cdecl Printf(const wchar_t *pszFormat,...)
Definition: cStream.h:276
cStreamOutput() noexcept
Definition: cStream.h:134
virtual HRESULT WriteString(const wchar_t *pszStr)
Definition: cStream.h:224
void ResetStat() noexcept
Definition: cStream.h:45
void UpdateStat(size_t n) noexcept
Definition: cStream.h:50
cStreamStat() noexcept
Definition: cStream.h:40
cTimeSys m_tLast
When did i last move data?
Definition: cStream.h:37
void Add(const cStreamStat &n) noexcept
Definition: cStream.h:55
STREAM_POS_t m_nCount
Keep arbitrary stats on how much i move (bytes).
Definition: cStream.h:36
cStreamStat m_StatInp
Definition: cStream.h:72
void Add(const cStreamStats &n)
Definition: cStream.h:75
cStreamStat m_StatOut
Definition: cStream.h:71
Definition: cStream.h:491
void SetTransactionComplete()
Definition: cStream.h:541
void SetTransactionRollback()
Definition: cStream.h:562
void SetTransactionCompleteN(size_t nSize)
Definition: cStream.h:548
void SetTransactionFailed()
Definition: cStream.h:554
cStreamInput * m_pInp
Pull transaction data from this stream.
Definition: cStream.h:496
HRESULT TransactionRollback()
Definition: cStream.h:501
size_t m_nSeekSizeMinPrev
Previous value. Maybe nested transactions !
Definition: cStream.h:498
cStreamTransaction(cStreamInput *pInp)
Definition: cStream.h:513
bool isTransactionActive() const
Definition: cStream.h:536
~cStreamTransaction()
Definition: cStream.h:523
STREAM_SEEKRET_t m_lPosStart
Definition: cStream.h:497
Definition: cStream.h:456
virtual STREAM_POS_t GetLength() const override
Definition: cStream.h:474
void SeekToBegin()
Definition: cStream.h:478
STREAM_POS_t SeekToEnd()
Definition: cStream.h:482
virtual STREAM_POS_t GetPosition() const override
Definition: cStream.h:470
virtual STREAM_SEEKRET_t Seek(STREAM_OFFSET_t iOffset, SEEK_ORIGIN_TYPE eSeekOrigin=SEEK_Set) override
Disambiguate Seek for cStreamBase to cStreamInput for stupid compiler.
Definition: cStream.h:466
Definition: cTimeSys.h:93
void InitTime(TIMESYS_t t=k_CLEAR) noexcept
Definition: cTimeSys.h:152
void InitTimeNow() noexcept
Definition: cTimeSys.h:156
TIMESYS_t get_TimeSys() const noexcept
Definition: cTimeSys.h:147
< 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 StrLen_t
the length of a string in chars (bytes for UTF8, wchar_t for UNICODE). or offset in characters....
Definition: StrConst.h:32
LONG_PTR STREAM_SEEKRET_t
return from Seek()
Definition: cOSHandle.h:53
INT32 TIMESYSD_t
Time delta. signed milli-Seconds Span. cTimeSys::k_DMAX, cTimeSys::k_INF = MAILSLOT_WAIT_FOREVER.
Definition: cTimeSys.h:28
UINT_PTR HASHCODE_t
could hold a pointer converted to a number? maybe 64 or 32 bit ? same as size_t.
Definition: GrayCore.h:116
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_End
SEEK_END = FILE_END = STREAM_SEEK_END = 2 = relative to the end of the file.
Definition: cOSHandle.h:41
@ SEEK_Set
SEEK_SET = FILE_BEGIN = STREAM_SEEK_SET = 0 = relative to the start of the file.
Definition: cOSHandle.h:39
class __DECL_IMPORT cStreamInput
Definition: cString.h:26
Definition: cStreamProgress.h:168
static const StrLen_t k_LEN_MAX
arbitrary max size for Format() etc. NOTE: _MSC_VER says stack frame should be at least 16384
Definition: StrT.h:75
static StrLen_t vsprintfN(OUT TYPE *pszOut, StrLen_t iLenOutMax, const TYPE *pszFormat, va_list vlist)
static StrLen_t Len(const TYPE *pszStr) noexcept
static const size_t k_ALLOC_MAX
256 * 64K = (arbitrary) largest reasonable single malloc.
Definition: cHeap.h:45
static TYPE NtoH(TYPE nVal) noexcept
Definition: cMem.h:502