BUFFERX.H 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /*
  2. ** Command & Conquer Red Alert(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. /* $Header: /CounterStrike/BUFFERX.H 1 3/03/97 10:24a Joe_bostic $ */
  19. /***********************************************************************************************
  20. *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
  21. ***********************************************************************************************
  22. * *
  23. * Project Name : Command & Conquer *
  24. * *
  25. * File Name : BUFFER.H *
  26. * *
  27. * Programmer : Joe L. Bostic *
  28. * *
  29. * Start Date : 05/04/96 *
  30. * *
  31. * Last Update : May 4, 1996 [JLB] *
  32. * *
  33. *---------------------------------------------------------------------------------------------*
  34. * Functions: *
  35. * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
  36. #ifndef BUFFERx_H
  37. #define BUFFERx_H
  38. #include "wwfile.h"
  39. /*
  40. ** This is a transmuter interface designed to aid implementation of compression, encryption, or
  41. ** data analysis classes. The Transmuter should be derived into a class that performs the necessary
  42. ** processing.
  43. */
  44. class Transmuter {
  45. public:
  46. Transmuter(void) : Output(0) {}
  47. virtual ~Transmuter(void) {}
  48. /*
  49. ** These are the interface function that are used to pass data to the transmuter. The
  50. ** default implementation of these functions do nothing other than pass the data onto
  51. ** the subsequent transmuter. For practical use, these functions should be overloaded to
  52. ** do something more useful.
  53. */
  54. virtual void Attach(Transmuter * transmuter) {Output = transmuter;}
  55. virtual void Flush(void) {if (Output) Output->Flush();}
  56. virtual void Put(const void * input, unsigned length) {if (Output) Output->Put(input, length);}
  57. protected:
  58. /*
  59. ** Pointer to the output transmuter.
  60. */
  61. Transmuter * Output;
  62. };
  63. class FileTransmuter {
  64. public:
  65. FileTransmuter(FileClass * file = NULL) : OutputFile(file) {}
  66. virtual void Attach(FileClass * file) {OutputFile = file;}
  67. virtual void Flush(void) {}
  68. virtual void Put(const void * input, unsigned length) {if (OutputFile) OutputFile->Write(input, length);}
  69. protected:
  70. FileClass * OutputFile;
  71. };
  72. class BufferTransmuter {
  73. public:
  74. BufferTransmuter(void * buffer = NULL) : BufferPtr(buffer) {}
  75. virtual void Attach(void * buffer) {BufferPtr = buffer;}
  76. virtual void Flush(void) {}
  77. virtual void Put(const void * input, unsigned length) {if (BufferPtr) {memcpy(BufferPtr, input, length);((char *&)BufferPtr) += length;}}
  78. protected:
  79. void * BufferPtr;
  80. };
  81. #endif