00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef OR_TOOLS_BASE_FILE_H_
00015 #define OR_TOOLS_BASE_FILE_H_
00016
00017 #include <cstdlib>
00018 #include <cstdio>
00019 #include <string>
00020
00021 #include "base/integral_types.h"
00022
00023
00024
00025 namespace operations_research {
00026 class File {
00027 public:
00028
00029
00030 static File* Open(const char* const name, const char* const flag);
00031
00032 #ifndef SWIG // no overloading
00033 inline static File* Open(const std::string& name, const char* const mode) {
00034 return Open(name.c_str(), mode);
00035 }
00036 #endif
00037
00038
00039
00040 static File* OpenOrDie(const char* const name, const char* const flag);
00041
00042
00043 size_t Read(void* const buff, size_t size);
00044
00045
00046
00047 void ReadOrDie(void* const buff, size_t size);
00048
00049
00050
00051 char* ReadLine(char* const output, uint64 max_length);
00052
00053
00054
00055 int64 ReadToString(std::string* const line, uint64 max_length);
00056
00057
00058 size_t Write(const void* const buff, size_t size);
00059
00060
00061
00062 void WriteOrDie(const void* const buff, size_t size);
00063
00064
00065 size_t WriteString(const std::string& line);
00066
00067
00068 bool WriteLine(const std::string& line);
00069
00070
00071 bool Close();
00072
00073
00074 bool Flush();
00075
00076
00077 size_t Size();
00078
00079
00080 static void Init();
00081
00082
00083 std::string CreateFileName() const;
00084
00085
00086 static bool Delete(char* const name);
00087
00088
00089 static bool Exists(char* const name);
00090
00091 bool Open() const;
00092
00093 private:
00094 File(FILE* const descriptor, const std::string& name);
00095
00096 FILE* f_;
00097 const std::string name_;
00098 };
00099 }
00100
00101 #endif // OR_TOOLS_BASE_FILE_H_