Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(593)

Side by Side Diff: core/src/fxcodec/jbig2/JBig2_BitStream.cpp

Issue 1393823002: Stop inlining CJBig2_BitStream. (Closed) Base URL: https://pdfium.googlesource.com/pdfium@master
Patch Set: rebase Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #include "JBig2_BitStream.h"
8
9 #include <algorithm>
10
11 CJBig2_BitStream::CJBig2_BitStream(const uint8_t* pBuffer, FX_DWORD dwLength)
12 : m_pBuf(pBuffer), m_dwLength(dwLength), m_dwByteIdx(0), m_dwBitIdx(0) {
13 if (m_dwLength > 256 * 1024 * 1024) {
14 m_dwLength = 0;
15 m_pBuf = nullptr;
16 }
17 }
18
19 CJBig2_BitStream::~CJBig2_BitStream() {
20 }
21
22 int32_t CJBig2_BitStream::readNBits(FX_DWORD dwBits, FX_DWORD* dwResult) {
23 FX_DWORD dwBitPos = getBitPos();
24 if (dwBitPos > LengthInBits())
25 return -1;
26
27 *dwResult = 0;
28 if (dwBitPos + dwBits <= LengthInBits())
29 dwBitPos = dwBits;
30 else
31 dwBitPos = LengthInBits() - dwBitPos;
32
33 for (; dwBitPos > 0; --dwBitPos) {
34 *dwResult =
35 (*dwResult << 1) | ((m_pBuf[m_dwByteIdx] >> (7 - m_dwBitIdx)) & 0x01);
36 AdvanceBit();
37 }
38 return 0;
39 }
40
41 int32_t CJBig2_BitStream::readNBits(FX_DWORD dwBits, int32_t* nResult) {
42 FX_DWORD dwBitPos = getBitPos();
43 if (dwBitPos > LengthInBits())
44 return -1;
45
46 *nResult = 0;
47 if (dwBitPos + dwBits <= LengthInBits())
48 dwBitPos = dwBits;
49 else
50 dwBitPos = LengthInBits() - dwBitPos;
51
52 for (; dwBitPos > 0; --dwBitPos) {
53 *nResult =
54 (*nResult << 1) | ((m_pBuf[m_dwByteIdx] >> (7 - m_dwBitIdx)) & 0x01);
55 AdvanceBit();
56 }
57 return 0;
58 }
59
60 int32_t CJBig2_BitStream::read1Bit(FX_DWORD* dwResult) {
61 if (!IsInBound())
62 return -1;
63
64 *dwResult = (m_pBuf[m_dwByteIdx] >> (7 - m_dwBitIdx)) & 0x01;
65 AdvanceBit();
66 return 0;
67 }
68
69 int32_t CJBig2_BitStream::read1Bit(FX_BOOL* bResult) {
70 if (!IsInBound())
71 return -1;
72
73 *bResult = (m_pBuf[m_dwByteIdx] >> (7 - m_dwBitIdx)) & 0x01;
74 AdvanceBit();
75 return 0;
76 }
77
78 int32_t CJBig2_BitStream::read1Byte(uint8_t* cResult) {
79 if (!IsInBound())
80 return -1;
81
82 *cResult = m_pBuf[m_dwByteIdx];
83 ++m_dwByteIdx;
84 return 0;
85 }
86
87 int32_t CJBig2_BitStream::readInteger(FX_DWORD* dwResult) {
88 if (m_dwByteIdx + 3 >= m_dwLength)
89 return -1;
90
91 *dwResult = (m_pBuf[m_dwByteIdx] << 24) | (m_pBuf[m_dwByteIdx + 1] << 16) |
92 (m_pBuf[m_dwByteIdx + 2] << 8) | m_pBuf[m_dwByteIdx + 3];
93 m_dwByteIdx += 4;
94 return 0;
95 }
96
97 int32_t CJBig2_BitStream::readShortInteger(FX_WORD* dwResult) {
98 if (m_dwByteIdx + 1 >= m_dwLength)
99 return -1;
100
101 *dwResult = (m_pBuf[m_dwByteIdx] << 8) | m_pBuf[m_dwByteIdx + 1];
102 m_dwByteIdx += 2;
103 return 0;
104 }
105
106 void CJBig2_BitStream::alignByte() {
107 if (m_dwBitIdx != 0) {
108 ++m_dwByteIdx;
109 m_dwBitIdx = 0;
110 }
111 }
112
113 uint8_t CJBig2_BitStream::getCurByte() const {
114 return IsInBound() ? m_pBuf[m_dwByteIdx] : 0;
115 }
116
117 void CJBig2_BitStream::incByteIdx() {
118 if (IsInBound())
119 ++m_dwByteIdx;
120 }
121
122 uint8_t CJBig2_BitStream::getCurByte_arith() const {
123 return IsInBound() ? m_pBuf[m_dwByteIdx] : 0xFF;
124 }
125
126 uint8_t CJBig2_BitStream::getNextByte_arith() const {
127 return m_dwByteIdx + 1 < m_dwLength ? m_pBuf[m_dwByteIdx + 1] : 0xFF;
128 }
129
130 FX_DWORD CJBig2_BitStream::getOffset() const {
131 return m_dwByteIdx;
132 }
133
134 void CJBig2_BitStream::setOffset(FX_DWORD dwOffset) {
135 m_dwByteIdx = std::min(dwOffset, m_dwLength);
136 }
137
138 FX_DWORD CJBig2_BitStream::getBitPos() const {
139 return (m_dwByteIdx << 3) + m_dwBitIdx;
140 }
141
142 void CJBig2_BitStream::setBitPos(FX_DWORD dwBitPos) {
143 m_dwByteIdx = dwBitPos >> 3;
144 m_dwBitIdx = dwBitPos & 7;
145 }
146
147 const uint8_t* CJBig2_BitStream::getBuf() const {
148 return m_pBuf;
149 }
150
151 const uint8_t* CJBig2_BitStream::getPointer() const {
152 return m_pBuf + m_dwByteIdx;
153 }
154
155 void CJBig2_BitStream::offset(FX_DWORD dwOffset) {
156 m_dwByteIdx += dwOffset;
157 }
158
159 FX_DWORD CJBig2_BitStream::getByteLeft() const {
160 return m_dwLength - m_dwByteIdx;
161 }
162
163 void CJBig2_BitStream::AdvanceBit() {
164 if (m_dwBitIdx == 7) {
165 ++m_dwByteIdx;
166 m_dwBitIdx = 0;
167 } else {
168 ++m_dwBitIdx;
169 }
170 }
171
172 bool CJBig2_BitStream::IsInBound() const {
173 return m_dwByteIdx < m_dwLength;
174 }
175
176 FX_DWORD CJBig2_BitStream::LengthInBits() const {
177 return m_dwLength << 3;
178 }
OLDNEW
« no previous file with comments | « core/src/fxcodec/jbig2/JBig2_BitStream.h ('k') | core/src/fxcodec/jbig2/JBig2_HuffmanDecoder.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698