blob: b4365401fa91ac349a97b815a74806529cd4cef8 [file] [log] [blame]
rjw1f884582022-01-06 17:20:42 +08001/* Copyright Statement:
2 *
3 * This software/firmware and related documentation ("MediaTek Software") are
4 * protected under relevant copyright laws. The information contained herein
5 * is confidential and proprietary to MediaTek Inc. and/or its licensors.
6 * Without the prior written permission of MediaTek inc. and/or its licensors,
7 * any reproduction, modification, use or disclosure of MediaTek Software,
8 * and information contained herein, in whole or in part, shall be strictly prohibited.
9 */
10/* MediaTek Inc. (C) 2010. All rights reserved.
11 *
12 * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
13 * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
14 * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
15 * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
16 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
18 * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
19 * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
20 * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
21 * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
22 * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
23 * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
24 * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
25 * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
26 * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
27 * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
28 * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
29 * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
30 *
31 * The following software/firmware and/or related documentation ("MediaTek Software")
32 * have been modified by MediaTek Inc. All revisions are subject to any receiver's
33 * applicable license agreements with MediaTek Inc.
34 */
35
36#ifndef BITWISEINPUTSTREAM_H_
37#define BITWISEINPUTSTREAM_H_
38#include <cstdint>
39#include <vector>
40
41class BitwiseInputStream {
42public:
43 BitwiseInputStream(std::vector<uint8_t> buf);
44 virtual ~BitwiseInputStream();
45
46 /**
47 * Return the number of bit still available for reading.
48 */
49 int available();
50
51 /**
52 * Read some data and increment the current position.
53 *
54 * The 8-bit limit on access to bitwise streams is intentional to
55 * avoid endianness issues.
56 *
57 * @param bits the amount of data to read (gte 0, lte 8)
58 * @return byte of read data (possibly partially filled, from lsb)
59 */
60 uint32_t read(uint32_t bits);
61
62 /**
63 * Read data in bulk into a byte array and increment the current position.
64 *
65 * @param bits the amount of data to read
66 * @return newly allocated byte array of read data
67 */
68 //uint8_t* readByteArray(uint32_t bits, int* length);
69 std::vector<uint8_t> readByteVector(uint32_t bits);
70 /**
71 * Increment the current position and ignore contained data.
72 *
73 * @param bits the amount by which to increment the position
74 */
75 void skip(uint32_t bits);
76private:
77 // The byte array being read from.
78 //uint8_t* mBuf;
79 std::vector<uint8_t> mBuf;
80
81 // The current position offset, in bits, from the msb in byte 0.
82 uint32_t mPos;
83
84 // The last valid bit offset.
85 uint32_t mEnd;
86
87};
88
89#endif /* BITWISEINPUTSTREAM_H_ */