~zooko/cryptopp/trunk

« back to all changes in this revision

Viewing changes to zinflate.h

  • Committer: weidai
  • Date: 2003-07-29 01:18:33 UTC
  • Revision ID: svn-v4:57ff6487-cd31-0410-9ec3-f628ee90f5f0:trunk/c5:118
fix potential threading problem with initialization of static objects

Show diffs side-by-side

added added

removed removed

Lines of Context:
6
6
 
7
7
NAMESPACE_BEGIN(CryptoPP)
8
8
 
9
 
//! _
 
9
//! .
10
10
class LowFirstBitReader
11
11
{
12
12
public:
13
13
        LowFirstBitReader(BufferedTransformation &store)
14
14
                : m_store(store), m_buffer(0), m_bitsBuffered(0) {}
15
 
//      unsigned long BitsLeft() const {return m_store.MaxRetrievable() * 8 + m_bitsBuffered;}
 
15
        unsigned long BitsLeft() const {return m_store.MaxRetrievable() * 8 + m_bitsBuffered;}
16
16
        unsigned int BitsBuffered() const {return m_bitsBuffered;}
17
17
        unsigned long PeekBuffer() const {return m_buffer;}
18
18
        bool FillBuffer(unsigned int length);
100
100
        Inflator(BufferedTransformation *attachment = NULL, bool repeat = false, int autoSignalPropagation = -1);
101
101
 
102
102
        void IsolatedInitialize(const NameValuePairs &parameters);
103
 
        size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking);
 
103
        unsigned int Put2(const byte *inString, unsigned int length, int messageEnd, bool blocking);
104
104
        bool IsolatedFlush(bool hardFlush, bool blocking);
105
105
 
106
106
        virtual unsigned int GetLog2WindowSize() const {return 15;}
111
111
private:
112
112
        virtual unsigned int MaxPrestreamHeaderSize() const {return 0;}
113
113
        virtual void ProcessPrestreamHeader() {}
114
 
        virtual void ProcessDecompressedData(const byte *string, size_t length)
 
114
        virtual void ProcessDecompressedData(const byte *string, unsigned int length)
115
115
                {AttachedTransformation()->Put(string, length);}
116
116
        virtual unsigned int MaxPoststreamTailSize() const {return 0;}
117
117
        virtual void ProcessPoststreamTail() {}
121
121
        bool DecodeBody();
122
122
        void FlushOutput();
123
123
        void OutputByte(byte b);
124
 
        void OutputString(const byte *string, size_t length);
 
124
        void OutputString(const byte *string, unsigned int length);
125
125
        void OutputPast(unsigned int length, unsigned int distance);
126
126
 
127
127
        static const HuffmanDecoder *FixedLiteralDecoder();
132
132
 
133
133
        enum State {PRE_STREAM, WAIT_HEADER, DECODING_BODY, POST_STREAM, AFTER_END};
134
134
        State m_state;
135
 
        bool m_repeat, m_eof, m_wrappedAround;
 
135
        bool m_repeat, m_eof;
136
136
        byte m_blockType;
137
137
        word16 m_storedLen;
138
138
        enum NextDecode {LITERAL, LENGTH_BITS, DISTANCE, DISTANCE_BITS};
141
141
        HuffmanDecoder m_dynamicLiteralDecoder, m_dynamicDistanceDecoder;
142
142
        LowFirstBitReader m_reader;
143
143
        SecByteBlock m_window;
144
 
        size_t m_current, m_lastFlush;
 
144
        unsigned int m_maxDistance, m_current, m_lastFlush;
145
145
};
146
146
 
147
147
NAMESPACE_END