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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ppmd_coder.h

?? 一個壓縮算法, 名字叫PPMD,壓縮率比較高, 同時, 可以自行修改并編譯,請各位研究算法的同僚一同研究.
?? H
字號:
#ifndef PPMD_CODER_HEADER_0F508BAB_5509_11d5_83F2_000102A39096
#define PPMD_CODER_HEADER_0F508BAB_5509_11d5_83F2_000102A39096

/** PPMD_Coder is a class to compress and uncompress a file using the very
sophisticated PPMD method. It is based on the public domain code by Dmitry 
Shkarin which is widely available. Please notice that only one file can
compressed, archiving several files can be done with the help of TAR.

There is no general rule which OrderSize to use. If you have highly repeatable 
data it's worth to use a high value but in general this should be avoided
because the overhead is slightly greater and would increase your output file
compared to smaller OrderSizes. Just play around with the values to see what
I mean.

The SubAllocatorSize is the size in MB which will be allocated dynamically
on the heap. Only use high values if you have enough memory.

You must include the "ppmd.lib" in your project!

Please send any bugs to:
Andreas Muegge <andreas.muegge@gmx.de> or <andreas@starke-muegge.de>

2001-30-05
*/

#include <iostream.h>
#include <fstream.h>
#include <exception>
#include <wtypes.h>
#include <stdio.h>
#include <string>

// functions implemented in the static library "ppmd.lib"
BOOL  __stdcall StartSubAllocator(int SubAllocatorSize);
void  __stdcall StopSubAllocator();
DWORD __stdcall GetUsedMemory();

void __stdcall EncodeFile(ofstream & EncodedFile, 
						  ifstream & DecodedFile,
						  int MaxOrder);

void __stdcall DecodeFile(ofstream & DecodedFile, 
						  ifstream & EncodedFile,
						  int MaxOrder);

class PPMD_Coder
{
public:
	/** Parameters are:
	szIn		- file to read in
	szOut		- file to write compressed/uncompressed data to. If this
				  parameter is NULL the extension "ppm" will be added 
				  (Compression) or the original filename stored in the 
				  archive will be used (Decompression)
	nSub		- Memory to use for compression in MBytes (1..256)
	nOrder		- Ordersize (2..16)
	*/
	PPMD_Coder(const TCHAR* szIn, const TCHAR* szOut = NULL, 
		int nSub = 16, int nOrder = 6 ) 
		: m_nOrder(nOrder), m_nSubAllocatorSize(nSub),
          SIGNATURE("PPMD_A"), m_nMemory(0)
	{ m_szIn = szIn; m_szOut = szOut; }
	
	~PPMD_Coder() { }

	/** Play around with the order sizes. Higher values require more 
	overhead so you must find the right balance. Values between 4 and 6
	are good starting points. */
	int	OrderSize(int nOrder) 
	{
		m_nOrder = nOrder; 
		m_nOrder = max(nOrder, 2);	// make sure that nOrder > 0
		m_nOrder = min(nOrder, 16);	// make sure that nOrder <= 16
		return m_nOrder;
	}

	/** Specify how much memory (in MBytes) can be used. */
	int	SubAllocatorSize(int nSub)
	{
		m_nSubAllocatorSize = nSub;
		m_nSubAllocatorSize = max(m_nSubAllocatorSize, 1);
		m_nSubAllocatorSize = min(m_nSubAllocatorSize, 256);

		return m_nSubAllocatorSize;
	}

	/** Access functions for OrderSize and SubAllocatorSize */
	int OrderSize() { return m_nOrder; }
	int SubAllocatorSize() {return m_nSubAllocatorSize; }

	/** Compress the file, return FALSE if an error occured */
	bool	Compress();

	/** Uncompress file. */
	bool	Uncompress();


