File: StreamHandle.h

package info (click to toggle)
pose 3.0a3-3
  • links: PTS
  • area: contrib
  • in suites: potato
  • size: 15,500 kB
  • ctags: 20,548
  • sloc: ansic: 72,579; cpp: 50,198; perl: 1,336; python: 1,242; sh: 363; makefile: 290
file content (70 lines) | stat: -rw-r--r-- 1,499 bytes parent folder | download
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
66
67
68
69
70
/* -*- mode: C++; tab-width: 4 -*- */
/* ================================================================================== */
/* Copyright (c) 1998-1999 3Com Corporation or its subsidiaries. All rights reserved. */
/* ================================================================================== */

#ifndef STREAMHANDLE_H_
#define STREAMHANDLE_H_

#include "ErrorHandling.h"		// ErrCode

class FileReference;

enum SeekMode
{
	kSeekSet,
	kSeekCur,
	kSeekEnd
};

class StreamHandle
{
	public:
							StreamHandle	(void);
		virtual				~StreamHandle	(void);

		virtual void		SetPos			(uae_s32 offset, SeekMode) = 0;
		virtual uae_s32		GetPos			(void) = 0;

		virtual uae_s32		GetLength		(void) = 0;

		virtual void		Read			(uae_s32 length, void* buffer) = 0;
		virtual void		Write			(uae_s32 length, const void* buffer);

		Bool				IsFile			(void) { return false; }
		Bool				GetFileRef		(FileReference& f);

	protected:
		void				Throw			(ErrCode);
};


class BufferHandle : public StreamHandle
{
	public:
							BufferHandle	(void* data,
											 uae_s32 size);
		virtual				~BufferHandle	(void);

		virtual void		SetPos			(long offset, SeekMode);
		virtual uae_s32		GetPos			(void) { return fPos; }

		virtual uae_s32		GetLength		(void) { return fSize; }

		virtual void		Read			(uae_s32 length, void* buffer);

	private:

		// Copy constructor disabled
							BufferHandle	(const BufferHandle&);

		char*				fData;
		uae_s32				fSize;
		uae_s32				fPos;
};



#endif	// STREAMHANDLE_H_