00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef _ATX_LIST_H_
00011 #define _ATX_LIST_H_
00012
00013
00014
00015
00016 #include "AtxTypes.h"
00017 #include "AtxDefs.h"
00018 #include "AtxResults.h"
00019 #include "AtxUtils.h"
00020 #include "AtxInterfaces.h"
00021
00022
00023
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
00044
00045 #define ATX_LIST_ITEM_TYPE_UNKNOWN 0
00046
00047
00048
00049
00050 #ifdef __cplusplus
00051 extern "C" {
00052 #endif
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
00086
00087 #endif