亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? riff.cpp

?? hl2 source code. Do not use it illegal.
?? CPP
字號(hào):
// Avoid these warnings:
#pragma warning(disable : 4512) // warning C4512: 'InFileRIFF' : assignment operator could not be generated
#pragma warning(disable : 4514) // warning C4514: 'RIFFName' : unreferenced inline function has been removed

#include "riff.h"
#include <stdio.h>
#include <string.h>
#include "tier0/dbg.h"

#define RIFF_ID MAKEID('R','I','F','F')

//-----------------------------------------------------------------------------
// Purpose: Opens a RIFF file using the given I/O mechanism
// Input  : *pFileName 
//			&io - I/O interface
//-----------------------------------------------------------------------------
InFileRIFF::InFileRIFF( const char *pFileName, IFileReadBinary &io ) : m_io(io)
{
	m_file = m_io.open( pFileName );
	
	int riff = 0;
	if ( !m_file )
	{
		m_riffSize = 0;
		m_riffName = 0;
		return;
	}
	m_io.read( &riff, 4, m_file );
	if ( riff != RIFF_ID )
	{
		printf("Not a RIFF File\n" );
		m_riffSize = 0;
	}
	else
	{
		// we store size as size of all chunks
		// subtract off the RIFF form type (e.g. 'WAVE', 4 bytes)
		m_riffSize = ReadInt() - 4;
		m_riffName = ReadInt();

		// HACKHACK: LWV files don't obey the RIFF format!!!
		// Do this or miss the linguistic chunks at the end. Lame!
		// subtract off 12 bytes for (RIFF, size, WAVE)
		if ( m_io.size( m_file ) - 12 != m_riffSize )
		{
			m_riffSize = m_io.size( m_file ) - 12;
		}
	}
}


//-----------------------------------------------------------------------------
// Purpose: Close the file
//-----------------------------------------------------------------------------
InFileRIFF::~InFileRIFF( void )
{
	m_io.close( m_file );
}


//-----------------------------------------------------------------------------
// Purpose: read a 4-byte int out of the stream
// Output : int = read value, default is zero
//-----------------------------------------------------------------------------
int InFileRIFF::ReadInt( void )
{
	int tmp = 0;
	m_io.read( &tmp, sizeof(int), m_file );

	return tmp;
}

//-----------------------------------------------------------------------------
// Purpose: Read a block of binary data
// Input  : *pOutput - pointer to destination memory
//			dataSize - size of block to read
// Output : int - number of bytes read
//-----------------------------------------------------------------------------
int InFileRIFF::ReadData( void *pOutput, int dataSize )
{
	int count = m_io.read( pOutput, dataSize, m_file );

	return count;
}


//-----------------------------------------------------------------------------
// Purpose: Gets the file position
// Output : int (bytes from start of file)
//-----------------------------------------------------------------------------
int InFileRIFF::PositionGet( void )
{
	return m_io.tell( m_file );
}


//-----------------------------------------------------------------------------
// Purpose: Seek to file position
// Input  : position - bytes from start of file
//-----------------------------------------------------------------------------
void InFileRIFF::PositionSet( int position )
{
	m_io.seek( m_file, position );
}

//-----------------------------------------------------------------------------
// Purpose: Used to write a RIFF format file
//-----------------------------------------------------------------------------
OutFileRIFF::OutFileRIFF( const char *pFileName, IFileWriteBinary &io ) : m_io( io )
{
	m_file = m_io.create( pFileName );

	if ( !m_file )
		return;

	int riff = RIFF_ID;
	m_io.write( &riff, 4, m_file );

	m_riffSize = 0;
	m_nNamePos = m_io.tell( m_file );

	// Save room for the size and name now
	WriteInt( 0 );

	// Write out the name
	WriteInt( RIFF_WAVE );

	m_bUseIncorrectLISETLength = false;
	m_nLISETSize = 0;
}

OutFileRIFF::~OutFileRIFF( void )
{
	if ( !IsValid() )
		return;

	unsigned int size = m_io.tell( m_file ) -8;
	m_io.seek( m_file, m_nNamePos );

	if ( m_bUseIncorrectLISETLength )
	{
		size = m_nLISETSize - 8;
	}

	WriteInt( size );
	m_io.close( m_file );
}

void OutFileRIFF::HasLISETData( int position )
{
	m_bUseIncorrectLISETLength = true;
	m_nLISETSize = position;
}

bool OutFileRIFF::WriteInt( int number )
{
	if ( !IsValid() )
		return false;

	m_io.write( &number, sizeof( int ), m_file );
	return true;
}

bool OutFileRIFF::WriteData( void *pOutput, int dataSize )
{
	if ( !IsValid() )
		return false;

	m_io.write( pOutput, dataSize, m_file );
	return true;
}

