39 if(
const auto fp = std::fopen(
path,
"rb"))
53 switch(
unsigned((mode &= ~ios_base::ate) & ~ios_base::binary))
56 case ios_base::out | ios_base::trunc:
57 return mode & ios_base::binary ?
"wb" :
"w";
58 case ios_base::out | ios_base::app:
60 return mode & ios_base::binary ?
"ab" :
"a";
62 return mode & ios_base::binary ?
"rb" :
"r";
63 case ios_base::in | ios_base::out:
64 return mode & ios_base::binary ?
"r+b" :
"r+";
65 case ios_base::in | ios_base::out | ios_base::trunc:
66 return mode & ios_base::binary ?
"w+b" :
"w+";
67 case ios_base::in | ios_base::out | ios_base::app:
68 case ios_base::in | ios_base::app:
69 return mode & ios_base::binary ?
"a+b" :
"a+";
75 std::ios_base::openmode
82 ios_base::openmode mode;
87 mode = ios_base::out | ios_base::trunc;
100 auto l(char_traits<char>::length(str));
102 if(str[
l - 1] ==
'x')
104 if(mode & ios_base::out)
105 mode &= ~ios_base::out;
111 bool b(str[1] ==
'b'), p(str[1] ==
'+');
120 yunseq(b = b != (str[2] ==
'b'), p = p != (str[2] ==
'+'));
127 mode |= *str ==
'r' ? ios::out : ios::in;
134 return ios_base::openmode();
143 const auto val(std::fgetc(
stream));
std::FILE ConversionState fp
ifile_iterator & operator++()
const char * openmode_conv(std::ios_base::openmode)
#define YB_UNLIKELY(expr)
分支预测提示。
#define yunseq
无序列依赖表达式组求值。
#define ynothrow
YSLib 无异常抛出保证:若支持 noexcept 关键字, 指定特定的 noexcept 异常规范。
#define yconstraint
约束:接口语义。
bool fexists(const char *)
判断指定路径的文件是否存在。