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

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

?? word.c

?? 這是算術編碼的源程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/******************************************************************************
File: 		word.c

Authors: 	John Carpinelli   (johnfc@ecr.mu.oz.au)
	 	Wayne Salamonsen  (wbs@mundil.cs.mu.oz.au)

Purpose:	Data compression using a word-based model and revised 
		arithmetic coding method.

Based on: 	A. Moffat, R. Neal, I.H. Witten, "Arithmetic Coding Revisted",
		Proc. IEEE Data Compression Conference, Snowbird, Utah, 
		March 1995.


Copyright 1995 John Carpinelli and Wayne Salamonsen, All Rights Reserved.

These programs are supplied free of charge for research purposes only,
and may not sold or incorporated into any commercial product.  There is
ABSOLUTELY NO WARRANTY of any sort, nor any undertaking that they are
fit for ANY PURPOSE WHATSOEVER.  Use them at your own risk.  If you do
happen to find a bug, or have modifications to suggest, please report
the same to Alistair Moffat, alistair@cs.mu.oz.au.  The copyright
notice above and this statement of conditions must remain an integral
part of each and every copy made of these files.

******************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "hashtable.h"
#include "stats.h"
#include "coder.h"
#ifdef SYSV
#include <sys/times.h>
#include <limits.h>
#endif

#define ENCODE          0
#define DECODE          1
#define	WORD		0		/* flag to process a word */
#define NON_WORD	1		/* flag to process a non-word */

#define INIT_CONTEXT	1023		/* initial size of word contexts */
#define CHAR_CONTEXT	256		/* length of character contexts */

#define BUFFER_SIZE	512		/* size of file input buffer */
#define MEGABYTE	(1 << 20)	/* size of one megabyte */

#define DEFAULT_MEM	1		/* default 1 megabyte limit */
#define MIN_MBYTES      1	       	/* minimum allowable memory size */
#define MAX_MBYTES      255		/* maximum no for 8 bit int */
#define MAGICNO         "123w"         	/* Magic Number for files */
#define MAGICNO_LENGTH	4		/* length of magic number */


/* Macro to specify what a word is */
#define ISWORD(c) (((c >= 'A') && (c <= 'Z')) || \
                   ((c >= 'a') && (c <= 'z')) || \
                   ((c >= '0') && (c <= '9')))


/* function prototypes */
void init_word_model(hash_table *tables[], context *words[]);
void purge_word_model(hash_table *tables[], context *words[]);
void init_char_model(context *characters[], context *lengths[]);
void encode_file(unsigned char tempstore[], int templength);
void decode_file();
void read_word(char buffer[], int *buffer_length, int *curr_pos, 
	       string *pWord, int type);
void print_results(int operation);


/* global variables */
int mbytes = DEFAULT_MEM; 	/* stores no. megabytes allowable for mem */
int total_memory;		/* total memory used by all models */
int base_memory;	       	/* memory used by character model */
int verbose = 0;		/* flag set if stats are to be printed */
int purge_counter=0;		/* counts number of memory purges */
unsigned int nWords[2]; 	/* counts number of words */
unsigned int nDistinctWords[2];	/* counts number of distinct words */


/* 
 * parse command line arguments. Decide whether to decode or encode
 * and optional memory size. Also sets filename to stdin if none specified 
 */