int OutFileRIFF::PositionGet( void )
{
	if ( !IsValid() )
		return 0;

	return m_io.tell( m_file );
}

void OutFileRIFF::PositionSet( int position )
{
	if ( !IsValid() )
		return;

	m_io.seek( m_file, position );
}

//-----------------------------------------------------------------------------
// Purpose: Create an iterator for the given file
// Input  : &riff - riff file
//			size - size of file or sub-chunk
//-----------------------------------------------------------------------------
IterateRIFF::IterateRIFF( InFileRIFF &riff, int size )
	: m_riff(riff), m_size(size)
{
	if ( !m_riff.RIFFSize() )
	{
		// bad file, just be an empty iterator
		ChunkClear();
		return;
	}

	// get the position and parse a chunk
	m_start = riff.PositionGet();
	ChunkSetup();
}


//-----------------------------------------------------------------------------
// Purpose: Set up a sub-chunk iterator
// Input  : &parent - parent iterator
//-----------------------------------------------------------------------------
IterateRIFF::IterateRIFF( IterateRIFF &parent )
	: m_riff(parent.m_riff), m_size(parent.ChunkSize())
{
	m_start = parent.ChunkFilePosition();
	ChunkSetup();
}

//-----------------------------------------------------------------------------
// Purpose: Parse the chunk at the current file position 
//			This object will iterate over the sub-chunks of this chunk.
//			This makes for easy hierarchical parsing
//-----------------------------------------------------------------------------
void IterateRIFF::ChunkSetup( void )
{
	m_chunkPosition = m_riff.PositionGet();

	m_chunkName = m_riff.ReadInt();
	m_chunkSize = m_riff.ReadInt();
}

//-----------------------------------------------------------------------------
// Purpose: clear chunk setup, ChunkAvailable will return false
//-----------------------------------------------------------------------------
void IterateRIFF::ChunkClear( void )
{
	m_chunkSize = -1;
}

//-----------------------------------------------------------------------------
// Purpose: If there are chunks left to read beyond this one, return true
//-----------------------------------------------------------------------------
bool IterateRIFF::ChunkAvailable( void )
{
	if ( m_chunkName == 0 )
		return false;

	if ( m_chunkSize != -1 )
		return true;

	return false;
}


//-----------------------------------------------------------------------------
// Purpose: Go to the next chunk in the file, return true if there is one.
//-----------------------------------------------------------------------------
bool IterateRIFF::ChunkNext( void )
{
	if ( !ChunkAvailable() )
		return false;

	int nextPos = m_chunkPosition + 8 + m_chunkSize;
	
	// chunks are aligned
	nextPos += m_chunkSize & 1;

	if ( nextPos >= (m_start + m_size) )
	{
		ChunkClear();
		return false;
	}

	m_riff.PositionSet( nextPos );

	ChunkSetup();
	if ( nextPos + m_chunkSize > m_start + m_size )
	{
		m_chunkSize = m_start + m_size - nextPos;
	}
	return ChunkAvailable();

}


//-----------------------------------------------------------------------------
// Purpose: get the chunk FOURCC as an int
// Output : unsigned int
//-----------------------------------------------------------------------------
unsigned int IterateRIFF::ChunkName( void )
{
	return m_chunkName;
}


//-----------------------------------------------------------------------------
// Purpose: get the size of this chunk
// Output : unsigned int
//-----------------------------------------------------------------------------
unsigned int IterateRIFF::ChunkSize( void )
{
	return m_chunkSize;
}

//-----------------------------------------------------------------------------
// Purpose: Read the entire chunk into a buffer
// Input  : *pOutput - dest buffer
// Output : int bytes read
//-----------------------------------------------------------------------------
int IterateRIFF::ChunkRead( void *pOutput )
{
	return m_riff.ReadData( pOutput, ChunkSize() );
}


//-----------------------------------------------------------------------------
// Purpose: Read a partial chunk (updates file position for subsequent partial reads).
// Input  : *pOutput - dest buffer
//			dataSize - partial size
// Output : int - bytes read
//-----------------------------------------------------------------------------
int IterateRIFF::ChunkReadPartial( void *pOutput, int dataSize )
{
	return m_riff.ReadData( pOutput, dataSize );
}


//-----------------------------------------------------------------------------
// Purpose: Read a 4-byte int
// Output : int - read int
//-----------------------------------------------------------------------------
int IterateRIFF::ChunkReadInt( void )
{
	return m_riff.ReadInt();
}

//-----------------------------------------------------------------------------
// Purpose: 
// Input  : position - 
//-----------------------------------------------------------------------------
void IterateRIFF::ChunkRewind( int position )
{
	unsigned int pos = m_riff.PositionGet();

	pos -= position;

	m_riff.PositionSet( pos );
}


