Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
#ifndef GENERS_CPBUFFERREFERENCE_HH_
#define GENERS_CPBUFFERREFERENCE_HH_

#include <cassert>

#include "Alignment/Geners/interface/AbsReference.hh"
#include "Alignment/Geners/interface/ColumnBuffer.hh"
#include "Alignment/Geners/interface/binaryIO.hh"

namespace gs {
    namespace Private {
        class CPBufferReference : public AbsReference
        {
        public:
            inline CPBufferReference(AbsArchive& ar,
                                     const ClassId& bufClass,
                                     const ClassId& cbClass,
                                     const unsigned long long itemId)
                : AbsReference(ar, bufClass, "gs::CPBuffer", itemId),
                  bufClass_(bufClass), cbClass_(cbClass) {}

            inline void restore(const unsigned long number,
                                ColumnBuffer* obj, unsigned long* column) const
            {
                const unsigned long long itemId = this->id(number);
                assert(itemId);
                std::istream& is = this->positionInputStream(itemId);
                read_pod(is, column);
                if (is.fail()) throw IOReadFailure(
                    "In gs::Private::CPBufferReference::restore: "
                    "input stream failure");
                ColumnBuffer::restore(bufClass_, cbClass_, is, obj);
            }

        private:
            const ClassId& bufClass_;
            const ClassId& cbClass_;
        };
    }
}

#endif // GENERS_CPBUFFERREFERENCE_HH_