int 
main(int argc, char *argv[])
{	
    int i;			/* loop counter */
    int what = ENCODE;		/* flag as to whether to encode or decode */
    unsigned char tempstore[MAGICNO_LENGTH];	/* stores magic no */
    int templength = 0;		/* number of bytes read for magic number */
    int	selected = -1;		/* stores if decode set at command line */
    
    /*
     * parse command line arguments. Sets up whether to decode or encode
     * and optional memory limit. Also replaces stdin with input file 
     */
    for (i = 1; i < argc; ) 
    {
	if (argv[i][0] == '-') 
	{
	    switch(argv[i][1]) 
	    {
	      case 'e':		/* do encode */
		selected = ENCODE;
		i++;
		break;
	      case 'd':		/* do decode */
		selected = DECODE;
		i++;
		break;
	      case 'm':		/* set memory size */
		i++;
		mbytes = atoi(argv[i]);
		i++;
		break;
	      case 'v':		/* set verbose flag to print stats */
		verbose = 1;
		i++;
		break;
	      case 'f':		/* set number of F bits */
		i++;
		f_bits = atoi(argv[i]);
		max_frequency = 1<<f_bits;
		i++;
		break;
	      default:		/* incorrect args */
		fprintf(stderr, 
		   "Usage: %s [-e [-m n] | -d] [-v] [-f n] [file]\n", argv[0]);
		exit(1);
	    }
	}
	else if (freopen(argv[i++], "r", stdin) == (FILE *)NULL) 
	{
	    fprintf(stderr, "%s: cannot read %s\n",
		    argv[0], argv[--i]);
	    exit(1);
	}
    }
    
    /* check if memory limit is within allowable range */ 
    if (mbytes < MIN_MBYTES || mbytes > MAX_MBYTES)
    {
	fprintf(stderr, "memory limit must be between %d and %d\n", 
		MIN_MBYTES, MAX_MBYTES);
	exit(1);
    }
    
    /* check if f_bits is within allowable range */
    if (f_bits < MIN_F_BITS || f_bits > MAX_F_BITS)
    {
	fprintf(stderr, "number of f bits must be between %d and %d\n",
		MIN_F_BITS, MAX_F_BITS);
	exit(1);
    }

    /* Check input file for Magic Number. */
    if (selected != ENCODE)
    {
	templength = fread(tempstore, 1, MAGICNO_LENGTH, stdin);
        bytes_input += templength; 
	if (memcmp(tempstore, MAGICNO, MAGICNO_LENGTH) == 0)
	    what = DECODE;
	else if (selected == DECODE)
	{
	    fprintf(stderr, "Bad Magic Number\n");
	    exit(1);
	}
    }
	
    if (what == ENCODE)					/* do ENCODE */
    {
	/* write magic number to output file */
	fwrite(MAGICNO, 1, MAGICNO_LENGTH, stdout);
	bytes_output += MAGICNO_LENGTH;

	/* store memory limit being used in output */
	putc(mbytes, stdout);
	bytes_output += 1;

	/* store number of f_bits being used in output */
	putc(f_bits, stdout);
	bytes_output += 1;

	encode_file(tempstore, templength);
    }
    else						/* do DECODE */
    {
	/* read memory limit to be used and store in mbytes */
	mbytes = getc(stdin);
        bytes_input += 1;
	
	/* get number of f_bits to be used and store in f_bits */
	f_bits = getc(stdin);
	max_frequency = 1<<f_bits;
        bytes_input++;
	decode_file();
    }
    
    /* statistics section if using verbose flag */
    if (verbose)
	print_results(what);
    return 0;			/* exited cleanly */
}


/*
 *
 * print the results of compressing/decompressing a file
 *
 */
void print_results(int operation)
{
    if (operation == ENCODE)
    {
	fprintf(stderr, 
		"                              words           non-words\n");
	fprintf(stderr, "Words read             : %10u          %10u\n", 
		nWords[0], nWords[1]);
	fprintf(stderr, "Distinct words         : %10u          %10u\n",
		nDistinctWords[0], nDistinctWords[1]);
	fprintf(stderr, "Input file size        : %10u bytes\n", bytes_input);
    }
    fprintf(stderr, "Output file size       : %10u bytes\n", bytes_output);
    if (purge_counter != 0)
	fprintf(stderr, "Memory purges          : %10d times\n", purge_counter);
    if ((operation == ENCODE) && (bytes_input > 0))
	fprintf(stderr, "Compression rate       : %10.3f bpc (%0.2f%%) \n", 
		8.0 * bytes_output / bytes_input, 
		(float)bytes_output/bytes_input*100);

    /* only provide timing details if "times" function is available */
#ifdef 	SYSV
{
    struct tms cpu_usage;
    float cpu_used, comp_rate;

    times(&cpu_usage);    	/* determine the cpu time used */
    cpu_used = ((float) cpu_usage.tms_utime) / sysconf(_SC_CLK_TCK);

    if (cpu_used == 0)
	comp_rate = 0;
    else
    {
        if (operation == ENCODE)
	    comp_rate = ((float) bytes_input) / (1024 * cpu_used);
        else
	    comp_rate = ((float) bytes_output) / (1024 * cpu_used);
    }

    fprintf(stderr, "Compression time       : %10.2f seconds (%0.2f Kb/s)\n",
	    cpu_used, comp_rate);
}
#endif
}

