1 #include "Alignment/Geners/interface/IOException.hh" 3 #include "Alignment/Geners/interface/CPP11_auto_ptr.hh" 4 #include "Alignment/Geners/interface/CatalogEntry.hh" 5 #include "Alignment/Geners/interface/binaryIO.hh" 8 CatalogEntry::CatalogEntry()
9 : ItemDescriptor(), id_(0), len_(0), location_(ItemLocation(
std::streampos(0),
nullptr)) {}
11 CatalogEntry::CatalogEntry(
const ItemDescriptor &
r,
12 const unsigned long long id,
13 const unsigned compressionCod,
14 const unsigned long long itemLength,
15 const ItemLocation &location,
16 const unsigned long long offset)
21 compressionCode_(compressionCod),
24 throw gs::IOInvalidArgument(
"In CatalogEntry constructor: invalid item id");
27 bool CatalogEntry::isEqual(
const ItemDescriptor &
other)
const {
28 if ((
void *)
this == (
void *)(&other))
30 if (!ItemDescriptor::isEqual(other))
32 const CatalogEntry &r =
static_cast<const CatalogEntry &
>(
other);
33 return id_ == r.id_ && len_ == r.len_ && offset_ == r.offset_ && compressionCode_ == r.compressionCode_ &&
34 location_ == r.location_;
39 write_pod(of, ioPrototype());
40 write_pod(of,
name());
44 write_pod(of, compressionCode_);
47 unsigned char hasOffset = offset_ > 0ULL;
48 write_pod(of, hasOffset);
50 write_pod(of, offset_);
57 CatalogEntry *CatalogEntry::read(
const ClassId &
id,
const ClassId &locId, std::istream &
in) {
58 static const ClassId current(ClassId::makeId<CatalogEntry>());
59 current.ensureSameId(
id);
61 ClassId itemClass(in, 1);
64 read_pod(in, &ioPrototype);
66 read_pod(in, &category);
68 unsigned long long itemId = 0, itemLen = 0;
69 read_pod(in, &itemId);
70 read_pod(in, &itemLen);
73 read_pod(in, &coCode);
75 unsigned long long offset = 0;
76 unsigned char hasOffset = 0;
77 read_pod(in, &hasOffset);
79 read_pod(in, &offset);
81 CatalogEntry *rec =
nullptr;
83 CPP11_auto_ptr<ItemLocation>
loc(ItemLocation::read(locId, in));
85 rec =
new CatalogEntry(ItemDescriptor(itemClass, ioPrototype.c_str(), name.c_str(), category.c_str()),
95 bool CatalogEntry::humanReadable(std::ostream &os)
const {
96 os <<
"Id: " << id_ <<
'\n' 97 <<
"Class: " <<
type().id() <<
'\n' 98 <<
"Name: " <<
name() <<
'\n' 99 <<
"Category: " <<
category() <<
'\n' 100 <<
"I/O prototype: " << ioPrototype() <<
'\n' 101 <<
"URI: " << location().URI() <<
'\n' 102 <<
"Cached: " << location().cachedItemURI() <<
'\n' 103 <<
"Compression: " << compressionCode_ <<
'\n' 104 <<
"Length: " << len_ <<
'\n' 105 <<
"Streampos: " << location().streamPosition() <<
'\n' 106 <<
"Offset: " << offset_ << std::endl;