本文整理汇总了C++中Scanner::set_istream方法的典型用法代码示例。如果您正苦于以下问题:C++ Scanner::set_istream方法的具体用法?C++ Scanner::set_istream怎么用?C++ Scanner::set_istream使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Scanner
的用法示例。
在下文中一共展示了Scanner::set_istream方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: object_streams
void Parser::object_streams(RootNode *root_node)
{
int size = root_node->size();
int i;
for (i = 0; i < size; i++) {
ObjNode *root_object = dynamic_cast<ObjNode *> (root_node->get(i));
if (root_object) {
MapNode *map = dynamic_cast<MapNode *> (root_object->value());
if (map) {
NameNode *type = dynamic_cast<NameNode *> (map->get("/Type"));
if (type && type->name() == "/ObjStm") {
int qtd = 0;
int length = 0;
NumberNode *number = dynamic_cast<NumberNode *> (map->get("/N"));
if (number) {
qtd = number->value();
}
NumberNode *length_node = dynamic_cast<NumberNode *> (map->get("/Length"));
if (number) {
length = length_node->value();
}
char *uncompressed = NULL;
m_scanner->to_pos(root_object->stream_pos());
char *stream = (char *)m_scanner->get_stream(length);
int total = length;
NameNode *filter = dynamic_cast<NameNode *> (map->get("/Filter"));
if (filter && filter->name() == "/FlateDecode") {
uncompressed = flat_decode(stream, length, total);
delete [] stream;
} else if (!filter) {
uncompressed = stream;
} else {
error_message(string("compression not supported: ") + filter->name());
return;
}
stringstream stream_value;
stream_value.write(uncompressed, total);
stream_value.seekg(0);
delete [] uncompressed;
Scanner scanner;
Scanner *temp = m_scanner;
m_scanner = &scanner;
scanner.set_istream(&stream_value);
vector<int> ids;
int loop;
for (loop = 0; loop < qtd; loop++) {
next_token();
ids.push_back(m_token->to_number());
next_token();
}
next_token();
vector<int>::iterator id;
for (id = ids.begin(); id < ids.end(); id++) {
ObjNode *new_obj = new ObjNode(*id, 0);
new_obj->set_value(value_sequence());
root_node->add_child(new_obj);
}
m_scanner = temp;
}
}
}
}
}