+ 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);
+ }