/* deflate.c -- compress data using the deflation algorithm
* Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
/*
* ALGORITHM
*
* The "deflation" process depends on being able to identify portions
* of the input text which are identical to earlier input (within a
* sliding window trailing behind the input currently being processed).
*
* The most straightforward technique turns out to be the fastest for
* most input files: try all possible matches and select the longest.
* The key feature of this algorithm is that insertions into the string
* dictionary are very simple and thus fast, and deletions are avoided
* completely. Insertions are performed at each input character, whereas
* string matches are performed only when the previous match ends. So it
* is preferable to spend more time in matches to allow very fast string
* insertions and avoid deletions. The matching algorithm for small
* strings is inspired from that of Rabin & Karp. A brute force approach
* is used to find longer strings when a small match has been found.
* A similar algorithm is used in comic (by Jan-Mark Wams) and freeze
* (by Leonid Broukhis).
* A previous version of this file used a more sophisticated algorithm
* (by Fiala and Greene) which is guaranteed to run in linear amortized
* time, but has a larger average cost, uses more memory and is patented.
* However the F&G algorithm may be faster for some highly redundant
* files if the parameter max_chain_length (described below) is too large.
*
* ACKNOWLEDGEMENTS
*
* The idea of lazy evaluation of matches is due to Jan-Mark Wams, and
* I found it in 'freeze' written by Leonid Broukhis.
* Thanks to many people for bug reports and testing.
*
* REFERENCES
*
* Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
* Available in http://www.ietf.org/rfc/rfc1951.txt
*
* A description of the Rabin and Karp algorithm is given in the book
* "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
*
* Fiala,E.R., and Greene,D.H.
* Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595
*
*/
/* @(#) $Id$ */
#include "deflate.h"
const char deflate_copyright[] =
" deflate 1.2.5 Copyright 1995-2010 Jean-loup Gailly and Mark Adler ";
/*
If you use the zlib library in a product, an acknowledgment is welcome
in the documentation of your product. If for some reason you cannot
include such an acknowledgment, I would appreciate that you keep this
copyright string in the executable of your product.
*/
/* ===========================================================================
* Function prototypes.
*/
typedef enum {
need_more, /* block not completed, need more input or more output */
block_done, /* block flush performed */
finish_started, /* finish started, need only more output at next deflate */
finish_done /* finish done, accept no more input or output */
} block_state;
typedef block_state (*compress_func) OF((deflate_state *s, int flush));
/* Compression function. Returns the block state after the call. */
local void fill_window OF((deflate_state *s));
local block_state deflate_stored OF((deflate_state *s, int flush));
local block_state deflate_fast OF((deflate_state *s, int flush));
#ifndef FASTEST
local block_state deflate_slow OF((deflate_state *s, int flush));
#endif
local block_state deflate_rle OF((deflate_state *s, int flush));
local block_state deflate_huff OF((deflate_state *s, int flush));
local void lm_init OF((deflate_state *s));
local void putShortMSB OF((deflate_state *s, uInt b));
local void flush_pending OF((z_streamp strm));
local int read_buf OF((z_streamp strm, Bytef *buf, unsigned size));
#ifdef ASMV
void match_init OF((void)); /* asm code initialization */
uInt longest_match OF((deflate_state *s, IPos cur_match));
#else
local uInt longest_match OF((deflate_state *s, IPos cur_match));
#endif
#ifdef DEBUG
local void check_match OF((deflate_state *s, IPos start, IPos match,
int length));
#endif
/* ===========================================================================
* Local data
*/
#define NIL 0
/* Tail of hash chains */
#ifndef TOO_FAR
# define TOO_FAR 4096
#endif
/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */
/* Values for max_lazy_match, good_match and max_chain_length, depending on
* the desired pack level (0..9). The values given below have been tuned to
* exclude worst case performance for pathological files. Better values may be
* found for specific files.
*/
typedef struct config_s {
ush good_length; /* reduce lazy search above this match length */
ush max_lazy; /* do not perform lazy search above this match length */
ush nice_length; /* quit search above this match length */
ush max_chain;
compress_func func;
} config;
#ifdef FASTEST
local const config configuration_table[2] = {
/* good lazy nice chain */
/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */
/* 1 */ {4, 4, 8, 4, deflate_fast}}; /* max speed, no lazy matches */
#else
local const config configuration_table[10] = {
/* good lazy nice chain */
/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */
/* 1 */ {4, 4, 8, 4, deflate_fast}, /* max speed, no lazy matches */
/* 2 */ {4, 5, 16, 8, deflate_fast},
/* 3 */ {4, 6, 32, 32, deflate_fast},
/* 4 */ {4, 4, 16, 16, deflate_slow}, /* lazy matches */
/* 5 */ {8, 16, 32, 32, deflate_slow},
/* 6 */ {8, 16, 128, 128, deflate_slow},
/* 7 */ {8, 32, 128, 256, deflate_slow},
/* 8 */ {32, 128, 258, 1024, deflate_slow},
/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* max compression */
#endif
/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4
* For deflate_fast() (levels <= 3) good is ignored and lazy has a different
* meaning.
*/
#define EQUAL 0
/* result of memcmp for equal strings */
#ifndef NO_DUMMY_DECL
struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
#endif
/* ===========================================================================
* Update a hash value with the given input byte
* IN assertion: all calls to to UPDATE_HASH are made with consecutive
* input characters, so that a running hash key can be computed from the
* previous key instead of complete recalculation each time.
*/
#define UPDATE_HASH(s,h,c) (h = (((h)<<s->hash_shift) ^ (c)) & s->hash_mask)
/* ===========================================================================
* Insert string str in the dictionary and set match_head to the previous head
* of the hash chain (the most recent string with same hash key). Return
* the previous length of the hash chain.
* If this file is compiled with -DFASTEST, the compression level is forced
* to 1, and no hash chains are maintained.
* IN assertion: all calls to to INSERT_STRING are made with consecutive
* input characters and the first MIN_MATCH bytes of str are valid
* (except for the last MIN_MATCH-1 bytes of the input file).
*/
#ifdef FASTEST
#define INSERT_STRING(s, str, match_head) \
(UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
match_head = s->head[s->ins_h], \
s->head[s->ins_h] = (Pos)(str))
#else
#define INSERT_STRING(s, str, match_head) \
(UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \
s->head[s->ins_h] = (Pos)(str))
#endif
/* ===========================================================================
* Initialize the hash table (avoiding 64K overflow for 16 bit systems).
* prev[] will be initialized on the fly.
*/
#define CLEAR_HASH(s) \
s->head[s->ha
没有合适的资源?快使用搜索试试~ 我知道了~
ActiveMQ C++ Windows客户端 3.8.3例子代码(含头文件和编译出来的dll和lib)
共903个文件
h:800个
tlog:18个
c:14个
4星 · 超过85%的资源 需积分: 43 162 下载量 171 浏览量
2014-10-27
21:32:08
上传
评论 3
收藏 30.09MB ZIP 举报
温馨提示
activemq的最新的CMS客户端代码是3.8.3,由于在windows下编译比较麻烦,遍寻网络不获,所以自己仔细研究了一下,终于编译成功,分享给大家。附件中的例子工程在vs2010下编译通过。如果需要移植到自己的工程里,仅需要把include和lib两个目录复制到自己的工程下,然后进行相应配置即可。ps:需要在自己的工程里把那几个lib文件配置到链接——输入里(大概有六七个就行了,具体可参考网上其他朋友的文档)。对了,本例子只是制作了release版本,debug没做,所以,debug的不能run哦。如果有自己想改cms源码的话,我想,那些大拿自己编译出来是没有问题的,也就不需要参考偶的拙劣之作了 顺祝大家工作顺利!
资源推荐
资源详情
资源评论
收起资源包目录
ActiveMQ C++ Windows客户端 3.8.3例子代码(含头文件和编译出来的dll和lib) (903个子文件)
deflate.c 66KB
inflate.c 51KB
trees.c 44KB
infback.c 22KB
gzread.c 20KB
gzwrite.c 14KB
gzlib.c 14KB
inftrees.c 13KB
crc32.c 13KB
inffast.c 13KB
zutil.c 7KB
adler32.c 5KB
uncompr.c 2KB
gzclose.c 678B
main.cpp 13KB
activemq-cpp.dll 7.72MB
activemq-cpp.dll 7.72MB
activemq-cpp.dll 7.72MB
libaprutil-1.dll 208KB
libaprutil-1.dll 208KB
libaprutil-1.dll 208KB
libapr-1.dll 152KB
libapr-1.dll 152KB
libapr-1.dll 152KB
libapriconv-1.dll 36KB
libapriconv-1.dll 36KB
libapriconv-1.dll 36KB
MyTest.exe 66KB
MyTest.exe 20KB
MyTest.vcxproj.filters 945B
zlib.h 78KB
apr_buckets.h 63KB
apr_errno.h 54KB
HashMap.h 43KB
apr_file_io.h 41KB
ActiveMQConnection.h 39KB
ByteBuffer.h 39KB
ConcurrentStlMap.h 36KB
apr_thread_proc.h 35KB
apr_network_io.h 34KB
Math.h 34KB
CopyOnWriteArrayList.h 34KB
LinkedHashMap.h 34KB
LinkedList.h 32KB
apr_pools.h 32KB
Message.h 31KB
ByteArrayAdapter.h 30KB
crc32.h 30KB
LinkedBlockingQueue.h 28KB
StlMap.h 28KB
Timer.h 27KB
CharBuffer.h 27KB
ThreadPoolExecutor.h 26KB
ActiveMQConnectionFactory.h 26KB
CmsTemplate.h 25KB
AdvisorySupport.h 25KB
apr_dbd.h 24KB
Semaphore.h 24KB
BaseDataStreamMarshaller.h 23KB
Logger.h 23KB
Integer.h 22KB
Socket.h 22KB
Long.h 22KB
ActiveMQSessionKernel.h 21KB
AbstractQueuedSynchronizer.h 21KB
Condition.h 20KB
BytesMessage.h 20KB
ReentrantLock.h 20KB
URI.h 20KB
apr_poll.h 20KB
BufferFactory.h 19KB
apr_ring.h 19KB
apr_tables.h 19KB
StreamMessage.h 19KB
Session.h 19KB
apr_portable.h 19KB
LongBuffer.h 19KB
DoubleBuffer.h 18KB
Properties.h 18KB
ShortBuffer.h 18KB
FloatBuffer.h 18KB
IntBuffer.h 18KB
apr.h 18KB
Double.h 18KB
apr_file_info.h 18KB
Thread.h 17KB
apr_memcache.h 17KB
Float.h 17KB
System.h 17KB
apr_crypto.h 17KB
ActiveMQMessageTemplate.h 17KB
FutureTask.h 17KB
apr_arch_misc.h 17KB
MessageProducer.h 17KB
StlList.h 16KB
AbstractList.h 16KB
ArrayPointer.h 16KB
PriorityQueue.h 16KB
Map.h 16KB
apr_escape.h 16KB
共 903 条
- 1
- 2
- 3
- 4
- 5
- 6
- 10
逸风居士
- 粉丝: 12
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页