2025-04-27 07:49:33 -04:00

79 lines
1.4 KiB
C++

/*++
Copyright (C) 1995-2001 Microsoft Corporation
Module Name:
DataSrc.H
Abstract:
Declares DataSrc objects.
History:
a-davj 21-Dec-99 Created.
--*/
#include "stdio.h"
#ifndef _DataSrc_H_
#define _DataSrc_H_
class DataSrc
{
public:
DataSrc(): m_iPos(0), m_iSize(0), m_iStatus(0){};
virtual ~DataSrc(){return;};
virtual wchar_t GetAt(int nOffset) = 0;
virtual void Move(int n) = 0;
int GetPos(){return m_iPos;};
int GetStatus(){return m_iStatus;};
bool PastEnd(){return m_iPos >= m_iSize;};
bool WouldBePastEnd(int iOffset){return (m_iPos+iOffset) >= m_iSize;};
virtual int MoveToStart() = 0;
virtual int MoveToPos(int iPos)=0;
protected:
int m_iPos;
int m_iSize;
int m_iStatus;
};
class FileDataSrc : public DataSrc
{
public:
FileDataSrc(TCHAR * pFileName);
~FileDataSrc();
wchar_t GetAt(int nOffset);
void Move(int n);
int MoveToStart();
int MoveToPos(int iPos);
private:
void UpdateBuffer();
FILE * m_fp;
TCHAR * m_pFileName;
int m_iFilePos;
int m_iToFar;
wchar_t m_Buff[10000];
};
class BufferDataSrc : public DataSrc
{
public:
BufferDataSrc(long lSize, char * pMemSrc);
~BufferDataSrc();
wchar_t GetAt(int nOffset);
void Move(int n);
int MoveToStart();
int MoveToPos(int iPos){m_iPos = iPos; return iPos;};
private:
wchar_t * m_Data; // only used if type is BUFFER
};
#endif