historical/toontown-classic.git/panda/include/pandaFileStream.h
2024-01-16 11:20:27 -06:00

122 lines
3.4 KiB
C++

/**
* PANDA 3D SOFTWARE
* Copyright (c) Carnegie Mellon University. All rights reserved.
*
* All use of this software is subject to the terms of the revised BSD
* license. You should have received a copy of this license along
* with this source code in a file named "LICENSE."
*
* @file pandaFileStream.h
* @author drose
* @date 2008-09-08
*/
#ifndef PANDAFILESTREAM_H
#define PANDAFILESTREAM_H
#include "dtoolbase.h"
#ifdef USE_PANDAFILESTREAM
#include "pandaFileStreamBuf.h"
/**
* Implements a C++ stream object suitable for reading from files on disk.
* This is similar to ifstream, but it provides low-level support for Panda's
* simple-threading implementation (using this interface will block only the
* current thread, rather than the entire process, on I/O waits).
*/
class EXPCL_DTOOL_DTOOLUTIL IFileStream : public std::istream {
PUBLISHED:
INLINE IFileStream();
INLINE explicit IFileStream(const char *filename, std::ios::openmode mode = std::ios::in);
INLINE ~IFileStream();
INLINE void open(const char *filename, std::ios::openmode mode = std::ios::in);
public:
#ifdef _WIN32
INLINE void attach(const char *filename, HANDLE handle, std::ios::openmode mode = std::ios::in);
#else
INLINE void attach(const char *filename, int fd, std::ios::openmode mode = std::ios::in);
#endif
PUBLISHED:
INLINE void close();
private:
PandaFileStreamBuf _buf;
};
/**
* Implements a C++ stream object suitable for writing to files on disk. This
* is similar to ofstream, but it provides low-level support for Panda's
* simple-threading implementation (using this interface will block only the
* current thread, rather than the entire process, on I/O waits).
*/
class EXPCL_DTOOL_DTOOLUTIL OFileStream : public std::ostream {
PUBLISHED:
INLINE OFileStream();
INLINE explicit OFileStream(const char *filename, std::ios::openmode mode = std::ios::out);
INLINE ~OFileStream();
INLINE void open(const char *filename, std::ios::openmode mode = std::ios::out);
public:
#ifdef _WIN32
INLINE void attach(const char *filename, HANDLE handle, std::ios::openmode mode = std::ios::out);
#else
INLINE void attach(const char *filename, int fd, std::ios::openmode mode = std::ios::out);
#endif
PUBLISHED:
INLINE void close();
private:
PandaFileStreamBuf _buf;
};
/**
* Implements a C++ stream object suitable for reading from and/or writing to
* files on disk. This is similar to fstream, but it provides low-level
* support for Panda's simple-threading implementation (using this interface
* will block only the current thread, rather than the entire process, on I/O
* waits).
*/
class EXPCL_DTOOL_DTOOLUTIL FileStream : public std::iostream {
PUBLISHED:
INLINE FileStream();
INLINE explicit FileStream(const char *filename, std::ios::openmode mode = std::ios::in);
INLINE ~FileStream();
INLINE void open(const char *filename, std::ios::openmode mode = std::ios::in);
public:
#ifdef _WIN32
INLINE void attach(const char *filename, HANDLE handle, std::ios::openmode mode);
#else
INLINE void attach(const char *filename, int fd, std::ios::openmode mode);
#endif
PUBLISHED:
INLINE void close();
private:
PandaFileStreamBuf _buf;
};
#include "pandaFileStream.I"
typedef IFileStream pifstream;
typedef OFileStream pofstream;
typedef FileStream pfstream;
#else // USE_PANDAFILESTREAM
typedef ifstream pifstream;
typedef ofstream pofstream;
typedef fstream pfstream;
#endif // USE_PANDAFILESTREAM
#endif