//-----------------------------------------------------------------------------
// Purpose: Used to iterate over an InFileRIFF
//-----------------------------------------------------------------------------
IterateOutputRIFF::IterateOutputRIFF( OutFileRIFF &riff )
: m_riff( riff )
{
	if ( !m_riff.IsValid() )
		return;

	m_start = m_riff.PositionGet();
	m_chunkPosition = m_start;
	m_chunkStart = -1;
}

IterateOutputRIFF::IterateOutputRIFF( IterateOutputRIFF &parent )
	: m_riff(parent.m_riff)
{
	m_start = parent.ChunkFilePosition();
	m_chunkPosition = m_start;
	m_chunkStart = -1;
}

void IterateOutputRIFF::ChunkWrite( unsigned int chunkname, void *pOutput, int size )
{
	m_chunkPosition = m_riff.PositionGet();

	m_chunkName = chunkname;
	m_chunkSize = size;

	m_riff.WriteInt( chunkname );
	m_riff.WriteInt( size );
	m_riff.WriteData( pOutput, size );

	m_chunkPosition = m_riff.PositionGet();
	
	m_chunkPosition += m_chunkPosition & 1;

	m_riff.PositionSet( m_chunkPosition );

	m_chunkStart = -1;
}

void IterateOutputRIFF::ChunkWriteInt( int number )
{
	m_riff.WriteInt( number );
}

void IterateOutputRIFF::ChunkWriteData( void *pOutput, int size )
{
	m_riff.WriteData( pOutput, size );
}

void IterateOutputRIFF::ChunkFinish( void )
{
	Assert( m_chunkStart != -1 );

	m_chunkPosition = m_riff.PositionGet();
	
	int size = m_chunkPosition - m_chunkStart - 8;

	m_chunkPosition += m_chunkPosition & 1;

	m_riff.PositionSet( m_chunkStart + sizeof( int ) );

	m_riff.WriteInt( size );

	m_riff.PositionSet( m_chunkPosition );

	m_chunkStart = -1;
}

void IterateOutputRIFF::ChunkStart( unsigned int chunkname )
{
	Assert( m_chunkStart == -1 );

	m_chunkStart = m_riff.PositionGet();

	m_riff.WriteInt( chunkname );
	m_riff.WriteInt( 0 );
}

void IterateOutputRIFF::ChunkSetPosition( int position )
{
	m_riff.PositionSet( position );
}

unsigned int IterateOutputRIFF::ChunkGetPosition( void )
{
	return m_riff.PositionGet();
}

void IterateOutputRIFF::CopyChunkData( IterateRIFF& input )
{
	if (  input.ChunkSize() > 0 )
	{
		char *buffer = new char[ input.ChunkSize() ];
		Assert( buffer );

		input.ChunkRead( buffer );

		// Don't copy/write the name or size, just the data itself
		ChunkWriteData( buffer, input.ChunkSize() );

		delete[] buffer;
	}
}

