Xfer.h 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. /*
  2. ** Command & Conquer Generals Zero Hour(tm)
  3. ** Copyright 2025 Electronic Arts Inc.
  4. **
  5. ** This program is free software: you can redistribute it and/or modify
  6. ** it under the terms of the GNU General Public License as published by
  7. ** the Free Software Foundation, either version 3 of the License, or
  8. ** (at your option) any later version.
  9. **
  10. ** This program is distributed in the hope that it will be useful,
  11. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. ** GNU General Public License for more details.
  14. **
  15. ** You should have received a copy of the GNU General Public License
  16. ** along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. ////////////////////////////////////////////////////////////////////////////////
  19. // //
  20. // (c) 2001-2003 Electronic Arts Inc. //
  21. // //
  22. ////////////////////////////////////////////////////////////////////////////////
  23. // FILE: Xfer.h ///////////////////////////////////////////////////////////////////////////////////
  24. // Author: Colin Day, February 2002
  25. // Desc: The Xfer system is capable of setting up operations to work with blocks of data
  26. // from other subsystems. It can work things such as file reading, file writing,
  27. // CRC computations etc
  28. ///////////////////////////////////////////////////////////////////////////////////////////////////
  29. #pragma once
  30. #ifndef __XFER_H_
  31. #define __XFER_H_
  32. // INCLUDES ///////////////////////////////////////////////////////////////////////////////////////
  33. #include "Common/STLTypedefs.h"
  34. #include "Common/ModelState.h"
  35. #include "Common/Science.h"
  36. #include "Common/Upgrade.h"
  37. // FORWARD REFERENCES /////////////////////////////////////////////////////////////////////////////
  38. class Snapshot;
  39. typedef Int Color;
  40. enum ObjectID;
  41. enum DrawableID;
  42. enum KindOfType;
  43. enum ScienceType;
  44. class Matrix3D;
  45. // ------------------------------------------------------------------------------------------------
  46. typedef UnsignedByte XferVersion;
  47. //-------------------------------------------------------------------------------------------------
  48. //-------------------------------------------------------------------------------------------------
  49. enum XferMode
  50. {
  51. XFER_INVALID = 0,
  52. XFER_SAVE,
  53. XFER_LOAD,
  54. XFER_CRC,
  55. NUM_XFER_TYPES // please keep this last
  56. };
  57. //-------------------------------------------------------------------------------------------------
  58. //-------------------------------------------------------------------------------------------------
  59. enum XferStatus
  60. {
  61. XFER_STATUS_INVALID = 0,
  62. XFER_OK, ///< all is green and good
  63. XFER_EOF, ///< end of file encountered
  64. XFER_FILE_NOT_FOUND, ///< requested file does not exist
  65. XFER_FILE_NOT_OPEN, ///< file was not open
  66. XFER_FILE_ALREADY_OPEN, ///< this xfer is already open
  67. XFER_READ_ERROR, ///< error reading from file
  68. XFER_WRITE_ERROR, ///< error writing to file
  69. XFER_MODE_UNKNOWN, ///< unknown xfer mode
  70. XFER_SKIP_ERROR, ///< error skipping file
  71. XFER_BEGIN_END_MISMATCH, ///< mismatched pair calls of begin/end block
  72. XFER_OUT_OF_MEMORY, ///< out of memory
  73. XFER_STRING_ERROR, ///< error with strings
  74. XFER_INVALID_VERSION, ///< invalid version encountered
  75. XFER_INVALID_PARAMETERS, ///< invalid parameters
  76. XFER_LIST_NOT_EMPTY, ///< trying to xfer into a list that should be empty, but isn't
  77. XFER_UNKNOWN_STRING, ///< unrecognized string value
  78. XFER_ERROR_UNKNOWN, ///< unknown error (isn't that useful!)
  79. NUM_XFER_STATUS // please keep this last
  80. };
  81. // ------------------------------------------------------------------------------------------------
  82. // ------------------------------------------------------------------------------------------------
  83. enum XferOptions
  84. {
  85. XO_NONE = 0x00000000,
  86. XO_NO_POST_PROCESSING = 0x00000001,
  87. XO_ALL = 0xFFFFFFFF // keep this last please
  88. };
  89. ///////////////////////////////////////////////////////////////////////////////////////////////////
  90. typedef Int XferBlockSize;
  91. //-------------------------------------------------------------------------------------------------
  92. //-------------------------------------------------------------------------------------------------
  93. class Xfer
  94. {
  95. public:
  96. Xfer( void );
  97. virtual ~Xfer( void );
  98. virtual XferMode getXferMode( void ) { return m_xferMode; }
  99. AsciiString getIdentifier( void ) { return m_identifier; }
  100. // xfer management
  101. virtual void setOptions( UnsignedInt options ) { BitSet( m_options, options ); }
  102. virtual void clearOptions( UnsignedInt options ) { BitClear( m_options, options ); }
  103. virtual UnsignedInt getOptions( void ) { return m_options; }
  104. virtual void open( AsciiString identifier ) = 0; ///< xfer open event
  105. virtual void close( void ) = 0; ///< xfer close event
  106. virtual Int beginBlock( void ) = 0; ///< xfer begin block event
  107. virtual void endBlock( void ) = 0; ///< xfer end block event
  108. virtual void skip( Int dataSize ) = 0; ///< xfer skip data
  109. virtual void xferSnapshot( Snapshot *snapshot ) = 0; ///< entry point for xfering a snapshot
  110. //
  111. // default transfer methods, these call the implementation method with the data
  112. // parameters. You may use the default, or derive and create new ways to xfer each
  113. // of these types of data
  114. //
  115. virtual void xferVersion( XferVersion *versionData, XferVersion currentVersion );
  116. virtual void xferByte( Byte *byteData );
  117. virtual void xferUnsignedByte( UnsignedByte *unsignedByteData );
  118. virtual void xferBool( Bool *boolData );
  119. virtual void xferInt( Int *intData );
  120. virtual void xferInt64( Int64 *int64Data );
  121. virtual void xferUnsignedInt( UnsignedInt *unsignedIntData );
  122. virtual void xferShort( Short *shortData );
  123. virtual void xferUnsignedShort( UnsignedShort *unsignedShortData );
  124. virtual void xferReal( Real *realData );
  125. virtual void xferMarkerLabel( AsciiString asciiStringData ); // This is purely for readability purposes - it is explicitly discarded on load.
  126. virtual void xferAsciiString( AsciiString *asciiStringData );
  127. virtual void xferUnicodeString( UnicodeString *unicodeStringData );
  128. virtual void xferCoord3D( Coord3D *coord3D );
  129. virtual void xferICoord3D( ICoord3D *iCoord3D );
  130. virtual void xferRegion3D( Region3D *region3D );
  131. virtual void xferIRegion3D( IRegion3D *iRegion3D );
  132. virtual void xferCoord2D( Coord2D *coord2D );
  133. virtual void xferICoord2D( ICoord2D *iCoord2D );
  134. virtual void xferRegion2D( Region2D *region2D );
  135. virtual void xferIRegion2D( IRegion2D *iRegion2D );
  136. virtual void xferRealRange( RealRange *realRange );
  137. virtual void xferColor( Color *color );
  138. virtual void xferRGBColor( RGBColor *rgbColor );
  139. virtual void xferRGBAColorReal( RGBAColorReal *rgbaColorReal );
  140. virtual void xferRGBAColorInt( RGBAColorInt *rgbaColorInt );
  141. virtual void xferObjectID( ObjectID *objectID );
  142. virtual void xferDrawableID( DrawableID *drawableID );
  143. virtual void xferSTLObjectIDVector( std::vector<ObjectID> *objectIDVectorData );
  144. virtual void xferSTLObjectIDList( std::list< ObjectID > *objectIDListData );
  145. virtual void xferSTLIntList( std::list< Int > *intListData );
  146. virtual void xferScienceType( ScienceType *science );
  147. virtual void xferScienceVec( ScienceVec *scienceVec );
  148. virtual void xferKindOf( KindOfType *kindOfData );
  149. virtual void xferUpgradeMask( UpgradeMaskType *upgradeMaskData );
  150. virtual void xferUser( void *data, Int dataSize );
  151. virtual void xferMatrix3D( Matrix3D* mtx );
  152. virtual void xferMapName( AsciiString *mapNameData );
  153. protected:
  154. // this is the actual xfer impelmentation that each derived class should implement
  155. virtual void xferImplementation( void *data, Int dataSize ) = 0;
  156. UnsignedInt m_options; ///< xfer options
  157. XferMode m_xferMode; ///< the current xfer mode
  158. AsciiString m_identifier; ///< the string identifier
  159. };
  160. #endif // __XFER_H_