13597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu/* 22f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * list.h, list 330bd6062e4b295f5f7bcaeb98165065310d29269Ho-Eun Ryu * 42f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * Copyright (c) 2009-2010 Wind River Systems, Inc. 52f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * 62f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * Licensed under the Apache License, Version 2.0 (the "License"); 72f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * you may not use this file except in compliance with the License. 82f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * You may obtain a copy of the License at 92f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * 102f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * http://www.apache.org/licenses/LICENSE-2.0 112f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * 122f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * Unless required by applicable law or agreed to in writing, software 132f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * distributed under the License is distributed on an "AS IS" BASIS, 142f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 152f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * See the License for the specific language governing permissions and 162f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * limitations under the License. 173597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu */ 183597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu 193597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu#ifndef __LIST_H 203597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu#define __LIST_H 213597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu 223597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu#ifdef __cplusplus 233597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryuextern "C" { 243597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu#endif 253597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu 263597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryustruct list { 273597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu struct list *next; 283597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu struct list *prev; 293597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu 303597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu void *data; 313597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu}; 323597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu 333597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryuvoid __list_init(struct list *); 343597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu 353597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryustruct list *__list_alloc(void); 363597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryustruct list *list_alloc(void *); 373597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu 383597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryuvoid __list_free(struct list *); 393597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryuvoid list_free_all(struct list *); 403597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu 413597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryustruct list *__list_last(struct list *); 423597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryustruct list *__list_first(struct list *); 433597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryustruct list *__list_entry(struct list *, int); 443597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryuint list_length(struct list *); 453597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu 463597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryustruct list *__list_add_before(struct list *, struct list *); 473597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryustruct list *__list_add_after(struct list *, struct list *); 483597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryustruct list *__list_add_head(struct list *, struct list *); 493597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryustruct list *__list_add_tail(struct list *, struct list *); 503597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryustruct list *list_add_head(struct list *, void *); 513597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryustruct list *list_add_tail(struct list *, void *); 523597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu 533597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryustruct list *__list_remove(struct list *, struct list *); 543597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryustruct list *__list_delete(struct list *, struct list *); 553597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryustruct list *list_delete(struct list *, void *); 563597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryustruct list *list_delete_all(struct list *, void *); 573597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu 583597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryustruct list *list_find(struct list *, void *); 593597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryustruct list *list_find_reverse(struct list *, void *); 603597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu 613597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu#define __list_next(entry) ((entry) ? (entry->next) : NULL) 623597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu#define __list_prev(entry) ((entry) ? (entry->prev) : NULL) 633597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu 643597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu#define list_foreach(list, ptr) \ 653597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu for (ptr = list; \ 663597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu ptr != NULL; \ 673597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu ptr = __list_next(ptr)) 683597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu 693597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu#define list_foreach_safe(list, ptr, nxt) \ 703597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu for (ptr = list, nxt = __list_next(ptr); \ 713597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu ptr != NULL; \ 723597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu ptr = nxt, nxt = __list_next(ptr)) 733597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu 743597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu#define list_foreach_reverse(list, ptr) \ 753597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu for (ptr = __list_last(list); \ 763597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu ptr != NULL; \ 773597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu ptr = __list_prev(ptr)) 783597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu 793597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu#define list_foreach_reverse_safe(list, ptr, prv) \ 803597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu for (ptr = __list_last(list), prv = __list_prev(ptr); \ 813597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu ptr != NULL; \ 823597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu ptr = prv, prv = __list_prev(ptr)) 833597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu 843597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu#ifdef __cplusplus 853597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu} /* extern "C" */ 863597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu#endif 873597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu 883597788ce7c666b2e86df3932968f0745f4b7bd1Ho-Eun Ryu#endif /* __LIST_H */ 89