00001 #ifndef N2NCFILTERLZO_H
00002 #define N2NCFILTERLZO_H
00003
00004 #include "minilzo.203/minilzo.h"
00005 #include "filter.h"
00006
00007 namespace n2nc {
00008
00012 class FilterLZO : public Filter {
00013
00014
00015 #if defined(__LZO_STRICT_16BIT)
00016 #define IN_LEN (8*1024u)
00017 #elif defined(LZO_ARCH_I086) && !defined(LZO_HAVE_MM_HUGE_ARRAY)
00018 #define IN_LEN (60*1024u)
00019 #else
00020 #define IN_LEN (128*1024ul)
00021
00022 #endif
00023 #define OUT_LEN (IN_LEN + IN_LEN / 16 + 64 + 3)
00024
00025 #define HEAP_ALLOC(var,size) \
00026 lzo_align_t __LZO_MMODEL var [ ((size) + (sizeof(lzo_align_t) - 1)) / sizeof(lzo_align_t) ]
00027
00028
00029 public:
00030 FilterLZO();
00031 ~FilterLZO();
00032
00033 virtual Filter::status_t egress(void *inbuf, void *outbuf,size_t inlen,size_t *outlen) ;
00034 virtual Filter::status_t ingress(void *inbuf, void *outbuf,size_t inlen,size_t *outlen) ;
00035
00036 private:
00037 struct lzoheader_t{
00038 uint32_t p_size;
00039 };
00040
00041 void *m_tmpbuf;
00042
00043 unsigned char __LZO_MMODEL m_in [ IN_LEN ];
00044 unsigned char __LZO_MMODEL m_out [ OUT_LEN ];
00045 HEAP_ALLOC(m_wrkmem,LZO1X_1_MEM_COMPRESS);
00046
00047 };
00048
00049 }
00050
00051 #endif