KrisLibrary  1.0.0
File.h
Go to the documentation of this file.
1 #ifndef BASIC_FILE_H
2 #define BASIC_FILE_H
3 
5 #define FILEREAD 0x1
6 #define FILEWRITE 0x2
7 #define FILECLIENT 0x1
9 #define FILESERVER 0x2
10 #define FILESEEKSTART 0
12 #define FILESEEKCURRENT 1
13 #define FILESEEKEND 2
14 
15 #ifdef _WIN32
16 #include <basetsd.h>
17 typedef UINT_PTR SOCKET;
18 #else
19 typedef int SOCKET;
20 #endif // _WIN32
21 
22 //opaque pointer
23 struct FileImpl;
24 
47 class File
48 {
49 public:
50  File();
51  ~File();
53  bool Open(const char*, int openmode = FILEREAD | FILEWRITE);
55  bool Open(void*, int openmode = FILEREAD | FILEWRITE);
57  bool OpenData(void* buf, int size, int openmode = FILEREAD | FILEWRITE);
60  bool OpenData(int openmode = FILEREAD | FILEWRITE);
62  bool OpenTCPSocket(SOCKET sockfd);
64  bool OpenUDPSocket(SOCKET sockfd);
66  void Close();
67 
72  bool Seek(int amount, int from = FILESEEKCURRENT);
75  int Position() const;
78  int Length() const;
79 
80  bool ReadData(void*, int size);
81  bool WriteData(const void*, int size);
82 
84  bool ReadString(char*, int bufsize);
86  bool WriteString(const char*);
87 
89  bool IsOpen() const;
92  void ResizeDataBuffer(int size);
95  unsigned char* GetDataBuffer() const;
101  void* FileObjectPointer();
103  bool ReadAvailable(int numbytes=1) const;
106  bool WriteAvailable(int numbytes=1) const;
107 
108 private:
109  int mode; //file read/write mode
110  int srctype; //data source mode (file,data,etc)
111 
112  FileImpl* impl;
113 };
114 
135 template <class type>
136 bool ReadFile(File& f, type& t) { return t.Read(f); }
137 template <class type>
138 bool WriteFile(File& f, const type& t) { return t.Write(f); }
139 
140 template <class type>
141 bool ReadArrayFile(File& f, type* t, int n)
142 {
143  for(int i=0;i<n;i++)
144  if(!ReadFile(f,t[i])) return false;
145  return true;
146 }
147 
148 template <class type>
149 bool WriteArrayFile(File& f, const type* t, int n)
150 {
151  for(int i=0;i<n;i++)
152  if(!WriteFile(f,t[i])) return false;
153  return true;
154 }
155 
156 #define _DECLARE_READ_WRITE_FILE_BASIC(type) \
157  template <> bool ReadFile(File& f, type& t); \
158  template <> bool WriteFile(File& f, const type& t); \
159  template <> bool ReadArrayFile(File& f, type* t,int n); \
160  template <> bool WriteArrayFile(File& f, const type* t,int n);
161 
162 #define _DEFINE_READ_WRITE_FILE_BASIC(type) \
163  template <> bool ReadFile(File& f, type& t) \
164  { return f.ReadData(&t, sizeof(t)); } \
165  template <> bool WriteFile(File& f, const type& t) \
166  { return f.WriteData(&t, sizeof(t)); } \
167  template <> bool ReadArrayFile(File& f, type* t,int n) \
168  { return f.ReadData(t, sizeof(type)*n); } \
169  template <> bool WriteArrayFile(File& f, const type* t,int n) \
170  { return f.WriteData(t, sizeof(type)*n); }
171 
172 
173 _DECLARE_READ_WRITE_FILE_BASIC(bool);
174 _DECLARE_READ_WRITE_FILE_BASIC(char);
175 _DECLARE_READ_WRITE_FILE_BASIC(signed char);
176 _DECLARE_READ_WRITE_FILE_BASIC(unsigned char);
177 _DECLARE_READ_WRITE_FILE_BASIC(short);
178 _DECLARE_READ_WRITE_FILE_BASIC(unsigned short);
179 _DECLARE_READ_WRITE_FILE_BASIC(int);
180 _DECLARE_READ_WRITE_FILE_BASIC(unsigned int);
181 _DECLARE_READ_WRITE_FILE_BASIC(long);
182 _DECLARE_READ_WRITE_FILE_BASIC(unsigned long);
183 _DECLARE_READ_WRITE_FILE_BASIC(long long);
184 _DECLARE_READ_WRITE_FILE_BASIC(unsigned long long);
185 _DECLARE_READ_WRITE_FILE_BASIC(float);
186 _DECLARE_READ_WRITE_FILE_BASIC(double);
187 _DECLARE_READ_WRITE_FILE_BASIC(long double);
188 
189 #endif
bool Open(const char *, int openmode=FILEREAD|FILEWRITE)
Opens a named file on the hard drive with the given open mode.
Definition: File.cpp:297
unsigned char * GetDataBuffer() const
Definition: File.cpp:259
int Length() const
Definition: File.cpp:433
bool Seek(int amount, int from=FILESEEKCURRENT)
Definition: File.cpp:395
bool WriteFile(File &f, const std::vector< type > &v)
WriteFile() for STL vectors. See File.h.
Definition: ioutils.h:73
void Close()
Closes this File object.
Definition: File.cpp:187
bool ReadAvailable(int numbytes=1) const
Returns true if you can read up to numbytes bytes on the file object.
Definition: File.cpp:657
bool WriteAvailable(int numbytes=1) const
Definition: File.cpp:675
bool ReadFile(File &f, std::vector< type > &v)
ReadFile() for STL vectors. See File.h.
Definition: ioutils.h:61
#define FILEREAD
Flags sent to Open: read or write mode (may be bitwise or-ed together)
Definition: File.h:5
bool ReadString(char *, int bufsize)
Reads a null-terminated string of at most bufsize characters.
Definition: File.cpp:552
void * FileObjectPointer()
Definition: File.cpp:236
bool WriteString(const char *)
Writes a null-terminated string.
Definition: File.cpp:622
void ResizeDataBuffer(int size)
Definition: File.cpp:248
bool OpenData(void *buf, int size, int openmode=FILEREAD|FILEWRITE)
Connects this File object to a memory buffer.
Definition: File.cpp:202
Definition: File.cpp:32
bool OpenUDPSocket(SOCKET sockfd)
Connects this File object to a socket, using UDP transmission.
Definition: File.cpp:282
A cross-platform class for reading/writing binary data.
Definition: File.h:47
bool OpenTCPSocket(SOCKET sockfd)
Connects this File object to a socket, using TCP transmission.
Definition: File.cpp:267
int Position() const
Definition: File.cpp:377
bool IsOpen() const
Returns true if the file object is open.
Definition: File.cpp:645