本文整理汇总了C++中service_ptr_t::read_object方法的典型用法代码示例。如果您正苦于以下问题:C++ service_ptr_t::read_object方法的具体用法?C++ service_ptr_t::read_object怎么用?C++ service_ptr_t::read_object使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类service_ptr_t
的用法示例。
在下文中一共展示了service_ptr_t::read_object方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: exception_tag_not_found
static void load_id666(service_ptr_t<file> & p_file, LPID666TAG lpTag, abort_callback & p_abort)//must be seeked to correct spot before calling
{
t_uint8 szBuf[4];
p_file->read_object( &szBuf, 4, p_abort );
if( ! memcmp( szBuf, xid6_signature, 4 ) )
{
t_uint32 tag_size;
p_file->read_lendian_t( tag_size, p_abort );
t_filesize offset = p_file->get_position( p_abort );
service_ptr_t< reader_limited > m_file = new service_impl_t< reader_limited >;
m_file->init( p_file, offset, offset + tag_size, p_abort );
service_ptr_t<file> p_file = m_file.get_ptr();
try
{
parse_id666( p_file, lpTag, false, p_abort );
}
catch ( const exception_io_data & )
{
p_file->seek( 0, p_abort );
memset( lpTag, 0, sizeof( *lpTag ) );
parse_id666( p_file, lpTag, true, p_abort );
}
}
else throw exception_tag_not_found();
}
示例2: load_feature_list_from_json_file
bool load_feature_list_from_json_file(pfc::list_base_t<feature_handle_ptr> &p_list, const service_ptr_t<file> &p_file, abort_callback &p_abort)
{
t_filesize size = p_file->get_size(p_abort);
pfc::string8 json;
{
pfc::string_buffer buffer(json, size);
p_file->read_object(buffer, size, p_abort);
}
return load_feature_list_from_json_string(p_list, json);
}
示例3: open
void open( service_ptr_t<file> m_file, const char * p_path, t_input_open_reason p_reason, abort_callback & p_abort )
{
if ( p_reason == input_open_info_write ) throw exception_io_data();
input_open_file_helper( m_file, p_path, p_reason, p_abort );
m_stats = m_file->get_stats( p_abort );
t_uint8 * ptr;
unsigned size;
t_filesize size64 = m_file->get_size_ex( p_abort );
if ( size64 > ( 1 << 24 ) )
throw exception_io_data();
size = (unsigned) size64;
file_buffer.set_size( size );
ptr = file_buffer.get_ptr();
m_file->read_object( ptr, size, p_abort );
m_player = ModPlug_Load(ptr, size);
if ( !m_player ) throw exception_io_data();
}
示例4: if
static void parse_id666( service_ptr_t< file > & p_file, LPID666TAG lpTag, bool aligned, abort_callback & p_abort )
{
while ( ! p_file->is_eof( p_abort ) )
{
t_uint8 id, type;
t_uint16 data;
p_file->read_object_t( id, p_abort );
p_file->read_object_t( type, p_abort );
p_file->read_lendian_t( data, p_abort );
switch ( type )
{
case XTYPE_STR:
{
if ( data < 1 || data > 256 ) throw exception_io_data();
switch ( id )
{
case XID_SONG:
p_file->read_object( lpTag->szTitle, data, p_abort );
break;
case XID_GAME:
p_file->read_object( lpTag->szGame, data, p_abort );
break;
case XID_ARTIST:
p_file->read_object( lpTag->szArtist, data, p_abort );
break;
case XID_PUB:
p_file->read_object( lpTag->szPublisher, data, p_abort );
break;
case XID_OST:
p_file->read_object( lpTag->szOST, data, p_abort );
break;
case XID_DUMPER:
p_file->read_object( lpTag->szDumper, data, p_abort );
break;
case XID_CMNTS:
p_file->read_object( lpTag->szComment, data, p_abort );
break;
default:
p_file->skip( data, p_abort );
break;
}
if ( aligned && ( data & 3 ) ) p_file->skip( 4 - ( data & 3 ), p_abort );
}
break;
case XTYPE_INT:
{
if ( data != 4 ) throw exception_io_data();
t_uint32 value;
p_file->read_lendian_t( value, p_abort );
switch ( id )
{
case XID_DATE:
SetDate( lpTag->szDate, ( value >> 16 ) & 255, ( value >> 8 ) & 255, value & 255 );
break;
case XID_INTRO:
if ( value > 383999999 ) value = 383999999;
lpTag->uSong_ms = value / 64;
break;
case XID_LOOP:
if ( value > 383999999 ) value = 383999999;
lpTag->uLoop_ms = value / 64;
break;
case XID_END:
if ( value > 383999999 ) value = 383999999;
lpTag->uEnd_ms = value / 64;
break;
case XID_FADE:
if ( value > 3839999 ) value = 3839999;
lpTag->uFade_ms = value / 64;
break;
case XID_AMP:
if ( value < 32768 ) value = 32768;
else if ( value > 524288 ) value = 524288;
lpTag->uAmplification = value;
break;
}
}
break;
case XTYPE_DATA:
{
//.........这里部分代码省略.........
示例5: 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;
}
}