本文整理汇总了C++中ArrayPtr::reset方法的典型用法代码示例。如果您正苦于以下问题:C++ ArrayPtr::reset方法的具体用法?C++ ArrayPtr::reset怎么用?C++ ArrayPtr::reset使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ArrayPtr
的用法示例。
在下文中一共展示了ArrayPtr::reset方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: fopen
//-----------------------------------------------------------------
void
IniFile::load(const std::string filename)
{
_sections.clear();
if (filename.empty()) {
return;
}
FILE* file = fopen(filename.c_str(), "rb");
if (!file) {
return;
}
static ArrayPtr<char> s_Buffer;
static int s_BufferSize = 0;
if (s_BufferSize == 0) { // one-time initialization
try {
s_Buffer.reset(new char[1024]);
s_BufferSize = 1024;
} catch (const std::bad_alloc&) {
return;
}
}
int num_keys_read = 0;
std::string section;
std::string key;
std::string value;
char* ptr;
int avail;
int state = 'A';
int input;
int chr;
fetch:
// fill buffer with data from the stream
int num_fetched = fread(s_Buffer.get(), 1, s_BufferSize, file);
if (num_fetched == 0) {
goto finish;
} else {
avail = num_fetched;
ptr = s_Buffer.get();
}
parse:
// parse the data in the buffer
chr = *ptr;
if (chr == '\n' || chr == '\r') {
input = 'n';
} else if (chr == '[') {
input = 'l';
} else if (chr == ']') {
input = 'r';
} else if (chr == '=') {
input = 'z';
} else if (chr == ' ') {
input = 's';
} else if (chr > 31 && chr < 127) {
input = 'g';
} else {
input = 'u';
}
switch (state) {
case 'A':
switch (input) {
case 'n':
case 's':
break;
case 'l':
state = 'B';
break;
case 'r':
case 'z':
case 'g':
case 'u':
state = 'C';
break;
}
break;
case 'B':
switch (input) {
case 'n':
state = 'A';
break;
case 'g':
state = 'D';
section = chr;
break;
case 's':
break;
case 'l':
case 'r':
case 'z':
case 'u':
state = 'C';
break;
}
//.........这里部分代码省略.........