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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? word.c

?? 算術(shù)編碼實現(xiàn)
?? 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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产麻豆精品95视频| 国产欧美日韩亚州综合| 成人国产视频在线观看| 亚洲色图另类专区| 国产精品三级在线观看| 久久久久国产成人精品亚洲午夜| 日本乱码高清不卡字幕| 精品一区二区免费在线观看| 亚洲免费观看高清完整版在线| 欧美成人在线直播| 精品免费99久久| 日韩欧美亚洲国产另类| 精品免费日韩av| 久久一区二区三区四区| 久久久噜噜噜久噜久久综合| 国产欧美日本一区视频| 欧美激情一区二区三区| 成人免费在线视频| 亚洲成人一二三| 国产精一区二区三区| 91啪九色porn原创视频在线观看| 欧洲一区在线电影| 国产日韩欧美精品综合| 欧美精品一区二区久久婷婷| 欧美一卡二卡三卡四卡| 久久久久久久久久久久久久久99| 中文字幕一区二区三区乱码在线 | 欧美亚洲动漫制服丝袜| 国内精品在线播放| 中文字幕亚洲精品在线观看| 久久亚洲欧美国产精品乐播| 中文字幕高清一区| 午夜精品成人在线视频| 国产成人鲁色资源国产91色综| 成人美女视频在线看| 欧美一二三在线| 亚洲精选视频免费看| 亚洲一级二级三级| 成人午夜在线免费| 精品sm在线观看| 亚洲无人区一区| 色哟哟一区二区| 国产精品免费aⅴ片在线观看| 视频一区二区不卡| 欧美性受xxxx黑人xyx性爽| 久久精品视频免费观看| 男女性色大片免费观看一区二区 | k8久久久一区二区三区 | 国产精品麻豆一区二区 | 久草这里只有精品视频| 777午夜精品免费视频| 性欧美疯狂xxxxbbbb| 成人av第一页| 18欧美乱大交hd1984| 在线观看亚洲a| 亚洲欧美另类小说| 在线亚洲高清视频| 五月天激情综合网| 91精品国产乱| 久久精品国产亚洲5555| 欧美不卡视频一区| 不卡一区二区在线| 国产欧美日韩在线| 91高清视频免费看| 天堂在线亚洲视频| 久久久久久日产精品| 日韩视频在线一区二区| 国产美女一区二区三区| 一区二区三区精品视频在线| 欧美成人一区二区三区| 日本丶国产丶欧美色综合| 国产乱子伦视频一区二区三区| ...xxx性欧美| 国产精品色噜噜| 久久久久久影视| 欧美videossexotv100| 91在线国产观看| 波多野结衣中文字幕一区二区三区| 午夜精品一区二区三区电影天堂| 精品国产亚洲在线| 精品第一国产综合精品aⅴ| 欧美日韩在线播放三区四区| 91蜜桃婷婷狠狠久久综合9色| 亚洲欧美精品午睡沙发| 成人在线视频首页| 亚洲国产视频在线| 午夜免费久久看| 奇米一区二区三区| 欧美bbbbb| 极品少妇xxxx精品少妇| 久久机这里只有精品| 久久国产生活片100| 美女视频黄久久| 国产成人高清在线| 一本色道**综合亚洲精品蜜桃冫| bt欧美亚洲午夜电影天堂| 成人av在线资源网站| 一本一本大道香蕉久在线精品 | 91精品在线观看入口| 日韩久久精品一区| 久久久久免费观看| 日韩美女久久久| 欧美bbbbb| 99精品一区二区| 91精选在线观看| 久久欧美中文字幕| 悠悠色在线精品| 国产又黄又大久久| 欧美色图片你懂的| 国产农村妇女毛片精品久久麻豆| 亚洲天堂成人网| 国内成+人亚洲+欧美+综合在线| 不卡的电视剧免费网站有什么| 777午夜精品免费视频| 中文字幕亚洲电影| 国产成人综合在线观看| 欧美日韩国产不卡| 亚洲欧美一区二区在线观看| 免费观看30秒视频久久| 欧美日韩一本到| 亚洲欧美另类小说视频| 国产精品一区二区久久不卡| 日韩欧美国产午夜精品| 图片区日韩欧美亚洲| 在线一区二区三区四区五区 | 日本成人在线电影网| 色综合天天综合网国产成人综合天| 日韩免费观看高清完整版| 日产国产高清一区二区三区 | 亚洲毛片av在线| 91免费视频大全| 亚洲一区二区中文在线| 日本道精品一区二区三区 | 国产一区二区在线观看视频| 日韩欧美在线123| 狠狠色综合播放一区二区| 欧美精品一区二区在线观看| 国产一区二区三区免费看| 国产视频一区二区在线观看| 成人av在线播放网址| 亚洲精品综合在线| 91精品国产乱码久久蜜臀| 精品一区二区在线看| 国产精品理论在线观看| 在线免费观看一区| 久久国产三级精品| 国产成人无遮挡在线视频| 欧美三级日韩在线| 免费精品99久久国产综合精品| 国产亚洲欧美中文| 色悠久久久久综合欧美99| 麻豆精品在线观看| 亚洲日韩欧美一区二区在线| 日韩欧美电影在线| av不卡免费在线观看| 日本sm残虐另类| 亚洲欧美一区二区三区极速播放| 欧美一级精品在线| 91麻豆免费视频| 久久99精品久久久| 亚洲国产视频a| 亚洲欧美日韩一区二区| 久久众筹精品私拍模特| 欧美美女一区二区三区| 99久久99久久精品国产片果冻 | 97久久久精品综合88久久| 激情五月激情综合网| 午夜成人免费视频| 亚洲激情男女视频| 亚洲人成7777| 一区二区三区国产| 亚洲理论在线观看| 依依成人综合视频| 亚洲品质自拍视频| 亚洲精品免费在线观看| 亚洲乱码中文字幕综合| 国产精品二三区| 亚洲一区二区三区在线| 亚洲一区二区三区四区在线免费观看 | 在线播放一区二区三区| 欧美三片在线视频观看| 在线亚洲高清视频| 欧美二区在线观看| 精品国精品国产| 中文字幕一区不卡| 亚洲一二三专区| 免费av网站大全久久| 国产乱人伦偷精品视频免下载| 国产精品一二三四| 国产精品主播直播| 欧美伊人久久久久久久久影院| 欧美性受xxxx黑人xyx| 欧美成人精品3d动漫h| 国产精品婷婷午夜在线观看| 亚洲综合在线免费观看| 精品一区二区免费视频| 色吧成人激情小说| www久久精品| 亚洲自拍另类综合| 国产69精品久久久久777|