Files

111 lines
4.5 KiB
C
Raw Permalink Normal View History

2026-03-28 11:39:04 +11:00
/***************************************************************************************
*
* 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