passage/minorGems/io/Serializable.h
2025-10-03 02:19:59 -04:00

81 lines
1.8 KiB
C++

/*
* Modification History
*
* 2001-January-10 Jason Rohrer
* Created.
* Added untility functions for converting integers to and from byte arrays.
*
* 2001-January-15 Jason Rohrer
* Made utility functions static.
* Fixed a major bug in the longToBytes function.
*
* 2001-February-3 Jason Rohrer
* Removed the long io functions, which are now contained in the
* input- and outputStream classes.
*
* 2005-November-21 Jason Rohrer
* Fixed a warning by adding a virtual destructor.
*/
#include "minorGems/common.h"
#ifndef SERIALIZABLE_CLASS_INCLUDED
#define SERIALIZABLE_CLASS_INCLUDED
#include "InputStream.h"
#include "OutputStream.h"
/**
* Interface for an object that can be serialized to and deserialized
* from a stream.
*
* Note that the deserialize function is meant to be called from an already
* constructed object (to set object parameters using data read from the
* stream), and is not a method of obtaining an object.
*
* All multi-byte data members should be encoded in using a big endian format.
*
* @author Jason Rohrer
*/
class Serializable {
public:
/**
* Writes this object out to a stream.
*
* @param inOutputStream the stream to write to.
*
* @return the number of bytes written successfully,
* or -1 for a stream error.
*/
virtual int serialize( OutputStream *inOutputStream ) = 0;
/**
* Reads this object in from a stream.
*
* @param inInputStream the stream to read from.
*
* @return the number of bytes read successfully,
* or -1 for a stream error.
*/
virtual int deserialize( InputStream *inInputStream ) = 0;
virtual ~Serializable();
};
inline Serializable::~Serializable() {
// does nothing
// exists to ensure that subclass destructors are called
}
#endif