-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(id.bytes, sizeof(struct uuid));
-}
-
-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->first);
- out->write_s64(i->second);
+ // Store any dependencies this object has on other segments, so they can be
+ // written when the segment is closed.
+ for (list<string>::const_iterator i = refs.begin(); i != refs.end(); ++i) {
+ segment->refs.insert(*i);