1/* 2 * Copyright (c) 2023 Shenzhen Kaihong Digital Industry Development Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#ifndef OHOS_SHARING_BUFFER_READER_H 17#define OHOS_SHARING_BUFFER_READER_H 18 19#include <cstdint> 20#include <memory> 21#include <string> 22#include <vector> 23 24namespace OHOS { 25namespace Sharing { 26class DataBuffer { 27public: 28 using Ptr = std::shared_ptr<DataBuffer>; 29 30 DataBuffer() = default; 31 explicit DataBuffer(int32_t size); 32 33 DataBuffer(const DataBuffer &other) noexcept; 34 DataBuffer &operator=(const DataBuffer &other) noexcept; 35 DataBuffer(DataBuffer &&other) noexcept; 36 DataBuffer &operator=(DataBuffer &&other) noexcept; 37 38 virtual ~DataBuffer(); 39 40 virtual uint8_t *Data() 41 { 42 return data_; 43 } 44 45 virtual int32_t Size() const 46 { 47 return size_; 48 } 49 50 int32_t Capacity() 51 { 52 return capacity_; 53 } 54 55 void UpdateSize(int32_t size) 56 { 57 if (size <= capacity_) { 58 size_ = size; 59 } 60 } 61 62 const char *Peek() const 63 { 64 return (char *)data_; 65 } 66 67 void SetSize(int32_t size) 68 { 69 size_ = size; 70 } 71 72 virtual void Clear() 73 { 74 if (data_) { 75 delete[] data_; 76 data_ = nullptr; 77 } 78 79 size_ = 0; 80 capacity_ = 0; 81 } 82 83 void Append(const char *data, int32_t dataLen) 84 { 85 PushData(data, dataLen); 86 } 87 88 void Append(const uint8_t *data, int32_t dataLen) 89 { 90 PushData((const char *)data, dataLen); 91 } 92 93 void Append(uint8_t c) 94 { 95 PushData((char *)&c, 1); 96 } 97 98 void Assign(const char *data, int32_t dataLen) 99 { 100 ReplaceData(data, dataLen); 101 } 102 103 void Assign(uint8_t c) 104 { 105 ReplaceData((char *)&c, 1); 106 } 107 108public: 109 void Resize(int32_t size); 110 void SetCapacity(int32_t capacity); 111 void PushData(const char *data, int32_t dataLen); 112 void ReplaceData(const char *data, int32_t dataLen); 113 114private: 115 int32_t size_ = 0; 116 int32_t capacity_ = 0; 117 uint8_t *data_ = nullptr; 118}; 119 120} // namespace Sharing 121} // namespace OHOS 122#endif