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
|
#include "stdafx.h"
#include "MemoryStream.h"
MemoryStream::MemoryStream() : data(null), size(0), capacity(0), p(0) {}
MemoryStream::MemoryStream(const byte *data, nat size) : size(size), capacity(size), p(0) {
this->data = new byte[size];
memcpy(this->data, data, size);
}
MemoryStream::~MemoryStream() {
delete[] data;
}
Stream *MemoryStream::clone() const {
return new MemoryStream(data, size);
}
void MemoryStream::write(nat count, const void *from) {
ensure(p + count);
memcpy(data + p, from, count);
p += count;
size = max(size, p);
}
nat MemoryStream::read(nat count, void *to) {
count = min(count, size - p);
memcpy(to, data + p, count);
p += count;
return count;
}
nat64 MemoryStream::pos() const {
return p;
}
nat64 MemoryStream::length() const {
return size;
}
void MemoryStream::seek(nat64 to) {
p = nat(min(nat64(size), to));
}
bool MemoryStream::valid() const {
return true;
}
void MemoryStream::ensure(nat n) {
if (capacity >= n)
return;
capacity = max(128u, max(capacity*2, n));
byte *old = data;
data = new byte[capacity];
if (old) {
memcpy(data, old, size);
delete []old;
}
}
|