- Tree cleanups proposed on the mailing list. Move all non-Core OS modules to rosapps...
[reactos.git] / rosapps / sysutils / utils / sdkparse / File.h
1 // File.h
2 // This file is (C) 2002-2003 Royce Mitchell III and released under the BSD license
3
4 #ifndef FILE_H
5 #define FILE_H
6
7 #ifdef WIN32
8 # include <io.h>
9 #elif defined(UNIX)
10 # include <sys/stat.h>
11 # include <unistd.h>
12 #endif
13 #include <string>
14
15 class File
16 {
17 public:
18 File() : _f(0)
19 {
20 }
21
22 File ( const char* filename, const char* mode ) : _f(0)
23 {
24 open ( filename, mode );
25 }
26
27 ~File()
28 {
29 close();
30 }
31
32 bool open ( const char* filename, const char* mode );
33
34 bool seek ( long offset )
35 {
36 return !fseek ( _f, offset, SEEK_SET );
37 }
38
39 int get()
40 {
41 return fgetc ( _f );
42 }
43
44 bool put ( int c )
45 {
46 return fputc ( c, _f ) != EOF;
47 }
48
49 std::string getline ( bool strip_crlf = false );
50
51 // this function searches for the next end-of-line and puts all data it
52 // finds until then in the 'line' parameter.
53 //
54 // call continuously until the function returns false ( no more data )
55 bool next_line ( std::string& line, bool strip_crlf );
56
57 /*
58 example usage:
59
60 bool mycallback ( const std::string& line, int line_number, long lparam )
61 {
62 std::cout << line << std::endl;
63 return true; // continue enumeration
64 }
65
66 File f ( "file.txt", "rb" ); // open file for binary read-only ( i.e. "rb" )
67 f.enum_lines ( mycallback, 0, true );
68 */
69
70 bool enum_lines ( bool (*callback)(const std::string& line, int line_number, long lparam), long lparam, bool strip_crlf );
71
72 bool read ( void* data, unsigned len )
73 {
74 return len == fread ( data, 1, len, _f );
75 }
76
77 bool write ( const void* data, unsigned len )
78 {
79 return len == fwrite ( data, 1, len, _f );
80 }
81
82 size_t length();
83
84 void close();
85
86 bool isopened()
87 {
88 return _f != 0;
89 }
90
91 bool eof()
92 {
93 return feof(_f) ? true : false;
94 }
95
96 FILE* operator * ()
97 {
98 return _f;
99 }
100
101 static bool LoadIntoString ( std::string& s, const char* filename );
102 static bool SaveFromString ( const char* filename, const std::string& s, bool binary );
103
104 private:
105 File(const File&) {}
106 const File& operator = ( const File& ) { return *this; }
107
108 FILE * _f;
109 };
110
111 #endif//FILE_H