DEADSOFTWARE

more sfs refactoring
[d2df-sdl.git] / src / unused / xstreams_sdl.pas
1 // special stream classes
2 {$MODE OBJFPC}
3 {$R+}
4 unit xstreams_sdl;
6 interface
8 uses
9 SysUtils, Classes, xstreams;
12 type
13 // ïîòîê-îá¸ðòêà äëÿ SDL_RWops
14 TSFSSDLStream = class(TStream)
15 protected
16 fRW: PSDL_RWops; // SDL-íàÿ ïðîêëàäêà
17 fFreeSource: Boolean; // óáèâàòü èñõîäíèê ïðè ïîìèðàíèè?
19 public
20 constructor Create (aSrc: PSDL_RWops; aFreeSource: Boolean=true);
21 destructor Destroy (); override;
23 function Read (var buffer; count: LongInt): LongInt; override;
24 function Write (const buffer; count: LongInt): LongInt; override;
25 function Seek (const offset: Int64; origin: TSeekOrigin): Int64; override;
26 end;
29 implementation
32 { TSFSSDLStream }
33 constructor TSFSSDLStream.Create (aSrc: PSDL_RWops; aFreeSource: Boolean=true);
34 begin
35 inherited Create();
36 //ASSERT(aSrc <> nil);
37 fRW := aSrc;
38 fFreeSource := aFreeSource;
39 end;
41 destructor TSFSSDLStream.Destroy ();
42 begin
43 if fFreeSource and (fRW <> nil) then SDL_FreeRW(fRW);
44 inherited Destroy();
45 end;
47 function TSFSSDLStream.Read (var buffer; count: LongInt): LongInt;
48 begin
49 if (fRW = nil) or (count <= 0) then begin result := 0; exit; end;
50 result := SDL_RWread(fRW, @buffer, 1, count);
51 end;
53 function TSFSSDLStream.Write (const buffer; count: LongInt): LongInt;
54 begin
55 if (fRW = nil) or (count <= 0) then begin result := 0; exit; end;
56 result := SDL_RWwrite(fRW, @buffer, 1, count);
57 end;
59 function TSFSSDLStream.Seek (const offset: Int64; origin: TSeekOrigin): Int64;
60 var
61 ss: Integer;
62 begin
63 if fRW = nil then begin result := 0; exit; end;
64 case origin of
65 soBeginning: ss := RW_SEEK_SET;
66 soCurrent: ss := RW_SEEK_CUR;
67 soEnd: ss := RW_SEEK_END;
68 else raise XStreamError.Create('invalid Seek() call');
69 // äðóãèõ íå áûâàåò. à ó êîãî áûâàåò, òîìó ÿ íå äîêòîð.
70 end;
71 result := SDL_RWseek(fRW, offset, ss);
72 if result = -1 then raise XStreamError.Create('Seek() error');
73 end;
76 end.