doubao_chat/lib/net/libduer-device/framework/utils/lightduer_bitmap.h

85 lines
2.5 KiB
C

/**
* Copyright (2017) Baidu Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Author: Zhang Leliang(zhangleliang@baidu.com)
//
// Description: bitmap cache for fix-sized objects.
#ifndef BAIDU_DUER_LIBDUER_DEVICE_FRAMEWORK_UTILS_LIGHTDUER_BITMAP_H
#include "baidu_json.h"
#include "lightduer_mutex.h"
//#define BIT_MAP_TYPE unsigned char
typedef struct bitmap_objects_s {
int num_of_objs;
int num_of_bitmaps;
duer_mutex_t bitmap_lock;
unsigned char *bitmaps;
void *objects;
int element_size;
} bitmap_objects_t;
// int dump_bitmap(bitmap_objects_t *bop, const char *tag);
// int first_set_index(bitmap_objects_t *buffer);
/**
* init the bitmap structure
* @object_num, the number of elements which will be pre-allocated
* @bop, the address of the bitmap structure
* @element_size, the element size of the object, in Bytes
* @return, -1 fail, 0 ok
*/
int init_bitmap(int object_num, bitmap_objects_t *bop, int element_size);
/**
* release the resource abtained in the init_bitmap
* @bop, the address of the bitmap sructure
* @return, -1 fail, 0 ok
*/
int uninit_bitmap(bitmap_objects_t *bop);
/**
* allocate one element from the pre-allocated buffer in bop
* @bop, the address of the bitmap structure
* @return, NULL fail, the address of the element OK.
*/
void *alloc_obj(bitmap_objects_t *bop);
/**
* free the element got by alloc_obj
* @bop, the address of the bitmap structure
* @obj, the address of the element got from alloc_obj
* @return, 0 OK, -2 the address is not got from the buffer in bop,-1 fail,
*/
int free_obj(bitmap_objects_t *bop, void *obj);
/**
* lock the mutex of bitmap
* @bop, the address of the bitmap sructure
* @return, -1 fail, 0 ok
*/
int lock_bitmap(bitmap_objects_t *bop);
/**
* unlock the mutex of bitmap
* @bop, the address of the bitmap sructure
* @return, -1 fail, 0 ok
*/
int unlock_bitmap(bitmap_objects_t *bop);
#endif // BAIDU_DUER_LIBDUER_DEVICE_FRAMEWORK_UTILS_LIGHTDUER_BITMAP_H