glist 기반 링크 데이터 구조 사용자 정의
5550 단어 Others
그러나 데이터 구 조 는 노출 되 고 싶 지 않 기 때문에 필요 한 데이터 구조의 처 리 를 모두 API 로 밀봉 하여 호출 자 에 게 제공 해 야 한다.
=======================================================================
/* Define EXPORT_API */
#ifndef EXPORT_API
#define EXPORT_API __attribute__((visibility("default")))
#endif
EXPORT_API
int test_record_create(test_record_h *record)
{
IFRET_VM(NULL == record, -1, "record is NULL");
test_record *data = calloc(1, sizeof(test_record));
IFRET_VM(NULL == data, -1, "calloc() Fail");
data->date = NULL;
data->key = NULL;
data->value = NULL;
*record = (test_record_h)data;
return 0;
}
EXPORT_API
int test_record_destroy(test_record_h record)
{
test_record *data = (test_record *)record;
IFRET_VM(NULL == data, -1, "data is NULL");
g_free(data->key);
data->key = NULL;
g_free(data->value);
data->value = NULL;
g_free(data->date);
data->date = NULL;
g_free(data);
return 0;
}
EXPORT_API
int test_list_create(test_list_h *record_list)
{
test_list *list_s = NULL;
IFRET_VM(NULL == record_list, -1, "record_list is NULL");
*record_list = NULL;
list_s = calloc(1, sizeof(test_list));
IFRET_VM(NULL == list_s, -1, "calloc() Fail");
*record_list = (test_list_h)list_s;
return 0;
}
EXPORT_API
int test_list_destroy(test_list_h record_list)
{
test_list *s_list = NULL;
GList *cursor = NULL;
IFRET_VM(NULL == record_list, -1, "record_list is NULL");
s_list = (test_list*)record_list;
for (cursor = s_list->records; cursor; cursor = cursor->next)
test_record_destroy((test_record_h)(cursor->data));
g_list_free(s_list->records);
g_free(s_list);
return 0;
}
EXPORT_API
int test_record_set_key(test_record_h record, const char *key)
{
test_record *data = (test_record *)record;
IFRET_VM(NULL == data, -1, "data is NULL");
IFRET_VM(NULL == key, -1, "key is NULL");
data->key = g_strdup(key);
return 0;
}
EXPORT_API
int test_record_get_key(test_record_h record, char **key)
{
test_error_e 0 = 0;
test_record *data = (test_record *)record;
IFRET_VM(NULL == data, -1, "data is NULL");
IFRET_VM(NULL == key, -1, "key is NULL");
*key = data->key;
return 0;
}
EXPORT_API
int test_list_add(test_list_h record_list, test_record_h record)
{
test_list *s_list = NULL;
test_record *s_record = NULL;
IFRET_VM(NULL == record_list || NULL == record, -1, "record_list is NULL");
s_list = (test_list*)record_list;
s_record = (test_record*)record;
s_list->records = g_list_append(s_list->records, s_record);
if (s_list->count == 0) {
s_list->cursor = s_list->records;
}
s_list->count++;
return 0;
}
EXPORT_API
int test_list_remove(test_list_h record_list, test_record_h record)
{
GList *cursor = NULL;
test_list *s_list = NULL;
test_record *s_record = NULL;
IFRET_VM(NULL == record_list || NULL == record, -1, "record_list is NULL");
s_list = (test_list*)record_list;
s_record = (test_record*)record;
for (cursor = s_list->records; cursor; cursor = cursor->next) {
test_record *data = cursor->data;
if (data == s_record) {
s_list->count--;
if (s_list->cursor == cursor) {
s_list->cursor = cursor->next;
}
s_list->records = g_list_remove(s_list->records, s_record);
return 0;
}
}
return 0;
}
EXPORT_API
int test_list_get_record_count(test_list_h record_list, int *count)
{
test_error_e 0 = 0;
test_list *list_s = NULL;
IFRET_VM(NULL == count, -1, "count is NULL");
*count = 0;
IFRET_VM(NULL == record_list, -1, "record_list is NULL");
list_s = (test_list*)record_list;
*count = list_s->count;
return 0;
}
EXPORT_API
int test_list_get_current_record(test_list_h record_list, test_record_h *record)
{
test_error_e 0 = 0;
test_list *list_s = NULL;
IFRET_VM(NULL == record, -1, "record is NULL");
*record = NULL;
IFRET_VM(NULL == record_list || NULL == record, -1, "record_list is NULL");
list_s = (test_list*)record_list;
if (NULL == list_s->cursor) {
*record = NULL;
return -2;
}
*record = list_s->cursor->data;
return 0;
}
EXPORT_API
int test_list_move_to_first(test_list_h record_list)
{
test_error_e 0 = 0;
test_list *list_s = NULL;
IFRET_VM(NULL == record_list, -1, "record_list is NULL");
list_s = (test_list*)record_list;
list_s->cursor = list_s->records;
if (NULL == list_s->cursor) {
return -2;
}
return 0;
}
EXPORT_API
int test_list_move_to_last(test_list_h record_list)
{
test_error_e 0 = 0;
test_list *list_s;
IFRET_VM(NULL == record_list, -1, "record_list is NULL");
list_s = (test_list*)record_list;
list_s->cursor = g_list_last(list_s->records);
if (NULL == list_s->cursor) {
return -2;
}
return 0;
}
static int __sc_list_move_cursor(test_list_h list, bool next)
{
test_list *list_s;
IFRET_VM(NULL == list, -1, "record_list is NULL");
list_s = (test_list*)list;
if (NULL == list_s->cursor)
return -2;
list_s->cursor = next ? list_s->cursor->next : list_s->cursor->prev ;
if (NULL == list_s->cursor)
return -2;
return 0;
}
EXPORT_API
int test_list_move_to_next(test_list_h record_list)
{
return __sc_list_move_cursor(record_list, true);
}
EXPORT_API
int test_list_move_to_prev(test_list_h record_list)
{
return __sc_list_move_cursor(record_list, false);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
sudo yum install epel-release기본적으로 Centos 7 에는 Nginx 의 원본 이 없습니다. 최근 Nginx 홈 페이지 에서 Centos 의 원본 주 소 를 제공 한 것 을 발 견 했 습 니 다.따라서 다음 명령 을 실행 하여 원본 을 추가 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.