static inline void s_destroy(mccp_thread_t thd) { if (thd != NULL) { if (s_is_thd(thd) == true) { if (thd->m_wait_lock != NULL) { s_wait_lock(thd); { if (thd->m_op_lock != NULL) { (void)mccp_mutex_destroy(&(thd->m_op_lock)); } if (thd->m_cancel_lock != NULL) { (void)mccp_mutex_destroy(&(thd->m_cancel_lock)); } if (thd->m_wait_cond != NULL) { (void)mccp_cond_destroy(&(thd->m_wait_cond)); } if (thd->m_startup_cond != NULL) { (void)mccp_cond_destroy(&(thd->m_startup_cond)); } } s_wait_unlock(thd); (void)mccp_mutex_destroy(&(thd->m_wait_lock)); } s_delete(thd); } else { mccp_msg_error("Trying to delete a non-thread pointer (%p) " "as a thread.\n", (void *)thd); } } }
lagopus_result_t lagopus_hashmap_delete_no_lock(lagopus_hashmap_t *hmptr, void *key, void **valptr, bool free_value) { lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; if (hmptr != NULL && *hmptr != NULL) { ret = s_delete(hmptr, key, valptr, free_value); } else { ret = LAGOPUS_RESULT_INVALID_ARGS; } return ret; }
mccp_result_t mccp_hashmap_delete_no_lock(mccp_hashmap_t *hmptr, void *key, void **valptr, bool free_value) { mccp_result_t ret = MCCP_RESULT_ANY_FAILURES; if (hmptr != NULL && *hmptr != NULL) { ret = s_delete(hmptr, key, valptr, free_value); } else { ret = MCCP_RESULT_INVALID_ARGS; } return ret; }
int main(int argc, const char * argv[]) { // 头插法 SLIST singleLinkList0 = s_init(); for (int i = 0; i < 5; i++) { s_add(singleLinkList0, 0, i); } s_print(singleLinkList0); // 尾插法 SLIST singleLinkList = s_init(); SNODE* endNode = singleLinkList; for (int i = 0; i < 5; i++) { SNODE* node = (SNODE*)malloc(sizeof(SNODE)); node->data = i; endNode->next = node; endNode = node; singleLinkList->data++; } s_print(singleLinkList); s_add(singleLinkList, 3, 5); s_print(singleLinkList); printf("%d\n", s_get(singleLinkList, 3)); s_print(singleLinkList); s_delete(singleLinkList, 1); s_print(singleLinkList); s_clear(singleLinkList); s_print(singleLinkList); return 0; }