/* * NICE-Core - efficient algebra and computer vision methods * - libfbasics - library of some basic tools * See file License for license information. */ /*****************************************************************************/ #ifndef _BINSTREAMABLE_FBASICS_H #define _BINSTREAMABLE_FBASICS_H #include #include namespace NICE { /** * Abstract base class for binarily streamable classes. */ class BinStreamable { public: /** * Format (compression method) */ enum Format { /** * Save in binary format which is compressed with gzip * (only supported if compiled with zlib, use \#ifdef NICE_USELIB_ZLIB) */ BIN_GZ=3, /** * Save in binary format (uncompressed) */ BIN=4 }; virtual ~BinStreamable(){} /** * Read class attributes from ibinstream * \param stream ibinstream to read elements from */ virtual void read(ibinstream& stream) = 0; /** * Write class attributes to obinstream. * \param stream obinstream to write elements to */ virtual void write(obinstream& stream) const = 0; /** * Read class attributes from ibinstream * \param stream ibinstream to read elements from */ inline void readBin(ibinstream& stream) { read(stream); } /** * Write class attributes to obinstream. * \param stream obinstream to write elements to */ inline void writeBin(obinstream& stream) const { write(stream); } /** Read class attributes from a file. * \param filename Name of the file * \param compression file format \see SaveMethod */ virtual void readFromBinFile(const char *filename, Format compression=BIN); /** * Write class attributes to a file. * \param filename Name of the file * \param compression file format \see SaveMethod */ virtual void writeToBinFile(const char *filename, Format compression=BIN) const; }; inline obinstream& operator<<(obinstream &strm, const BinStreamable &ex) { ex.writeBin(strm); return strm; } inline ibinstream& operator>>(ibinstream &strm, BinStreamable &ex) { ex.readBin(strm); return strm; } }; // namespace NICE #endif /* _BINSTREAMABLE_FBASICS_H */