]> de.git.xonotic.org Git - voretournament/voretournament.git/blobdiff - misc/mediasource/netradiant-src/libs/profile/file.h
Move the netradiant and fteqcc sources
[voretournament/voretournament.git] / misc / mediasource / netradiant-src / libs / profile / file.h
diff --git a/misc/mediasource/netradiant-src/libs/profile/file.h b/misc/mediasource/netradiant-src/libs/profile/file.h
new file mode 100644 (file)
index 0000000..3ec5f08
--- /dev/null
@@ -0,0 +1,158 @@
+/*
+Copyright (c) 2001, Loki software, inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, 
+are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice, this list 
+of conditions and the following disclaimer.
+
+Redistributions in binary form must reproduce the above copyright notice, this
+list of conditions and the following disclaimer in the documentation and/or
+other materials provided with the distribution.
+
+Neither the name of Loki software nor the names of its contributors may be used 
+to endorse or promote products derived from this software without specific prior 
+written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' 
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
+DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY 
+DIRECT,INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+*/
+
+//
+//  file.h
+////////////////////////////////////////////////////
+
+#if !defined(INCLUDED_PROFILE_FILE_H)
+#define INCLUDED_PROFILE_FILE_H
+
+#include "idatastream.h"
+
+/*!
+API for data streams
+
+Based on an initial implementation by Loki software
+modified to be abstracted and shared across modules
+
+NOTE: why IDataStream and not IStream? because IStream is defined in windows IDL headers
+*/
+
+class IDataStream : public InputStream, public OutputStream
+{
+public:  
+  typedef int offset_type;
+  typedef std::size_t position_type;
+
+  virtual void IncRef() = 0;  ///< Increment the number of references to this object
+  virtual void DecRef() = 0; ///< Decrement the reference count
+
+  virtual position_type GetPosition() const = 0;
+  virtual int Seek(offset_type lOff, int nFrom) = 0;
+
+  virtual void SetLength(size_type nNewLen) = 0;
+  virtual size_type GetLength() const = 0;
+
+  virtual char* ReadString(char* pBuf, size_type nMax) = 0;
+  virtual int GetChar()=0;
+
+  virtual int PutChar(int c)=0;
+  virtual void printf(const char*, ...) = 0; ///< completely matches the usual printf behaviour
+
+  virtual void Abort() = 0;
+  virtual void Flush() = 0;
+  virtual void Close() = 0;
+};
+
+#include <stdio.h>
+
+class MemStream : public IDataStream
+{
+public:
+  MemStream();
+  MemStream(size_type nLen);
+  virtual ~MemStream();
+
+  int refCount;
+  void IncRef() { refCount++; }
+  void DecRef() { refCount--; if (refCount <= 0) delete this; }
+
+protected:
+  // MemFile specific:
+  size_type m_nGrowBytes;
+  size_type m_nPosition;
+  size_type m_nBufferSize;
+  size_type m_nFileSize;
+  unsigned char* m_pBuffer;
+  bool m_bAutoDelete;
+  void GrowFile(size_type nNewLen);
+
+public:
+  position_type GetPosition() const;
+  int Seek(offset_type lOff, int nFrom);
+  void SetLength(size_type nNewLen);
+  size_type GetLength() const;
+
+  unsigned char* GetBuffer() const
+    { return m_pBuffer; }
+
+  size_type read(byte_type* buffer, size_type length);
+  size_type write(const byte_type* buffer, size_type length);
+
+  char* ReadString(char* pBuf, size_type nMax);
+  int GetChar();
+
+  int PutChar(int c);
+  void printf(const char*, ...); ///< \todo implement on MemStream
+
+  void Abort();
+  void Flush();
+  void Close();
+  bool Open(const char *filename, const char *mode);
+};
+
+class FileStream : public IDataStream
+{
+public:
+  FileStream();
+  virtual ~FileStream();
+
+  int refCount;
+  void IncRef() { refCount++; }
+  void DecRef() { refCount--; if (refCount <= 0) delete this; }
+
+protected:
+  // DiscFile specific:
+  FILE* m_hFile;
+  bool m_bCloseOnDelete;
+
+public:
+  position_type GetPosition() const;
+  int Seek(offset_type lOff, int nFrom);
+  void SetLength(size_type nNewLen);
+  size_type GetLength() const;
+
+  size_type read(byte_type* buffer, size_type length);
+  size_type write(const byte_type* buffer, size_type length);
+
+  char* ReadString(char* pBuf, size_type nMax);
+  int GetChar();
+
+  int PutChar(int c);
+  void printf(const char*, ...); ///< completely matches the usual printf behaviour
+
+  void Abort();
+  void Flush();
+  void Close();
+  bool Open(const char *filename, const char *mode);
+};
+
+#endif