void IterateOutputRIFF::SetLISETData( int position )
{
	m_riff.HasLISETData( position );
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
不卡的av电影| 欧美成人video| 图片区小说区国产精品视频| 欧美亚洲综合久久| 国产精品1024| 国产一区二区三区久久悠悠色av| 久久免费视频色| 成人一区二区视频| 日韩精品一级二级| 国产精品久久久久影视| 欧美男男青年gay1069videost| 高清久久久久久| 国产精品综合av一区二区国产馆| 亚洲最新视频在线观看| 一区二区三区小说| 亚洲va中文字幕| 久久久不卡网国产精品二区| 久久久精品黄色| 国产亚洲一区二区三区在线观看 | 欧美日韩国产在线播放网站| 懂色av中文一区二区三区| 久久99国产精品免费网站| 视频在线观看一区二区三区| 一区二区在线电影| 中文字幕一区三区| 亚洲宅男天堂在线观看无病毒| 精品一区精品二区高清| 国产麻豆精品久久一二三| 久久国产婷婷国产香蕉| 国产乱码精品一区二区三区忘忧草 | 国产寡妇亲子伦一区二区| 亚洲成人av福利| 男男成人高潮片免费网站| 国产成a人无v码亚洲福利| 久久99久久久久久久久久久| 91久久线看在观草草青青| 欧美色欧美亚洲另类二区| 欧美三级韩国三级日本一级| 欧美精品一区二| 一区二区三区在线免费视频| 日韩黄色在线观看| 成人免费电影视频| 欧美三级中文字幕| 国产精品亲子伦对白| 亚洲va天堂va国产va久| 成人精品一区二区三区四区| 成人av网站在线| 91精品国产91久久久久久一区二区| 国产精品视频九色porn| 视频在线在亚洲| 精品视频在线免费观看| 亚洲一区二区中文在线| 国产精品亚洲综合一区在线观看| 欧美另类高清zo欧美| 日韩主播视频在线| 91久久精品一区二区三区| 久久久久久久久97黄色工厂| 久久国产欧美日韩精品| 精品日韩99亚洲| 久久精品久久99精品久久| 精品女同一区二区| 日韩成人午夜电影| 久久先锋影音av鲁色资源| 美女精品一区二区| 国产精品久久网站| 国产乱码精品1区2区3区| 欧美人xxxx| 精品盗摄一区二区三区| 99久久免费精品| 成人欧美一区二区三区在线播放| 丁香网亚洲国际| 亚洲丝袜制服诱惑| jvid福利写真一区二区三区| 久久精品人人做人人综合| 成人手机电影网| 日韩一二三四区| 精品一区二区久久| 亚洲成人第一页| 欧美精品一区二区三区蜜桃| 91免费观看在线| 免费久久99精品国产| 久久影院午夜片一区| 国产成人啪午夜精品网站男同| 久久久久久久免费视频了| 日韩一区二区三免费高清| 国产在线日韩欧美| 国产欧美视频在线观看| 成人动漫视频在线| 国产精品视频九色porn| 欧美精品一区二区三区久久久 | 欧美大白屁股肥臀xxxxxx| 午夜精品久久久久影视| 国产日韩一级二级三级| 欧美高清一级片在线| www.亚洲在线| 色系网站成人免费| 韩国av一区二区三区四区| 麻豆视频一区二区| 亚洲综合丁香婷婷六月香| 中文字幕在线不卡国产视频| 久久婷婷色综合| 久久久www免费人成精品| 91免费精品国自产拍在线不卡| 美女网站一区二区| 美女国产一区二区三区| 亚洲男人的天堂一区二区| 性感美女极品91精品| 亚洲男人的天堂网| 国产一区二区三区观看| 粉嫩一区二区三区在线看| 色婷婷久久一区二区三区麻豆| 日韩欧美一区二区在线视频| 色综合久久九月婷婷色综合| www.成人网.com| 欧美日韩一区二区三区视频| 欧美一二三四在线| 亚洲视频 欧洲视频| 成人妖精视频yjsp地址| 高清国产一区二区三区| 色美美综合视频| 久久午夜电影网| 日韩成人dvd| 91香蕉视频污在线| 日韩亚洲欧美中文三级| 日韩免费一区二区| 国产亚洲精品免费| 午夜成人免费电影| 捆绑调教美女网站视频一区| 色综合久久中文综合久久97 | 一卡二卡三卡日韩欧美| 奇米888四色在线精品| av亚洲精华国产精华精华| av电影在线观看不卡| 国产目拍亚洲精品99久久精品| 国产三级精品在线| 亚洲伊人色欲综合网| 日韩二区三区四区| 在线不卡免费欧美| 五月婷婷久久综合| www.日本不卡| 精品久久人人做人人爽| 亚洲成a人在线观看| 欧美性大战久久久久久久| 亚洲综合在线免费观看| 色综合天天天天做夜夜夜夜做| 欧美视频你懂的| 最新日韩av在线| 94色蜜桃网一区二区三区| 亚洲一区在线观看网站| 欧美日韩一区精品| 午夜久久福利影院| 国产欧美1区2区3区| 成人综合婷婷国产精品久久 | 一区二区三区精品在线| 99久久综合99久久综合网站| 国产欧美日韩在线看| 国产精品77777| 亚洲欧美一区二区三区久本道91| 在线观看三级视频欧美| 国产呦精品一区二区三区网站| 91精品国产欧美一区二区成人| 天天综合网 天天综合色| 国产日韩欧美精品在线| 成人高清av在线| 亚洲国产一区二区在线播放| 91.成人天堂一区| 97精品电影院| 天天av天天翘天天综合网| 欧美一级日韩免费不卡| thepron国产精品| 亚洲免费色视频| 久久伊99综合婷婷久久伊| 99精品热视频| 国精产品一区一区三区mba桃花| 亚洲午夜久久久久久久久电影院| 久久亚洲综合色| 欧美日本一区二区在线观看| 91视视频在线直接观看在线看网页在线看| 成人欧美一区二区三区视频网页 | 91麻豆精品国产91久久久使用方法 | 日韩免费高清av| 不卡一区二区中文字幕| 99久久精品一区| 久久99精品国产麻豆不卡| 性久久久久久久久久久久| 亚洲一区二区精品视频| 久久九九影视网| 欧美国产一区在线| 7777精品伊人久久久大香线蕉完整版| 91啦中文在线观看| 色综合天天综合给合国产| 色哦色哦哦色天天综合| 成人aaaa免费全部观看| 亚洲成人1区2区| 国产另类ts人妖一区二区| 国产自产视频一区二区三区| 亚洲成人av在线电影| 免费精品视频在线| 国产91精品一区二区麻豆亚洲| 国产精品亚洲第一|