亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
久久久精品国产99久久精品芒果 | 亚洲一区二区三区中文字幕| 亚洲一区在线电影| 蜜桃一区二区三区在线观看| 国产激情偷乱视频一区二区三区| 亚洲综合色成人| 麻豆91精品91久久久的内涵| 成人福利视频网站| 欧美电影在线免费观看| 99re这里只有精品视频首页| 欧美福利视频导航| 中文字幕第一页久久| 五月天激情小说综合| 国产传媒欧美日韩成人| 在线区一区二视频| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲天天做日日做天天谢日日欢 | 777亚洲妇女| 中文字幕不卡在线观看| 日韩中文字幕91| 成人综合婷婷国产精品久久 | 蜜桃精品视频在线| 视频一区二区国产| 成人国产在线观看| 制服.丝袜.亚洲.另类.中文| 亚洲国产精品成人综合| 蜜臀av国产精品久久久久| 99免费精品在线观看| 精品少妇一区二区三区在线播放| 亚洲色图20p| 精品一区二区三区影院在线午夜| 色av一区二区| 国产精品日产欧美久久久久| 国产欧美一区二区三区在线看蜜臀 | 日本不卡在线视频| 94-欧美-setu| 久久一区二区三区四区| 性久久久久久久久久久久| 成人av在线资源网| 久久久久97国产精华液好用吗| 亚洲欧美另类综合偷拍| 亚洲精品videosex极品| 国产成人精品亚洲午夜麻豆| 日韩午夜电影在线观看| 亚洲午夜免费福利视频| 成人app在线观看| 久久精品欧美一区二区三区麻豆 | 日韩亚洲欧美成人一区| 亚洲一区二区精品3399| 91亚洲精品久久久蜜桃网站| 国产午夜精品久久久久久免费视| 日本一区二区三区电影| 国内精品自线一区二区三区视频| 欧美精三区欧美精三区| 亚洲永久精品国产| 91蜜桃免费观看视频| 国产精品久久久久久久久动漫| 国产精品亚洲一区二区三区在线| 日韩欧美一级在线播放| 日本不卡中文字幕| 91精品国产色综合久久不卡电影| 亚洲444eee在线观看| 欧美性欧美巨大黑白大战| 日韩写真欧美这视频| 免费在线欧美视频| 91精品国产色综合久久ai换脸 | 日韩精品一区在线观看| 男女激情视频一区| 欧美一二三区在线观看| 久久国产日韩欧美精品| 成人免费毛片a| 欧美国产国产综合| av在线不卡网| 一区二区三区久久| 欧美系列日韩一区| 污片在线观看一区二区| 777奇米成人网| 日本美女一区二区三区视频| 欧美成人精品3d动漫h| 免费成人你懂的| 欧美精品一区二区蜜臀亚洲| 国产美女一区二区三区| 久久久久久久综合日本| 亚洲影视在线播放| 欧美日韩国产区一| 五月开心婷婷久久| 精品国产a毛片| 丰满少妇久久久久久久| 成人欧美一区二区三区视频网页| 91视频免费看| 亚洲丰满少妇videoshd| 日韩一区二区不卡| 国产一区二区三区蝌蚪| 国产女同性恋一区二区| 99天天综合性| 亚洲国产一区在线观看| 日韩欧美在线不卡| 国产成人一级电影| 亚洲精品日产精品乱码不卡| 欧美欧美午夜aⅴ在线观看| 久久国产精品99久久人人澡| 欧美极品少妇xxxxⅹ高跟鞋| 91麻豆精品秘密| 五月婷婷欧美视频| 久久夜色精品一区| 91女人视频在线观看| 丝袜a∨在线一区二区三区不卡| 日韩精品一区二区三区视频| 国产99久久久久| 亚洲一二三四在线| 精品欧美一区二区在线观看| www.欧美精品一二区| 香蕉久久夜色精品国产使用方法| 精品国偷自产国产一区| av综合在线播放| 美女精品一区二区| 国产精品国产三级国产专播品爱网 | 久久一区二区三区国产精品| 91一区二区在线| 免费成人在线观看视频| 国产精品久久毛片| 日韩一区二区不卡| 一本一本久久a久久精品综合麻豆| 亚洲444eee在线观看| 在线日韩av片| 国产成人午夜精品5599| 亚洲一二三四在线| 亚洲mv在线观看| 奇米影视7777精品一区二区| 国产精品无遮挡| 欧美一区二区三区小说| 99久久精品国产一区| 久久精品国产一区二区三| 亚洲精品久久久久久国产精华液| 精品久久久久一区| 欧美性xxxxx极品少妇| 丰满少妇在线播放bd日韩电影| 日韩激情视频网站| 亚洲视频一二区| 久久久亚洲精品一区二区三区| 午夜不卡av免费| 综合久久久久久久| 26uuu亚洲| 欧美放荡的少妇| 99re视频精品| 国产高清成人在线| 美女脱光内衣内裤视频久久网站| 亚洲精品福利视频网站| 国产精品黄色在线观看| 久久久噜噜噜久久中文字幕色伊伊| 欧美三级欧美一级| 91黄色免费看| 97久久超碰国产精品电影| 国产精品乡下勾搭老头1| 日本亚洲视频在线| 亚洲国产精品影院| 亚洲桃色在线一区| 国产精品素人一区二区| 91麻豆国产自产在线观看| 国产高清在线观看免费不卡| 久久精品国产一区二区三| 日韩精品久久久久久| 亚洲福利一区二区三区| 亚洲自拍都市欧美小说| 最新国产精品久久精品| 中文字幕 久热精品 视频在线 | 免费成人av在线| 午夜电影一区二区三区| 曰韩精品一区二区| 亚洲视频在线一区| 一色桃子久久精品亚洲| 国产精品久久久久久久久免费樱桃| 久久久国产综合精品女国产盗摄| 欧美电视剧在线看免费| 日韩欧美综合在线| 日韩亚洲欧美一区| 日韩精品中文字幕在线不卡尤物| 在线不卡a资源高清| 欧美高清一级片在线| 欧美日韩一级片在线观看| 欧美色电影在线| 欧美精品第一页| 欧美日韩国产不卡| 在线不卡中文字幕| 91精品国产91久久综合桃花| 欧美喷水一区二区| 欧美一级欧美一级在线播放| 日韩三级视频中文字幕| 精品久久久久久久久久久久久久久| 欧美一区二区不卡视频| 日韩久久免费av| 久久影音资源网| 国产欧美精品在线观看| 国产精品久久国产精麻豆99网站| 亚洲私人黄色宅男| 亚洲午夜私人影院| 蜜桃精品在线观看| 国产成人免费视| 91在线看国产| 欧美日韩午夜在线视频|