117fd14ceSopenharmony_ci/*
217fd14ceSopenharmony_ci * Copyright (C) 2021 Huawei Device Co., Ltd.
317fd14ceSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
417fd14ceSopenharmony_ci * you may not use this file except in compliance with the License.
517fd14ceSopenharmony_ci * You may obtain a copy of the License at
617fd14ceSopenharmony_ci *
717fd14ceSopenharmony_ci *    http://www.apache.org/licenses/LICENSE-2.0
817fd14ceSopenharmony_ci *
917fd14ceSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1017fd14ceSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1117fd14ceSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1217fd14ceSopenharmony_ci * See the License for the specific language governing permissions and
1317fd14ceSopenharmony_ci * limitations under the License.
1417fd14ceSopenharmony_ci */
1517fd14ceSopenharmony_ci
1617fd14ceSopenharmony_ci#ifndef HC_PARCEL_H
1717fd14ceSopenharmony_ci#define HC_PARCEL_H
1817fd14ceSopenharmony_ci
1917fd14ceSopenharmony_ci#include <stdint.h>
2017fd14ceSopenharmony_ci#include "hc_types.h"
2117fd14ceSopenharmony_ci
2217fd14ceSopenharmony_ci#ifdef __cplusplus
2317fd14ceSopenharmony_ciextern "C" {
2417fd14ceSopenharmony_ci#endif
2517fd14ceSopenharmony_ci
2617fd14ceSopenharmony_ci#define PARCEL_DEFAULT_LENGTH 0
2717fd14ceSopenharmony_ci#define PARCEL_DEFAULT_ALLOC_UNIT 0
2817fd14ceSopenharmony_ci
2917fd14ceSopenharmony_citypedef struct {
3017fd14ceSopenharmony_ci    char *data;
3117fd14ceSopenharmony_ci    unsigned int beginPos;
3217fd14ceSopenharmony_ci    unsigned int endPos;
3317fd14ceSopenharmony_ci    unsigned int length;
3417fd14ceSopenharmony_ci    unsigned int allocUnit;
3517fd14ceSopenharmony_ci} HcParcel;
3617fd14ceSopenharmony_ci
3717fd14ceSopenharmony_ciHcParcel CreateParcel(uint32_t size, uint32_t allocUnit);
3817fd14ceSopenharmony_civoid DeleteParcel(HcParcel *parcel);
3917fd14ceSopenharmony_civoid ClearParcel(HcParcel *parcel);
4017fd14ceSopenharmony_civoid ResetParcel(HcParcel *parcel, uint32_t size, uint32_t allocUnit);
4117fd14ceSopenharmony_ciHcBool ParcelReadWithoutPopData(HcParcel *parcel, void *dst, uint32_t dataSize);
4217fd14ceSopenharmony_ciHcBool ParcelRead(HcParcel *parcel, void *dst, uint32_t dataSize);
4317fd14ceSopenharmony_ciHcBool ParcelWrite(HcParcel *parcel, const void *src, uint32_t dataSize);
4417fd14ceSopenharmony_ciHcBool ParcelReadRevert(HcParcel *parcel, void *dst, uint32_t dataSize);
4517fd14ceSopenharmony_ciHcBool ParcelWriteRevert(HcParcel *parcel, const void *src, uint32_t dataSize);
4617fd14ceSopenharmony_ciuint32_t GetParcelDataSize(const HcParcel *parcel);
4717fd14ceSopenharmony_ciconst char *GetParcelData(const HcParcel *parcel);
4817fd14ceSopenharmony_ciconst char* GetParcelLastChar(const HcParcel *parcel);
4917fd14ceSopenharmony_ci
5017fd14ceSopenharmony_ciHcBool ParcelReadInt32(HcParcel *parcel, int *dst);
5117fd14ceSopenharmony_ciHcBool ParcelReadUint32(HcParcel *parcel, uint32_t *dst);
5217fd14ceSopenharmony_ciHcBool ParcelReadInt16(HcParcel *parcel, short *dst);
5317fd14ceSopenharmony_ciHcBool ParcelReadUint16(HcParcel *parcel, uint16_t *dst);
5417fd14ceSopenharmony_ciHcBool ParcelReadInt8(HcParcel *parcel, char *dst);
5517fd14ceSopenharmony_ciHcBool ParcelReadUint8(HcParcel *parcel, uint8_t *dst);
5617fd14ceSopenharmony_ciHcBool ParcelReadUint64(HcParcel *parcel, uint64_t *dst);
5717fd14ceSopenharmony_ciHcBool ParcelReadInt64(HcParcel *parcel, int64_t *dst);
5817fd14ceSopenharmony_ciHcBool ParcelWriteInt32(HcParcel *parcel, int src);
5917fd14ceSopenharmony_ciHcBool ParcelWriteUint32(HcParcel *parcel, uint32_t src);
6017fd14ceSopenharmony_ciHcBool ParcelWriteInt16(HcParcel *parcel, short src);
6117fd14ceSopenharmony_ciHcBool ParcelWriteUint16(HcParcel *parcel, uint16_t src);
6217fd14ceSopenharmony_ciHcBool ParcelWriteInt8(HcParcel *parcel, char src);
6317fd14ceSopenharmony_ciHcBool ParcelWriteUint8(HcParcel *parcel, uint8_t src);
6417fd14ceSopenharmony_ciHcBool ParcelWriteUint64(HcParcel *parcel, uint64_t src);
6517fd14ceSopenharmony_ciHcBool ParcelWriteInt64(HcParcel *parcel, int64_t src);
6617fd14ceSopenharmony_ciHcBool ParcelWriteString(HcParcel *parcel, const char *str);
6717fd14ceSopenharmony_ciHcBool ParcelReadString(HcParcel *parcel, char **str);
6817fd14ceSopenharmony_ciHcBool ParcelReadParcel(HcParcel *src, HcParcel *dst, uint32_t size, HcBool copy);
6917fd14ceSopenharmony_ciHcBool ParcelCopy(HcParcel *src, HcParcel *dst);
7017fd14ceSopenharmony_ci
7117fd14ceSopenharmony_ciHcBool ParcelReadInt32Revert(HcParcel *parcel, int32_t *dst);
7217fd14ceSopenharmony_ciHcBool ParcelReadUint32Revert(HcParcel *parcel, uint32_t *dst);
7317fd14ceSopenharmony_ciHcBool ParcelReadInt16Revert(HcParcel *parcel, short *dst);
7417fd14ceSopenharmony_ciHcBool ParcelReadUint16Revert(HcParcel *parcel, uint16_t *dst);
7517fd14ceSopenharmony_ciHcBool ParcelReadInt8Revert(HcParcel *parcel, char *dst);
7617fd14ceSopenharmony_ciHcBool ParcelReadUint8Revert(HcParcel *parcel, uint8_t *dst);
7717fd14ceSopenharmony_ciHcBool ParcelReadUint64Revert(HcParcel *parcel, uint64_t *dst);
7817fd14ceSopenharmony_ciHcBool ParcelReadInt64Revert(HcParcel *parcel, int64_t *dst);
7917fd14ceSopenharmony_ciHcBool ParcelWriteInt32Revert(HcParcel *parcel, int src);
8017fd14ceSopenharmony_ciHcBool ParcelWriteUint32Revert(HcParcel *parcel, uint32_t src);
8117fd14ceSopenharmony_ciHcBool ParcelWriteInt16Revert(HcParcel *parcel, short src);
8217fd14ceSopenharmony_ciHcBool ParcelWriteUint16Revert(HcParcel *parcel, uint16_t src);
8317fd14ceSopenharmony_ciHcBool ParcelWriteInt8Revert(HcParcel *parcel, char src);
8417fd14ceSopenharmony_ciHcBool ParcelWriteUint8Revert(HcParcel *parcel, uint8_t src);
8517fd14ceSopenharmony_ciHcBool ParcelWriteUint64Revert(HcParcel *parcel, uint64_t src);
8617fd14ceSopenharmony_ciHcBool ParcelWriteInt64Revert(HcParcel *parcel, int64_t src);
8717fd14ceSopenharmony_ci
8817fd14ceSopenharmony_civoid DataRevert(void *data, uint32_t length);
8917fd14ceSopenharmony_ciHcBool ParcelPopBack(HcParcel *parcel, uint32_t size);
9017fd14ceSopenharmony_ciHcBool ParcelPopFront(HcParcel *parcel, uint32_t size);
9117fd14ceSopenharmony_ciHcBool ParcelEraseBlock(HcParcel *parcel, uint32_t start, uint32_t dataSize, void *dst);
9217fd14ceSopenharmony_ci
9317fd14ceSopenharmony_ci#ifdef __cplusplus
9417fd14ceSopenharmony_ci}
9517fd14ceSopenharmony_ci#endif
9617fd14ceSopenharmony_ci#endif
97