pick up wakaama files from https://github.com/eclipse/wakaama
core/list.c
- Committer:
- terencez
- Date:
- 2017-04-19
- Revision:
- 0:c2dff8cbb91a
File content as of revision 0:c2dff8cbb91a:
/******************************************************************************* * * Copyright (c) 2013 Intel Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v1.0 which accompany this distribution. * * The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html * The Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * David Navarro, Intel Corporation - initial API and implementation * *******************************************************************************/ #include "internals.h" lwm2m_list_t * lwm2m_list_add(lwm2m_list_t * head, lwm2m_list_t * node) { lwm2m_list_t * target; if (NULL == head) return node; if (head->id > node->id) { node->next = head; return node; } target = head; while (NULL != target->next && target->next->id < node->id) { target = target->next; } node->next = target->next; target->next = node; return head; } lwm2m_list_t * lwm2m_list_find(lwm2m_list_t * head, uint16_t id) { while (NULL != head && head->id < id) { head = head->next; } if (NULL != head && head->id == id) return head; return NULL; } lwm2m_list_t * lwm2m_list_remove(lwm2m_list_t * head, uint16_t id, lwm2m_list_t ** nodeP) { lwm2m_list_t * target; if (head == NULL) { if (nodeP) *nodeP = NULL; return NULL; } if (head->id == id) { if (nodeP) *nodeP = head; return head->next; } target = head; while (NULL != target->next && target->next->id < id) { target = target->next; } if (NULL != target->next && target->next->id == id) { if (nodeP) *nodeP = target->next; target->next = target->next->next; } else { if (nodeP) *nodeP = NULL; } return head; } uint16_t lwm2m_list_newId(lwm2m_list_t * head) { uint16_t id; lwm2m_list_t * target; id = 0; target = head; while (target != NULL && id == target->id) { id = target->id + 1; target = target->next; } return id; } void lwm2m_list_free(lwm2m_list_t * head) { if (head != NULL) { lwm2m_list_t * nextP; nextP = head->next; lwm2m_free(head); lwm2m_list_free(nextP); } }