1/*
2 * Copyright 2009, Haiku Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _BITMAP_STREAM_H
6#define _BITMAP_STREAM_H
7
8
9#include <ByteOrder.h>
10#include <DataIO.h>
11#include <TranslationDefs.h>
12#include <TranslatorFormats.h>
13
14
15class BBitmap;
16
17
18class BBitmapStream : public BPositionIO {
19public:
20								BBitmapStream(BBitmap* bitmap = NULL);
21	virtual						~BBitmapStream();
22
23	virtual	ssize_t				ReadAt(off_t offset, void* buffer, size_t size);
24	virtual	ssize_t				WriteAt(off_t offset, const void* buffer,
25									size_t size);
26	virtual	off_t				Seek(off_t position, uint32 seekMode);
27	virtual	off_t				Position() const;
28	virtual	off_t				Size() const;
29	virtual	status_t			SetSize(off_t size);
30
31			status_t			DetachBitmap(BBitmap** _bitmap);
32
33protected:
34			void				SwapHeader(const TranslatorBitmap* source,
35									TranslatorBitmap* destination);
36
37protected:
38			TranslatorBitmap	fHeader;
39			BBitmap*			fBitmap;
40			size_t				fPosition;
41			size_t				fSize;
42			bool				fDetached;
43
44private:
45	virtual	void _ReservedBitmapStream1();
46	virtual void _ReservedBitmapStream2();
47
48private:
49			TranslatorBitmap*	fBigEndianHeader;
50			long				_reserved[5];
51};
52
53
54#endif	// _BITMAP_STREAM_H
55