	/** Return the memory used. */
	void	GetMemoryUsage(DWORD & nMB, DWORD & nBytes)
	{	
		nMB		= m_nMemory >> 18;
		nBytes	=  (10U*(m_nMemory-(nMB << 18))+(1 << 17)) >> 18;
		if (nBytes == 10) 
		{ 
			nMB++;
			nBytes = 0; 
		}
	}

	/** Return size of input file */
	DWORD	GetInputSize() {return m_nInfileSize; }

	/** Return size of output file */
	DWORD	GetOutputSize() {return m_nOutfileSize; }

	/** Return compression ratio */
	float	GetRatio()
	{
		if (m_nInfileSize == 0 || m_nOutfileSize == 0)
			return 0.0;

		return (100.0 - float(m_nOutfileSize * 100.0 / m_nInfileSize) );
	}

	/** Return compression ratio */
	float	GetRatioUncompressed()
	{
		if (m_nInfileSize == 0 || m_nOutfileSize == 0)
			return 0.0;

		return (100.0 - float(m_nInfileSize * 100.0 / m_nOutfileSize) );
	}

private:
	const TCHAR*	m_szIn;
	std::string 	m_szOut;
	const char*		SIGNATURE;
	int				m_nOrder;
	int				m_nSubAllocatorSize;
	DWORD			m_nMemory;
	DWORD			m_nInfileSize;
	DWORD			m_nOutfileSize;
};


//////////////////////////////////////////////////////////////////////////
bool PPMD_Coder::Compress() 
{
	ifstream Infile(m_szIn, ios::in | ios::nocreate | ios::binary);
	if (!Infile.is_open() )
	{
		char szTemp[512];
		sprintf(szTemp, "Couldn't open file <%s>!", m_szIn);
		throw exception(szTemp); 
		return FALSE;
	}
	
	if (m_szOut.empty())
	{
		m_szOut = m_szIn;
		m_szOut += ".ppm";
	}
	
	ofstream Outfile(m_szOut.c_str(), ios::out | ios::trunc | ios::binary);
	if (!Outfile.is_open())
	{
		std::string szError = "Couldn't open file <";
		szError += m_szOut;
		szError += ">!";

		throw exception(szError.c_str()); 
		return FALSE;
	}
	
	Outfile.write(SIGNATURE, strlen(SIGNATURE));
	Outfile.put(static_cast<char> (m_nOrder) );
	Outfile.put(static_cast<char> (m_nSubAllocatorSize - 1) );
	
	// Write filename-length and filename of input file.
	// You could also store filedate and attributes here.
	int nLen = strlen(m_szIn);
	Outfile.write(reinterpret_cast<char*> (&nLen), sizeof(nLen) );
	Outfile.write(m_szIn, nLen);
	
	if (!StartSubAllocator(m_nSubAllocatorSize))
	{
		throw exception("Memory allocation for PPMD failed!"); 
		return FALSE;
	}
	
	EncodeFile(Outfile, Infile, m_nOrder);
	
	m_nMemory = GetUsedMemory();
	
	StopSubAllocator();
	
	m_nInfileSize = Infile.tellg();
	m_nOutfileSize = Outfile.tellp();
	
	Outfile.flush();
	Infile.close(); Outfile.close();
	
	return TRUE;
}


