📄 file.h.svn-base
字号:
// $Id$/* ---------------------------------------------------------------- *//* Copyright 2005 (c) by RWTH Aachen - Lehrstuhl fuer Informatik VI *//* Richard Zens *//* ---------------------------------------------------------------- */#ifndef FILE_H_#define FILE_H_#include <cstdio>#include <iostream>#include <vector>#include <cassert>#include "UserMessage.h"#include "TypeDef.h"#include "Util.h"#ifdef WIN32#define OFF_T __int64 #define FTELLO(file) _ftelli64(file)#define FSEEKO(file, offset, origin) _fseeki64(file, offset, origin)#else#define OFF_T off_t #define FTELLO(f) ftello(f)#define FSEEKO(file, offset, origin) fseeko(file, offset, origin)#endifstatic const OFF_T InvalidOffT=-1;// WARNING:// these functions work only for bitwise read/write-able typestemplate<typename T> inline size_t fWrite(FILE* f,const T& t) { if(fwrite(&t,sizeof(t),1,f)!=1) { TRACE_ERR("ERROR:: fwrite!\n");abort();} return sizeof(t);}template<typename T> inline void fRead(FILE* f,T& t) { if(fread(&t,sizeof(t),1,f)!=1) {TRACE_ERR("ERROR: fread!\n");abort();}}template<typename T> inline size_t fWrite(FILE* f,const T* b,const T* e) { UINT32 s=std::distance(b,e);size_t rv=fWrite(f,s); if(fwrite(b,sizeof(T),s,f)!=s) {TRACE_ERR("ERROR: fwrite!\n");abort();} return rv+sizeof(T)*s;}template<typename T> inline size_t fWrite(FILE* f,const T b,const T e) { UINT32 s=std::distance(b,e);size_t rv=fWrite(f,s); if(fwrite(&(*b),sizeof(T),s,f)!=s) {TRACE_ERR("ERROR: fwrite!\n");abort();} return rv+sizeof(T)*s;}template<typename C> inline size_t fWriteVector(FILE* f,const C& v) { UINT32 s=v.size(); size_t rv=fWrite(f,s); if(fwrite(&v[0],sizeof(typename C::value_type),s,f)!=s) {TRACE_ERR("ERROR: fwrite!\n");abort();} return rv+sizeof(typename C::value_type)*s;}template<typename C> inline void fReadVector(FILE* f, C& v) { UINT32 s;fRead(f,s);v.resize(s); size_t r=fread(&(*v.begin()),sizeof(typename C::value_type),s,f); if(r!=s) { TRACE_ERR("ERROR: freadVec! "<<r<<" "<<s<<"\n");abort();}}inline OFF_T fTell(FILE* f) {return FTELLO(f);}inline void fSeek(FILE* f,OFF_T o) { if(FSEEKO(f,o,SEEK_SET)<0) { TRACE_ERR("ERROR: could not fseeko position "<<o<<"\n"); if(o==InvalidOffT) TRACE_ERR("You tried to seek for 'InvalidOffT'!\n"); abort(); }}inline FILE* fOpen(const char* fn,const char* m) { if(FILE* f=fopen(fn,m)) return f; else { assert(false); UserMessage::Add(std::string("ERROR: could not open file ") + fn + " with mode " + m + "\n"); return NULL; }}inline void fClose(FILE* f) {fclose(f);} // for consistent function names only#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -