i(intp.Arrays().begin()), end(intp.Arrays().end());
i != end; ++i) {
Array array;
+ array.typeId = i->typeId;
array.size = i->size;
array.ref = i->ref;
Write(out, &array, sizeof(Array));
Array array;
for (; out && out.tellg() < fileHeader.arraysEnd;) {
out.read(reinterpret_cast<char *>(&array), sizeof(Array));
- if (!array.ref) {
- out.seekg(array.size);
- continue;
+ if (array.ref) {
+ buffer = new char[array.size];
+ unsigned int pos = out.tellg();
+ out.seekg(pos);
+ out.read(buffer, array.size);
+ RelocateArray(buffer, array.size);
+ out.seekp(pos);
+ out.write(buffer, array.size);
+ out.seekg(out.tellp());
+ delete[] buffer;
+ } else {
+ const TypeDescription &td = TypeDescription::Get(array.typeId);
+ for (char *i = array.Data(), *end = array.Data() + array.size;
+ i < end; i += td.Size()) {
+ Relocate(i, td);
+ }
}
- buffer = new char[array.size];
- unsigned int pos = out.tellg();
- out.seekg(pos);
- out.read(buffer, array.size);
- RelocateArray(buffer, array.size);
- out.seekp(pos);
- out.write(buffer, array.size);
- out.seekg(out.tellp());
- delete[] buffer;
}
}