AtxList.h

00001 /*****************************************************************
00002 |
00003 |   Atomix - Linked Lists
00004 |
00005 |   (c) 2002-2006 Gilles Boccon-Gibod
00006 |   Author: Gilles Boccon-Gibod (bok@bok.net)
00007 |
00008  ****************************************************************/
00009 
00010 #ifndef _ATX_LIST_H_
00011 #define _ATX_LIST_H_
00012 
00013 /*----------------------------------------------------------------------
00014 |    includes
00015 +---------------------------------------------------------------------*/
00016 #include "AtxTypes.h"
00017 #include "AtxDefs.h"
00018 #include "AtxResults.h"
00019 #include "AtxUtils.h"
00020 #include "AtxInterfaces.h"
00021 
00022 /*----------------------------------------------------------------------
00023 |    types
00024 +---------------------------------------------------------------------*/
00025 typedef struct ATX_List ATX_List;
00026 typedef struct ATX_ListItem ATX_ListItem;
00027 
00028 typedef struct ATX_ListDataDestructor ATX_ListDataDestructor;
00029 typedef struct ATX_ListDataDestructorInstance ATX_ListDataDestructorInstance;
00030 struct ATX_ListDataDestructor {
00031     ATX_ListDataDestructorInstance* instance;
00032     void (*DestroyData)(ATX_ListDataDestructor* self, ATX_Any data, ATX_UInt32 type);
00033 };
00034 
00035 typedef struct ATX_ListDataPredicate ATX_ListDataPredicate;
00036 typedef struct ATX_ListDataPredicateInstance ATX_ListDataPredicateInstance;
00037 struct ATX_ListDataPredicate {
00038     ATX_ListDataPredicateInstance* instance;
00039     ATX_Boolean (*Evaluate)(const ATX_ListDataPredicate* self, ATX_Any data, ATX_UInt32 type);
00040 };
00041 
00042 /*----------------------------------------------------------------------
00043 |    constants
00044 +---------------------------------------------------------------------*/
00045 #define ATX_LIST_ITEM_TYPE_UNKNOWN 0
00046 
00047 /*----------------------------------------------------------------------
00048 |    prototypes
00049 +---------------------------------------------------------------------*/
00050 #ifdef __cplusplus
00051 extern "C" {
00052 #endif /* __cplusplus */
00053 
00054 ATX_Result    ATX_List_Create(ATX_List** list);
00055 ATX_Result    ATX_List_CreateEx(const ATX_ListDataDestructor* destructor, ATX_List** list);
00056 ATX_Result    ATX_List_Destroy(ATX_List* list);
00057 ATX_Result    ATX_List_Clear(ATX_List* list);
00058 ATX_ListItem* ATX_List_CreateItem(ATX_List* list);
00059 ATX_Result    ATX_List_AddData(ATX_List* list, ATX_Any data);
00060 ATX_Result    ATX_List_AddTypedData(ATX_List* list, ATX_Any data, ATX_UInt32 type);
00061 ATX_Result    ATX_List_AddItem(ATX_List* list, ATX_ListItem* item);
00062 ATX_Result    ATX_List_InsertData(ATX_List* list, ATX_ListItem* where, ATX_Any data);
00063 ATX_Result    ATX_List_InsertTypedData(ATX_List* list, ATX_ListItem* where, ATX_Any data, ATX_UInt32 type);
00064 ATX_Result    ATX_List_InsertItem(ATX_List* list, ATX_ListItem* where, ATX_ListItem* item);
00065 ATX_Result    ATX_List_RemoveData(ATX_List* list, ATX_Any data);
00066 ATX_Result    ATX_List_RemoveItem(ATX_List* list, ATX_ListItem* item);
00067 ATX_Result    ATX_List_DetachItem(ATX_List* list, ATX_ListItem* item);
00068 ATX_Cardinal  ATX_List_GetItemCount(ATX_List* list);
00069 ATX_ListItem* ATX_List_GetFirstItem(ATX_List* list);
00070 ATX_ListItem* ATX_List_GetLastItem(ATX_List* list);
00071 ATX_ListItem* ATX_List_GetItem(ATX_List* list, ATX_Ordinal indx);
00072 ATX_ListItem* ATX_List_FindData(ATX_List* list, ATX_Any data);
00073 ATX_ListItem* ATX_List_Find(ATX_List* list, const ATX_ListDataPredicate* predicate);
00074 
00075 ATX_Result    ATX_ListItem_Destroy(ATX_ListItem* item);
00076 ATX_Any       ATX_ListItem_GetData(ATX_ListItem* item);
00077 ATX_Result    ATX_ListItem_SetData(ATX_ListItem* item, ATX_Any data);
00078 ATX_UInt32    ATX_ListItem_GetType(ATX_ListItem* item);
00079 ATX_Result    ATX_ListItem_SetType(ATX_ListItem* item, ATX_UInt32 type);
00080 ATX_ListItem* ATX_ListItem_GetNext(ATX_ListItem* item);
00081 ATX_ListItem* ATX_ListItem_GetPrev(ATX_ListItem* item);
00082 
00083 #ifdef __cplusplus
00084 }
00085 #endif /* __cplusplus */
00086 
00087 #endif /* _ATX_LIST_H_ */