-SegmentWriter::SegmentWriter(OutputStream *output, struct uuid u)
- : raw_out(output),
- id(u),
- object_stream(NULL)
-{
- /* All output data will be checksummed except the very last few bytes,
- * which are the checksum itself. */
- out = new ChecksumOutputStream(*raw_out);
-
- /* Write out the segment header first. */
- static const char signature[] = "LBSSEG0\n";
- out->write(signature, strlen(signature));
- out->write_uuid(id);
-}
-
-SegmentWriter::~SegmentWriter()
-{
- if (object_stream)
- finish_object();
-
- // Write out the object table which gives the sizes and locations of all
- // objects, and then add the trailing signature, which indicates the end of
- // the segment and gives the offset of the object table.
- int64_t index_offset = out->get_pos();
-
- for (object_table::const_iterator i = objects.begin();
- i != objects.end(); ++i) {
- out->write_s64(i->offset);
- out->write_s64(i->size);
- out->write(i->type, sizeof(i->type));