5 public class TempFile : File
11 FileOpenMode openMode;
21 int Read(byte * buffer, uint size, uint count)
23 int readSize = size * count;
24 int read = Min(readSize, this.size - position);
26 if(position >= this.size) eof = true;
27 if(buffer) memcpy(buffer, this.buffer + position, read);
34 int Write(const byte * buffer, uint size, uint count)
36 int writeSize = size * count;
37 int written = writeSize;
39 if(this.size - position < writeSize)
41 this.size += writeSize - (this.size - position);
42 if(this.allocated < this.size)
45 if(this.allocated < this.size)
46 this.allocated = this.size * 2;
47 this.buffer = renew this.buffer byte[this.allocated];
50 memcpy(this.buffer + position, buffer, writeSize);
54 return written / size;
59 int read = Read(ch, 1, 1);
60 return !eof && read != 0;
65 int written = Write(&ch, 1, 1);
69 bool Puts(const char * string)
71 int len = string ? strlen(string) : 0;
72 int written = Write(string, 1, len);
73 return written == len;
76 bool Seek(int pos, FileSeekMode mode)
86 if(openMode == readWrite)
89 increase = pos - size;
108 if(position + pos >= size)
110 if(openMode == readWrite)
113 increase = position - size;
121 else if((int)position + pos < 0)
132 if((int)size + pos >= (int)size)
134 if(openMode == readWrite)
136 position = size + pos;
137 increase = position - size;
145 else if((int)size + pos < 0)
151 position = size + pos;
160 this.size += increase;
161 this.buffer = renew this.buffer byte[this.size];
181 bool Truncate(FileSize size)
183 buffer = renew buffer byte[size];
185 this.allocated = size;
186 if(position > size) position = size; // What to do here?
191 property FileOpenMode openMode
193 set { openMode = value; }
194 get { return openMode; }
196 property byte * buffer { get { return buffer; } };