bool PPMD_Coder::Uncompress()
{
	ifstream Infile(m_szIn, ios::in | ios::nocreate | ios::binary);
	if (!Infile.is_open() )
	{
		char szTemp[512];
		sprintf(szTemp, "Couldn't open file <%s>!", m_szIn);
		throw exception(szTemp); 
		return FALSE;
	}
	
	char szTemp[8];
	Infile.read(szTemp, strlen(SIGNATURE));
	
	szTemp[6] = '\0';
	if (strcmp(szTemp, SIGNATURE) != 0)
	{
		// file not created by this program!
		throw exception("Wrong signature found, cannot uncompress file!");
		return FALSE;
	}
	
	m_nOrder = Infile.get();
	m_nSubAllocatorSize = Infile.get() +1;
	
	int nLen;
	Infile.read(reinterpret_cast<char*> (&nLen), sizeof(nLen) );
	
	char *szOutTemp = new char[nLen+1];
	Infile.read(szOutTemp, nLen);
	szOutTemp[nLen] = '\0';
	
	if (m_szOut.empty())
		m_szOut = szOutTemp;
	
	ofstream Outfile(m_szOut.c_str(), ios::out | ios::trunc | ios::binary);
	if (!Outfile.is_open())
	{
		delete szOutTemp;
		
		char szTemp[512];
		sprintf(szTemp, "Couldn't open file <%s>!", m_szOut);
		throw exception(szTemp); 
		return FALSE;
	}
	
	delete szOutTemp;
	
	if (!StartSubAllocator(m_nSubAllocatorSize))
	{
		throw exception("Memory allocation for PPMD failed!"); 
		return FALSE;
	}
	
	DecodeFile(Outfile, Infile, m_nOrder);
	
	m_nMemory = GetUsedMemory();
	
	StopSubAllocator();
	
	m_nInfileSize = Infile.tellg();
	m_nOutfileSize = Outfile.tellp();
	
	Outfile.flush();
	Infile.close(); Outfile.close();
	
	return TRUE;
}



