From e6e3a97b4702d777f2e7a62fb2b42d2d6ddd5975 Mon Sep 17 00:00:00 2001 From: yeoncheol-kim Date: Tue, 26 Nov 2024 11:47:53 +0900 Subject: [PATCH] DOC: Modify examples for the list document --- docs/04-list-API.md | 413 ++++++++++++++++++++++++-------------------- 1 file changed, 224 insertions(+), 189 deletions(-) diff --git a/docs/04-list-API.md b/docs/04-list-API.md index df04e78a..60abb830 100644 --- a/docs/04-list-API.md +++ b/docs/04-list-API.md @@ -22,10 +22,9 @@ List item에 대해 수행 가능한 기본 연산들은 아래와 같다. ## List Item 생성 - 새로운 empty list item을 생성한다. -``` c +```c memcached_return_t memcached_lop_create(memcached_st *ptr, const char *key, size_t key_length, @@ -42,31 +41,29 @@ Response code는 아래와 같다. - not MEMCACHED_SUCCESS - MEMCACHED_EXISTS: 동일한 key를 가진 List가 이미 존재함. -List item을 생성하는 예제는 아래와 같다. +List item을 생성하는 예시는 아래와 같다. -``` c -void arcus_list_item_create(memcached_st *memc) +```c +int arcus_list_item_create(memcached_st *memc) { - memcached_return_t rc; - - uint32_t flags= 10; - uint32_t exptime= 600; - uint32_t maxcount= 1000; - - memcached_coll_create_attrs_st attributes; - memcached_coll_create_attrs_init(&attributes, flags, exptime, maxcount); - - // 비어있는 리스트를 생성한다. - rc= memcached_lop_create(memc, "list:an_empty_list", strlen("list:an_empty_list"), - &attributes); - assert(MEMCACHED_SUCCESS == rc); - assert(MEMCACHED_CREATED == memcached_get_last_response_code(memc)); - - // 리스트가 이미 존재한다면 실패한다. - rc= memcached_lop_create(memc, "list:an_empty_list", strlen("list:an_empty_list"), - &attributes); - assert(MEMCACHED_SUCCESS != rc); - assert(MEMCACHED_EXISTS == memcached_get_last_response_code(memc)); + const char *key= "list:a_key"; + uint32_t flags= 0; + uint32_t exptime= 600; + uint32_t maxcount= 1000; + memcached_return_t rc; + + memcached_coll_create_attrs_st attributes; + memcached_coll_create_attrs_init(&attributes, flags, exptime, maxcount); + + rc= memcached_lop_create(memc, key, strlen(key), &attributes); + if (memcached_failed(rc)) { + fprintf(stderr, "Failed to memcached_lop_create: %d(%s)\n", rc, memcached_strerror(memc, rc)); + return -1; + } + + assert(rc == MEMCACHED_SUCCESS); + assert(memcached_get_last_response_code(memc) == MEMCACHED_CREATED); + return 0; } ``` @@ -75,7 +72,7 @@ void arcus_list_item_create(memcached_st *memc) List에 하나의 element를 삽입하는 함수이다. -``` c +```c memcached_return_t memcached_lop_insert(memcached_st *ptr, const char *key, size_t key_length, @@ -102,42 +99,33 @@ Response code는 아래와 같다. - MEMCACHED_OVERFLOWED: Overflow 상태임. (overflowaction=error, maxcount=count) - MEMCACHED_OUT_OF_RANGE: 삽입 위치가 List의 element index 범위를 넘어섬. -List element를 삽입하는 예제는 아래와 같다. +List element를 삽입하는 예시는 아래와 같다. -``` c -void arcus_list_element_insert(memcached_st *memc) +```c +int arcus_list_element_insert(memcached_st *memc) { - memcached_return_t rc; - - uint32_t flags= 10; - uint32_t exptime= 600; - uint32_t maxcount= 1000; - - memcached_coll_create_attrs_st attributes; - memcached_coll_create_attrs_init(&attributes, flags, exptime, maxcount); - - int index= 0; - - // 1. CREATED_STORED - index= 0; - rc= memcached_lop_insert(memc, "a_list", strlen("a_list"), index, - "value", strlen("value"), &attributes); - assert(MEMCACHED_SUCCESS == rc); - assert(MEMCACHED_CREATED_STORED == memcached_get_last_response_code(memc)); - - // 2. STORED - index= 1; - rc= memcached_lop_insert(memc, "a_list", strlen("a_list"), index, - "value", strlen("value"), &attributes); - assert(MEMCACHED_SUCCESS == rc); - assert(MEMCACHED_STORED == memcached_get_last_response_code(memc)); - - // 3. OUT_OF_RANGE - index= 10; - rc= memcached_lop_insert(memc, "a_list", strlen("a_list"), index, - "value", strlen("value"), &attributes); - assert(MEMCACHED_SUCCESS != rc); - assert(MEMCACHED_OUT_OF_RANGE == rc); + const char *key= "list:a_key"; + const char *value= "value"; + const int32_t index= -1; + memcached_return_t rc; + + uint32_t flags= 0; + uint32_t exptime= 600; + uint32_t maxcount= 1000; + + memcached_coll_create_attrs_st attributes; + memcached_coll_create_attrs_init(&attributes, flags, exptime, maxcount); + + rc= memcached_lop_insert(memc, key, strlen(key), index, value, strlen(value), &attributes); + if (memcached_failed(rc)) { + fprintf(stderr, "Failed to memcached_lop_insert: %d(%s)\n", rc, memcached_strerror(memc, rc)); + return -1; + } + + memcached_return_t last_response= memcached_get_last_response_code(memc); + assert(rc == MEMCACHED_SUCCESS); + assert(last_response == MEMCACHED_STORED || last_response == MEMCACHED_CREATED_STORED); + return 0; } ``` @@ -147,7 +135,7 @@ List element를 삭제하는 함수는 두 가지가 있다. 첫째, 하나의 list index로 하나의 element만 삭제하는 함수이다. -``` c +```c memcached_return_t memcached_lop_delete(memcached_st *ptr, const char *key, size_t key_length, @@ -161,7 +149,7 @@ memcached_lop_delete(memcached_st *ptr, 둘째, list index range로 다수의 elements를 삭제하는 함수이다. -``` c +```c memcached_return_t memcached_lop_delete_by_range(memcached_st *ptr, const char *key, size_t key_length, @@ -185,38 +173,29 @@ Response code는 아래와 같다. - MEMCACHED_TYPE_MISMATCH: 주어진 key에 해당하는 자료구조가 List가 아님. -List element를 삭제하는 예제는 아래와 같다. +List element를 삭제하는 예시는 아래와 같다. -``` c -void arcus_list_element_delete(memcached_st *memc) +```c +int arcus_list_element_delete(memcached_st *memc) { - uint32_t flags= 10; - uint32_t exptime= 600; - uint32_t maxcount= 1000; - - memcached_coll_create_attrs_st attributes; - memcached_coll_create_attrs_init(&attributes, flags, exptime, maxcount); - - memcached_return_t rc; - - // 테스트 데이터를 삽입한다. - rc= memcached_lop_insert(memc, "list:a_list", strlen("list:a_list"), -1, - "value", strlen("value"), &attributes); - assert(MEMCACHED_SUCCESS == rc); - - rc= memcached_lop_insert(memc, "list:a_list", strlen("list:a_list"), -1, - "value", strlen("value"), &attributes); - assert(MEMCACHED_SUCCESS == rc); - - // 1번 인덱스의 element를 삭제한다. - rc= memcached_lop_delete(memc, "list:a_list", strlen("list:a_list"), 1, true); - assert(MEMCACHED_SUCCESS == rc); - assert(MEMCACHED_DELETED == memcached_get_last_response_code(memc)); - - // 0번 인덱스의 element를 삭제하고, empty 상태가 된 리스트를 삭제한다. - rc= memcached_lop_delete(memc, "list:a_list", strlen("list:a_list"), 0, true); - assert(MEMCACHED_SUCCESS == rc); - assert(MEMCACHED_DELETED_DROPPED == memcached_get_last_response_code(memc)); + const char *key="list:a_key"; + const int32_t index= 0; + // const int32_t from= 0, to= -1; + bool drop_if_empty = false; + + memcached_return_t rc; + + rc= memcached_lop_delete(memc, key, strlen(key), index, drop_if_empty); + // rc= memcached_lop_delete_by_range(memc, key, strlen(key), from, to, drop_if_empty); + if (memcached_failed(rc)) { + fprintf(stderr, "Failed to memcached_lop_delete: %d(%s)\n", rc, memcached_strerror(memc, rc)); + return -1; + } + + memcached_return_t last_response= memcached_get_last_response_code(memc); + assert(rc == MEMCACHED_SUCCESS); + assert(last_response == MEMCACHED_DELETED || last_response == MEMCACHED_DELETED_DROPPED); + return 0; } ``` @@ -226,7 +205,7 @@ List element를 조회하는 함수는 두 가지가 있다. 첫째, 하나의 list index로 하나의 element만 조회하는 함수이다. -``` c +```c memcached_return_t memcached_lop_get(memcached_st *ptr, const char *key, size_t key_length, @@ -244,7 +223,7 @@ memcached_lop_get(memcached_st *ptr, 둘째, list index range로 다수의 elements를 조회하는 함수이다. -``` c +```c memcached_return_t memcached_lop_get_by_range(memcached_st *ptr, const char *key, size_t key_length, @@ -275,8 +254,7 @@ Response code는 아래와 같다. 조회 결과는 memcached_coll_result_t 구조체에 저장된다. 조회 결과에 접근하기 위한 API는 다음과 같다. - -``` c +```c memcached_coll_result_st * memcached_coll_result_create(const memcached_st *ptr, memcached_coll_result_st *result) void @@ -294,56 +272,52 @@ size_t memcached_coll_result_get_value_length(memcached_coll_result_st *result, size_t index) ``` -List element를 조회하는 예제는 아래와 같다. - -``` c -void arcus_list_element_get(memcached_st *memc) -{ - uint32_t flags= 10; - uint32_t exptime= 600; - uint32_t maxcount= 1000; - - memcached_coll_create_attrs_st attributes; - memcached_coll_create_attrs_init(&attributes, flags, exptime, maxcount); - memcached_return_t rc; - memcached_coll_result_st *result; - - for (uint32_t i=0; i