/*
 *
 * call the standard C function realloc after checking that the memory
 * limit isn't exceeded. If limit is exceeded return NULL
 *
 */
void 
*do_realloc(void *ptr, size_t size)
{
    total_memory += size;
    if ((total_memory / MEGABYTE) >= mbytes)
	return NULL;
    else
        return (realloc(ptr, size));
}


/*
 *
 * call the standard C function malloc after checking against the memory
 * limit. If the limit is exceeded return NULL

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久国产日韩欧美精品| 亚洲成人自拍网| 久久综合资源网| 日韩欧美国产三级| 日韩精品综合一本久道在线视频| 欧美日韩视频专区在线播放| 69精品人人人人| 欧美一二三在线| 久久久www成人免费毛片麻豆| 久久综合色之久久综合| 久久久久亚洲综合| 国产精品剧情在线亚洲| 亚洲黄色片在线观看| 亚洲成av人片www| 久久99精品国产麻豆婷婷洗澡| 久久成人麻豆午夜电影| 丁香亚洲综合激情啪啪综合| 91色综合久久久久婷婷| 欧美日韩精品一区二区三区蜜桃 | 一区二区三区在线观看欧美| 亚洲乱码日产精品bd| 亚洲v日本v欧美v久久精品| 久久99国产乱子伦精品免费| 丁香网亚洲国际| 欧美综合一区二区三区| 欧美成人精品高清在线播放| 亚洲国产精品ⅴa在线观看| 一区二区三区91| 国产精品亚洲综合一区在线观看| 97se亚洲国产综合自在线| 欧美日韩亚洲高清一区二区| 国产亚洲综合性久久久影院| 一区二区三区影院| 狠狠色狠狠色综合系列| 91亚洲资源网| 久久久久久久久99精品| 亚洲一区二区在线免费观看视频 | 91在线精品秘密一区二区| 欧美视频在线不卡| 中文字幕成人av| 视频一区欧美日韩| 99久久精品国产一区| 精品久久一区二区| 亚洲综合一区二区精品导航| 国产高清成人在线| 日韩欧美黄色影院| 五月天激情综合| 97超碰欧美中文字幕| www国产精品av| 日本aⅴ免费视频一区二区三区| 不卡的看片网站| 久久精品一区二区三区av| 午夜婷婷国产麻豆精品| 色婷婷一区二区| 国产精品色一区二区三区| 精品制服美女丁香| 欧美一区二区三区男人的天堂| 亚洲精品成人悠悠色影视| 成人毛片老司机大片| 精品国产乱码久久久久久蜜臀| 亚洲福利视频三区| 色八戒一区二区三区| 最近日韩中文字幕| 成人av手机在线观看| 欧美经典一区二区三区| 国产成人久久精品77777最新版本| 欧美一区二区精美| 久久99精品一区二区三区三区| 91麻豆精品国产91久久久资源速度| 亚洲激情图片一区| 欧美视频一区在线观看| 亚洲香蕉伊在人在线观| 在线观看成人免费视频| 一区二区三区久久| 欧美日韩高清不卡| 丝袜诱惑制服诱惑色一区在线观看| 欧美视频日韩视频在线观看| 日韩黄色免费网站| 日韩精品综合一本久道在线视频| 另类专区欧美蜜桃臀第一页| 久久久一区二区三区| 丁香另类激情小说| 亚洲男人的天堂一区二区| 91久久精品日日躁夜夜躁欧美| 亚洲免费观看高清完整版在线观看熊 | 一本大道久久a久久综合| 亚洲男人的天堂网| 欧美日韩一区二区三区免费看 | 日韩一区二区视频在线观看| 麻豆视频观看网址久久| 久久久欧美精品sm网站| 99久久国产免费看| 丝袜诱惑制服诱惑色一区在线观看 | 色婷婷精品大视频在线蜜桃视频 | 日韩女优制服丝袜电影| 国产精品一区二区免费不卡| 亚洲欧美另类在线| 欧美一区欧美二区| 成人一区二区三区中文字幕| 自拍av一区二区三区| 在线不卡中文字幕播放| 国模一区二区三区白浆| 亚洲精品国产精品乱码不99| 欧美电影免费观看高清完整版在线| 国产精品 欧美精品| 亚洲国产欧美在线| 欧美激情一区三区| 欧美日韩精品一区二区三区蜜桃| 国产成人综合在线播放| 亚洲综合小说图片| 国产欧美日韩另类一区| 欧美伦理视频网站| 不卡一区中文字幕| 六月婷婷色综合| 亚洲乱码日产精品bd| 亚洲国产精品视频| 成人av影院在线| 欧美变态tickling挠脚心| 成人亚洲一区二区一| 久久人人爽人人爽| 欧美性大战久久久久久久蜜臀| 日韩经典中文字幕一区| 综合色中文字幕| 久久你懂得1024| 欧美精品高清视频| 在线观看亚洲成人| 不卡的电影网站| 国产成人午夜视频| 精品一区二区在线免费观看| 午夜私人影院久久久久| 中文字幕一区二区三区四区| 日韩美女主播在线视频一区二区三区| 色呦呦国产精品| 国产欧美一区二区精品性色| 欧美日韩你懂得| 99久久精品一区| 成人av在线资源网站| 精品一区二区三区免费播放 | 日本不卡一区二区三区| 一区二区视频免费在线观看| 中文字幕一区在线观看视频| 国产亚洲福利社区一区| 久久嫩草精品久久久久| 欧美成人性战久久| 日韩天堂在线观看| 日韩三级视频在线看| 欧美一区二区三区小说| 欧美日韩成人在线| 777午夜精品视频在线播放| 欧美日韩免费视频| 777a∨成人精品桃花网| 在线播放日韩导航| 91精品国产91久久久久久最新毛片| 欧美日韩免费高清一区色橹橹| 精品视频一区三区九区| 欧美性大战久久久久久久蜜臀| 欧美日韩免费不卡视频一区二区三区 | 日韩精品免费专区| 日本va欧美va欧美va精品| 久草热8精品视频在线观看| 精久久久久久久久久久| 国产精品一区二区无线| 国产凹凸在线观看一区二区| 成人av片在线观看| 色菇凉天天综合网| 91麻豆精品91久久久久同性| 日韩视频免费观看高清完整版 | 色欲综合视频天天天| 色女孩综合影院| 欧美一级片在线| 久久理论电影网| 一区二区三区毛片| 久久99深爱久久99精品| 成人高清视频在线| 欧美日韩国产电影| 2023国产精品自拍| 亚洲另类春色国产| 精品一区二区免费| 色av成人天堂桃色av| 欧美一区二区三区在线观看视频| 精品国产一区久久| 亚洲综合一二区| 国产伦精品一区二区三区免费| 91免费视频网| 欧美r级电影在线观看| 国产精品久久看| 日韩国产高清在线| 99精品欧美一区二区三区小说 | 亚洲va国产天堂va久久en| 韩国v欧美v日本v亚洲v| 色就色 综合激情| 久久久久久久久99精品| 亚洲444eee在线观看| 成人手机电影网| 欧美一区日本一区韩国一区| 亚洲免费三区一区二区| 国产乱码精品一区二区三 | 国产精品国产三级国产有无不卡| 日本麻豆一区二区三区视频| 91麻豆免费视频|