111 lines
4.5 KiB
C
111 lines
4.5 KiB
C
|
|
/***************************************************************************************
|
||
|
|
*
|
||
|
|
* IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||
|
|
*
|
||
|
|
* By downloading, copying, installing or using the software you agree to this license.
|
||
|
|
* If you do not agree to this license, do not download, install,
|
||
|
|
* copy or use the software.
|
||
|
|
*
|
||
|
|
* Copyright (C) 2014-2024, Happytimesoft Corporation, all rights reserved.
|
||
|
|
*
|
||
|
|
* Redistribution and use in binary forms, with or without modification, are permitted.
|
||
|
|
*
|
||
|
|
* 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.
|
||
|
|
*
|
||
|
|
****************************************************************************************/
|
||
|
|
|
||
|
|
#ifndef PPSTACK_H
|
||
|
|
#define PPSTACK_H
|
||
|
|
|
||
|
|
|
||
|
|
/***************************************************************************************/
|
||
|
|
|
||
|
|
typedef struct PPSN // ppstack_node
|
||
|
|
{
|
||
|
|
unsigned long prev_node;
|
||
|
|
unsigned long next_node;
|
||
|
|
unsigned long node_flag; // 0:idle 1:in FreeList 2:in UsedList
|
||
|
|
} PPSN;
|
||
|
|
|
||
|
|
typedef struct PPSN_CTX
|
||
|
|
{
|
||
|
|
char * fl_base;
|
||
|
|
uint32 head_node;
|
||
|
|
uint32 tail_node;
|
||
|
|
uint32 node_num;
|
||
|
|
uint32 low_offset;
|
||
|
|
uint32 high_offset;
|
||
|
|
uint32 unit_size;
|
||
|
|
void * ctx_mutex;
|
||
|
|
uint32 pop_cnt;
|
||
|
|
uint32 push_cnt;
|
||
|
|
} PPSN_CTX;
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
extern "C" {
|
||
|
|
#endif
|
||
|
|
|
||
|
|
/***************************************************************************************/
|
||
|
|
|
||
|
|
HT_API PPSN_CTX * pps_ctx_fl_init(unsigned long node_num, unsigned long content_size, BOOL bNeedMutex);
|
||
|
|
HT_API PPSN_CTX * pps_ctx_fl_init_assign(char * mem_addr, unsigned long mem_len, unsigned long node_num, unsigned long content_size, BOOL bNeedMutex);
|
||
|
|
|
||
|
|
HT_API void pps_fl_free(PPSN_CTX * fl_ctx);
|
||
|
|
HT_API void pps_fl_reinit(PPSN_CTX * fl_ctx);
|
||
|
|
|
||
|
|
HT_API BOOL pps_fl_push(PPSN_CTX * pps_ctx, void * content_ptr);
|
||
|
|
HT_API BOOL pps_fl_push_tail(PPSN_CTX * pps_ctx, void * content_ptr);
|
||
|
|
HT_API void * pps_fl_pop(PPSN_CTX * pps_ctx);
|
||
|
|
|
||
|
|
HT_API PPSN_CTX * pps_ctx_ul_init(PPSN_CTX * fl_ctx, BOOL bNeedMutex);
|
||
|
|
HT_API BOOL pps_ctx_ul_init_assign(PPSN_CTX * ul_ctx, PPSN_CTX * fl_ctx, BOOL bNeedMutex);
|
||
|
|
HT_API BOOL pps_ctx_ul_init_nm(PPSN_CTX * fl_ctx, PPSN_CTX * ul_ctx);
|
||
|
|
|
||
|
|
HT_API void pps_ul_reinit(PPSN_CTX * ul_ctx);
|
||
|
|
HT_API void pps_ul_free(PPSN_CTX * ul_ctx);
|
||
|
|
|
||
|
|
HT_API BOOL pps_ctx_ul_del(PPSN_CTX * ul_ctx, void * content_ptr);
|
||
|
|
HT_API PPSN * pps_ctx_ul_del_node_unlock(PPSN_CTX * ul_ctx, PPSN * p_node);
|
||
|
|
HT_API void * pps_ctx_ul_del_unlock(PPSN_CTX * ul_ctx, void * content_ptr);
|
||
|
|
|
||
|
|
HT_API BOOL pps_ctx_ul_add(PPSN_CTX * ul_ctx, void * content_ptr);
|
||
|
|
HT_API BOOL pps_ctx_ul_add_head(PPSN_CTX * ul_ctx, void * content_ptr);
|
||
|
|
|
||
|
|
HT_API uint32 pps_get_index(PPSN_CTX * pps_ctx, void * content_ptr);
|
||
|
|
HT_API void * pps_get_node_by_index(PPSN_CTX * pps_ctx, unsigned long index);
|
||
|
|
|
||
|
|
/***************************************************************************************/
|
||
|
|
HT_API void * pps_lookup_start(PPSN_CTX * pps_ctx);
|
||
|
|
HT_API void * pps_lookup_next(PPSN_CTX * pps_ctx, void * ct_ptr);
|
||
|
|
HT_API void pps_lookup_end(PPSN_CTX * pps_ctx);
|
||
|
|
|
||
|
|
HT_API void * pps_lookback_start(PPSN_CTX * pps_ctx);
|
||
|
|
HT_API void * pps_lookback_next(PPSN_CTX * pps_ctx, void * ct_ptr);
|
||
|
|
HT_API void pps_lookback_end(PPSN_CTX * pps_ctx);
|
||
|
|
|
||
|
|
HT_API void pps_wait_mutex(PPSN_CTX * pps_ctx);
|
||
|
|
HT_API void pps_post_mutex(PPSN_CTX * pps_ctx);
|
||
|
|
|
||
|
|
HT_API BOOL pps_safe_node(PPSN_CTX * pps_ctx, void * content_ptr);
|
||
|
|
HT_API BOOL pps_idle_node(PPSN_CTX * pps_ctx, void * content_ptr);
|
||
|
|
HT_API BOOL pps_exist_node(PPSN_CTX * pps_ctx, void * content_ptr);
|
||
|
|
HT_API BOOL pps_used_node(PPSN_CTX * pps_ctx, void * content_ptr);
|
||
|
|
|
||
|
|
/***************************************************************************************/
|
||
|
|
HT_API int pps_node_count(PPSN_CTX * pps_ctx);
|
||
|
|
HT_API void * pps_get_head_node(PPSN_CTX * pps_ctx);
|
||
|
|
HT_API void * pps_get_tail_node(PPSN_CTX * pps_ctx);
|
||
|
|
HT_API void * pps_get_next_node(PPSN_CTX * pps_ctx, void * content_ptr);
|
||
|
|
HT_API void * pps_get_prev_node(PPSN_CTX * pps_ctx, void * content_ptr);
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#endif // PPSTACK_H
|
||
|
|
|
||
|
|
|