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  File(const File&) = delete;
54  const File& operator = (const File&) = delete;
56  bool Open(const char*, int openmode = FILEREAD | FILEWRITE);
58  bool Open(void*, int openmode = FILEREAD | FILEWRITE);
60  bool OpenData(void* buf, int size, int openmode = FILEREAD | FILEWRITE);
63  bool OpenData(int openmode = FILEREAD | FILEWRITE);
65  bool OpenTCPSocket(SOCKET sockfd);
67  bool OpenUDPSocket(SOCKET sockfd);
69  void Close();
70 
75  bool Seek(int amount, int from = FILESEEKCURRENT);
78  int Position() const;
81  int Length() const;
82 
83  bool ReadData(void*, int size);
84  bool WriteData(const void*, int size);
85 
87  bool ReadString(char*, int bufsize);
89  bool WriteString(const char*);
90 
92  bool IsOpen() const;
95  void ResizeDataBuffer(int size);
98  unsigned char* GetDataBuffer() const;
104  void* FileObjectPointer();
106  bool ReadAvailable(int numbytes=1) const;
109  bool WriteAvailable(int numbytes=1) const;
110 
111 private:
112  int mode; //file read/write mode
113  int srctype; //data source mode (file,data,etc)
114 
115  FileImpl* impl;
116 };
117 
138 template <class type>
139 bool ReadFile(File& f, type& t) { return t.Read(f); }
140 template <class type>
141 bool WriteFile(File& f, const type& t) { return t.Write(f); }
142 
143 template <class type>
144 bool ReadArrayFile(File& f, type* t, int n)
145 {
146  for(int i=0;i<n;i++)
147  if(!ReadFile(f,t[i])) return false;
148  return true;
149 }
150 
151 template <class type>
152 bool WriteArrayFile(File& f, const type* t, int n)
153 {
154  for(int i=0;i<n;i++)
155  if(!WriteFile(f,t[i])) return false;
156  return true;
157 }
158 
159 #define _DECLARE_READ_WRITE_FILE_BASIC(type) \
160  template <> bool ReadFile(File& f, type& t); \
161  template <> bool WriteFile(File& f, const type& t); \
162  template <> bool ReadArrayFile(File& f, type* t,int n); \
163  template <> bool WriteArrayFile(File& f, const type* t,int n);
164 
165 #define _DEFINE_READ_WRITE_FILE_BASIC(type) \
166  template <> bool ReadFile(File& f, type& t) \
167  { return f.ReadData(&t, sizeof(t)); } \
168  template <> bool WriteFile(File& f, const type& t) \
169  { return f.WriteData(&t, sizeof(t)); } \
170  template <> bool ReadArrayFile(File& f, type* t,int n) \
171  { return f.ReadData(t, sizeof(type)*n); } \
172  template <> bool WriteArrayFile(File& f, const type* t,int n) \
173  { return f.WriteData(t, sizeof(type)*n); }
174 
175 
176 _DECLARE_READ_WRITE_FILE_BASIC(bool);
177 _DECLARE_READ_WRITE_FILE_BASIC(char);
178 _DECLARE_READ_WRITE_FILE_BASIC(signed char);
179 _DECLARE_READ_WRITE_FILE_BASIC(unsigned char);
180 _DECLARE_READ_WRITE_FILE_BASIC(short);
181 _DECLARE_READ_WRITE_FILE_BASIC(unsigned short);
182 _DECLARE_READ_WRITE_FILE_BASIC(int);
183 _DECLARE_READ_WRITE_FILE_BASIC(unsigned int);
184 _DECLARE_READ_WRITE_FILE_BASIC(long);
185 _DECLARE_READ_WRITE_FILE_BASIC(unsigned long);
186 _DECLARE_READ_WRITE_FILE_BASIC(long long);
187 _DECLARE_READ_WRITE_FILE_BASIC(unsigned long long);
188 _DECLARE_READ_WRITE_FILE_BASIC(float);
189 _DECLARE_READ_WRITE_FILE_BASIC(double);
190 _DECLARE_READ_WRITE_FILE_BASIC(long double);
191 
192 #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:81
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:69
#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