本文整理汇总了C++中service_ptr_t::reopen方法的典型用法代码示例。如果您正苦于以下问题:C++ service_ptr_t::reopen方法的具体用法?C++ service_ptr_t::reopen怎么用?C++ service_ptr_t::reopen使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类service_ptr_t
的用法示例。
在下文中一共展示了service_ptr_t::reopen方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: g_open
void unpacker::g_open(service_ptr_t<file> & p_out,const service_ptr_t<file> & p,abort_callback & p_abort)
{
service_enum_t<unpacker> e;
service_ptr_t<unpacker> ptr;
if (e.first(ptr)) do {
p->reopen(p_abort);
try {
ptr->open(p_out,p,p_abort);
return;
} catch(exception_io_data const &) {}
} while(e.next(ptr));
throw exception_io_data();
}
示例2: input_open_file_helper
void input_open_file_helper(service_ptr_t<file> & p_file,const char * p_path,t_input_open_reason p_reason,abort_callback & p_abort)
{
if (p_file.is_empty()) {
switch(p_reason) {
default:
uBugCheck();
case input_open_info_read:
case input_open_decode:
filesystem::g_open(p_file,p_path,filesystem::open_mode_read,p_abort);
break;
case input_open_info_write:
filesystem::g_open(p_file,p_path,filesystem::open_mode_write_existing,p_abort);
break;
}
} else {
p_file->reopen(p_abort);
}
}
示例3: process_path_internal
static void process_path_internal(const char * p_path,const service_ptr_t<file> & p_reader,playlist_loader_callback_v2 & p_callback,playlist_loader_callback::t_entry_type p_type,const t_filestats & p_stats)
{
//p_path must be canonical
p_callback.check();
p_callback.on_progress(p_path);
{
if (p_reader.is_empty()) {
directory_callback_impl directory_results(true);
try {
filesystem::g_list_directory(p_path,directory_results,p_callback);
for(t_size n=0;n<directory_results.get_count();n++) {
process_path_internal(directory_results.get_item(n),0,p_callback,playlist_loader_callback::entry_directory_enumerated,directory_results.get_item_stats(n));
}
return;
} catch(exception_aborted) {throw;}
catch(...) {
//do nothing, fall thru
//fixme - catch only filesystem exceptions?
}
}
bool found = false;
{
archive_callback_impl archive_results(p_callback);
service_enum_t<filesystem> e;
service_ptr_t<filesystem> f;
while(e.next(f)) {
p_callback.check();
service_ptr_t<archive> arch;
if (f->service_query_t(arch)) {
if (p_reader.is_valid()) p_reader->reopen(p_callback);
try {
TRACK_CODE("archive::archive_list",arch->archive_list(p_path,p_reader,archive_results,true));
return;
} catch(exception_aborted) {throw;}
catch(...) {}
}
}
}
}
{
service_ptr_t<link_resolver> ptr;
if (link_resolver::g_find(ptr,p_path))
{
if (p_reader.is_valid()) p_reader->reopen(p_callback);
pfc::string8 temp;
try {
TRACK_CODE("link_resolver::resolve",ptr->resolve(p_reader,p_path,temp,p_callback));
track_indexer__g_get_tracks_wrap(temp,0,filestats_invalid,playlist_loader_callback::entry_from_playlist,p_callback);
return;//success
} catch(exception_aborted) {throw;}
catch(...) {}
}
}
if (p_callback.is_path_wanted(p_path,p_type)) {
track_indexer__g_get_tracks_wrap(p_path,p_reader,p_stats,p_type,p_callback);
}
}
示例4: if
void read_v2(const service_ptr_t<file> & p_file,abort_callback & p_abort,pfc::string_base & p_out,bool & is_utf8, bool forceUTF8) {
p_out.reset();
p_file->reopen( p_abort );
pfc::array_t<char> mem;
t_filesize size64;
size64 = p_file->get_size(p_abort);
if (size64 == filesize_invalid)//typically HTTP
{
pfc::string8 ansitemp;
t_size done;
enum { delta = 1024 * 64, max = 1024 * 512 };
if ( forceUTF8 ) {
is_utf8 = true;
} else {
is_utf8 = false;
char temp[3];
done = p_file->read(temp, 3, p_abort);
if (done != 3)
{
if (done > 0) p_out = pfc::stringcvt::string_utf8_from_ansi(temp, done);
return;
}
if (!memcmp(utf8_header, temp, 3)) is_utf8 = true;
else ansitemp.add_string(temp, 3);
}
mem.set_size(delta);
for(;;)
{
done = p_file->read(mem.get_ptr(),delta,p_abort);
if (done > 0)
{
if (is_utf8) p_out.add_string(mem.get_ptr(),done);
else ansitemp.add_string(mem.get_ptr(),done);
}
if (done < delta) break;
}
if (!is_utf8)
{
p_out = pfc::stringcvt::string_utf8_from_ansi(ansitemp);
}
return;
}
else
{
if (size64>1024*1024*128) throw exception_io_data();//hard limit
t_size size = pfc::downcast_guarded<t_size>(size64);
mem.set_size(size+1);
char * asdf = mem.get_ptr();
p_file->read_object(asdf,size,p_abort);
asdf[size]=0;
if ( forceUTF8 ) {
is_utf8 = true;
p_out = asdf;
} else if (size>3 && !memcmp(utf8_header,asdf,3)) {
is_utf8 = true;
p_out.add_string(asdf+3);
} else {
is_utf8 = false;
p_out = pfc::stringcvt::string_utf8_from_ansi(asdf);
}
return;
}
}