#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国内精品不卡在线| 久久久久久久久免费| 欧美精品一区二区高清在线观看 | 91在线视频官网| 偷拍自拍另类欧美| 亚洲免费av观看| 国产精品女同互慰在线看| 911精品产国品一二三产区| av资源站一区| 国产91丝袜在线观看| 麻豆国产精品视频| 亚洲国产日韩精品| 亚洲激情图片qvod| **欧美大码日韩| 久久精品视频在线免费观看| 在线电影院国产精品| 欧美午夜视频网站| 日本黄色一区二区| av高清久久久| 成人一区二区三区| 丰满白嫩尤物一区二区| 久久99在线观看| 免费在线成人网| 99久久精品久久久久久清纯| 国产成人综合网站| 国产精品国产三级国产| 久久精品视频在线看| 久久综合99re88久久爱| 日韩欧美久久一区| 日韩欧美电影在线| 精品嫩草影院久久| 精品sm在线观看| 久久精品欧美一区二区三区麻豆| 欧美mv日韩mv国产| 精品国产乱码久久久久久久久 | 日韩免费视频一区| 国产精品一区在线| 国产成人av自拍| 国产suv一区二区三区88区| 韩国av一区二区三区| 国产在线视频精品一区| 久草中文综合在线| 国产一区二区三区| 国产精品一区二区免费不卡 | 久久久精品免费网站| 经典三级视频一区| 日韩欧美一级二级| 91精品国产综合久久久久| 欧美久久一二区| 欧美精选在线播放| 日韩精品综合一本久道在线视频| 欧美成人在线直播| 久久久www成人免费无遮挡大片| 久久精品亚洲国产奇米99 | 亚洲欧美日韩综合aⅴ视频| 亚洲天堂中文字幕| 亚洲一区在线电影| 麻豆91免费观看| 国产盗摄视频一区二区三区| youjizz国产精品| 在线观看av不卡| 日韩三区在线观看| 欧美极品xxx| 亚洲精品欧美二区三区中文字幕| 亚洲成人综合网站| 美女性感视频久久| 粉嫩绯色av一区二区在线观看 | 亚洲精品一区二区三区99| 久久久久88色偷偷免费| 国产精品麻豆网站| 一区二区免费在线| 美国毛片一区二区三区| 国产69精品久久久久毛片| 色婷婷av久久久久久久| 91精品国产综合久久久久久久久久 | 成人短视频下载| 欧美日本一区二区三区四区| 精品精品欲导航| 亚洲老司机在线| 九九热在线视频观看这里只有精品| 豆国产96在线|亚洲| 欧美日韩一区二区三区四区五区| 欧美精品一区二区三区蜜臀| 国产精品久久三| 久久精品国产精品亚洲综合| 91在线视频在线| 精品对白一区国产伦| 夜夜爽夜夜爽精品视频| 国产精品1区2区| 欧美色图激情小说| 中文字幕精品—区二区四季| 日韩精品一级二级| 99re成人精品视频| 日韩精品一区国产麻豆| 亚洲精品视频一区二区| 国产高清久久久久| 欧美一区二区福利在线| 亚洲手机成人高清视频| 国产精品99久久久久久有的能看| 欧美日韩视频专区在线播放| 中文字幕中文字幕在线一区| 精品一区二区三区免费| 欧美人与性动xxxx| 中文字幕一区二区三区四区不卡 | 亚洲综合免费观看高清在线观看| 国产精品一区一区| 337p亚洲精品色噜噜| 亚洲日本韩国一区| 国产成人a级片| 欧美成人三级电影在线| 亚洲成年人影院| 色94色欧美sute亚洲13| 中文字幕日韩av资源站| 国产另类ts人妖一区二区| 欧美一激情一区二区三区| 亚洲丶国产丶欧美一区二区三区| 91在线小视频| 一区免费观看视频| youjizz国产精品| 亚洲国产高清在线观看视频| 国产精品一区二区黑丝| 日韩视频在线一区二区| 日韩黄色一级片| 91精品国产全国免费观看| 天天综合天天做天天综合| 欧美无砖专区一中文字| 一区二区久久久久| 91亚洲午夜精品久久久久久| 亚洲天堂成人在线观看| 99免费精品视频| 中文文精品字幕一区二区| 国产成人精品亚洲午夜麻豆| 国产视频一区二区三区在线观看| 精品在线一区二区| 亚洲精品一区二区三区影院| 久久成人久久爱| 精品国免费一区二区三区| 国产精品一级二级三级| 欧美激情一区二区三区四区| 成人美女视频在线看| 国产精品人人做人人爽人人添| 高潮精品一区videoshd| 国产精品久久久久婷婷| 99热在这里有精品免费| 亚洲宅男天堂在线观看无病毒| 在线免费观看日本欧美| 五月综合激情日本mⅴ| 欧美一级欧美三级| 国产一区二区网址| 亚洲国产高清aⅴ视频| 一本大道综合伊人精品热热| 亚洲国产裸拍裸体视频在线观看乱了| 欧美区一区二区三区| 日本中文字幕一区| 亚洲精品一区二区三区精华液 | 91精品国产欧美一区二区18 | 99久久久无码国产精品| 一区二区三区丝袜| 在线不卡a资源高清| 精品在线一区二区| 中文字幕日韩精品一区| 欧美日韩国产一级二级| 麻豆精品新av中文字幕| 中文字幕av一区 二区| 在线观看亚洲精品视频| 男人操女人的视频在线观看欧美 | 午夜精品视频一区| 久久精品一二三| 在线精品视频小说1| 久久精品久久综合| 国产精品免费aⅴ片在线观看| 日本韩国精品一区二区在线观看| 日韩影院在线观看| 国产精品久久毛片av大全日韩| 欧美三级在线播放| 国产精品一区二区黑丝| 亚洲国产美国国产综合一区二区| 欧美mv日韩mv| 欧洲精品一区二区三区在线观看| 国内精品在线播放| 亚洲国产精品久久久久秋霞影院 | 精品午夜久久福利影院| 亚洲三级在线免费观看| 日韩欧美黄色影院| 色菇凉天天综合网| 国产精品影音先锋| 日本一不卡视频| 亚洲欧美另类久久久精品 | 中文字幕一区二区三区乱码在线| 在线视频你懂得一区二区三区| 国产精品国产馆在线真实露脸| 亚洲免费资源在线播放| 国产日产欧美一区二区三区| 欧美人伦禁忌dvd放荡欲情| 国产成人免费视频| 蜜桃精品在线观看| 亚洲一区成人在线| 亚洲欧洲成人精品av97| 久久久99精品免费观看| 日韩欧美在线影院|