#ifndef _MODULE_ADT_LinkedList_
#define _MODULE_ADT_LinkedList_

#include <__typemap.h>
#include <RT0.oh>
#include <ADT/Storable.oh>
#include <Object.oh>
#include <IO.oh>
#include <RT0.oh>
#include <Object.oh>
#include <Exception.oh>
typedef struct ADT_LinkedList__EntryDesc *ADT_LinkedList__Entry;
typedef struct ADT_LinkedList__EntryDesc {
  ADT_LinkedList__Entry next;
  ADT_LinkedList__Entry previous;
  Object__Object element;
} ADT_LinkedList__EntryDesc;
typedef struct ADT_LinkedList__LinkedListDesc *ADT_LinkedList__LinkedList;
typedef struct ADT_LinkedList__LinkedListDesc {
  ADT_LinkedList__Entry elements;
  OOC_INT32 size;
} ADT_LinkedList__LinkedListDesc;
typedef struct ADT_LinkedList__IteratorDesc *ADT_LinkedList__Iterator;
typedef struct ADT_LinkedList__IteratorDesc {
  ADT_LinkedList__LinkedList list;
  ADT_LinkedList__Entry lastReturned;
  ADT_LinkedList__Entry next;
  OOC_INT32 nextIndex;
} ADT_LinkedList__IteratorDesc;
extern void ADT_LinkedList__Init(ADT_LinkedList__LinkedList l);
extern ADT_LinkedList__LinkedList ADT_LinkedList__New(void);
extern void ADT_LinkedList__LinkedListDesc_Destroy(ADT_LinkedList__LinkedList l);
#define _TBN_ADT_LinkedList__LinkedListDesc_Destroy 10
typedef void (*_TBP_ADT_LinkedList__LinkedListDesc_Destroy)(ADT_LinkedList__LinkedList l);
extern Object__Object ADT_LinkedList__LinkedListDesc_GetFirst(ADT_LinkedList__LinkedList l);
#define _TBN_ADT_LinkedList__LinkedListDesc_GetFirst 13
typedef Object__Object (*_TBP_ADT_LinkedList__LinkedListDesc_GetFirst)(ADT_LinkedList__LinkedList l);
extern Object__Object ADT_LinkedList__LinkedListDesc_GetLast(ADT_LinkedList__LinkedList l);
#define _TBN_ADT_LinkedList__LinkedListDesc_GetLast 15
typedef Object__Object (*_TBP_ADT_LinkedList__LinkedListDesc_GetLast)(ADT_LinkedList__LinkedList l);
extern void ADT_LinkedList__LinkedListDesc_RemoveEntry(ADT_LinkedList__LinkedList l, ADT_LinkedList__Entry e);
#define _TBN_ADT_LinkedList__LinkedListDesc_RemoveEntry 22
typedef void (*_TBP_ADT_LinkedList__LinkedListDesc_RemoveEntry)(ADT_LinkedList__LinkedList l, ADT_LinkedList__Entry e);
extern ADT_LinkedList__Entry ADT_LinkedList__LinkedListDesc_FindEntry(ADT_LinkedList__LinkedList l, OOC_INT32 index);
#define _TBN_ADT_LinkedList__LinkedListDesc_FindEntry 11
typedef ADT_LinkedList__Entry (*_TBP_ADT_LinkedList__LinkedListDesc_FindEntry)(ADT_LinkedList__LinkedList l, OOC_INT32 index);
extern Object__Object ADT_LinkedList__LinkedListDesc_RemoveFirst(ADT_LinkedList__LinkedList l);
#define _TBN_ADT_LinkedList__LinkedListDesc_RemoveFirst 23
typedef Object__Object (*_TBP_ADT_LinkedList__LinkedListDesc_RemoveFirst)(ADT_LinkedList__LinkedList l);
extern Object__Object ADT_LinkedList__LinkedListDesc_RemoveLast(ADT_LinkedList__LinkedList l);
#define _TBN_ADT_LinkedList__LinkedListDesc_RemoveLast 24
typedef Object__Object (*_TBP_ADT_LinkedList__LinkedListDesc_RemoveLast)(ADT_LinkedList__LinkedList l);
extern Object__Object ADT_LinkedList__LinkedListDesc_Remove(ADT_LinkedList__LinkedList l, OOC_INT32 index);
#define _TBN_ADT_LinkedList__LinkedListDesc_Remove 21
typedef Object__Object (*_TBP_ADT_LinkedList__LinkedListDesc_Remove)(ADT_LinkedList__LinkedList l, OOC_INT32 index);
extern void ADT_LinkedList__LinkedListDesc_RemoveRange(ADT_LinkedList__LinkedList l, OOC_INT32 fromIndex, OOC_INT32 toIndex);
#define _TBN_ADT_LinkedList__LinkedListDesc_RemoveRange 25
typedef void (*_TBP_ADT_LinkedList__LinkedListDesc_RemoveRange)(ADT_LinkedList__LinkedList l, OOC_INT32 fromIndex, OOC_INT32 toIndex);
extern void ADT_LinkedList__LinkedListDesc_AddBefore(ADT_LinkedList__LinkedList l, Object__Object element, ADT_LinkedList__Entry e);
#define _TBN_ADT_LinkedList__LinkedListDesc_AddBefore 5
typedef void (*_TBP_ADT_LinkedList__LinkedListDesc_AddBefore)(ADT_LinkedList__LinkedList l, Object__Object element, ADT_LinkedList__Entry e);
extern void ADT_LinkedList__LinkedListDesc_Prepend(ADT_LinkedList__LinkedList l, Object__Object obj);
#define _TBN_ADT_LinkedList__LinkedListDesc_Prepend 20
typedef void (*_TBP_ADT_LinkedList__LinkedListDesc_Prepend)(ADT_LinkedList__LinkedList l, Object__Object obj);
extern void ADT_LinkedList__LinkedListDesc_Append(ADT_LinkedList__LinkedList l, Object__Object obj);
#define _TBN_ADT_LinkedList__LinkedListDesc_Append 6
typedef void (*_TBP_ADT_LinkedList__LinkedListDesc_Append)(ADT_LinkedList__LinkedList l, Object__Object obj);
extern ADT_LinkedList__LinkedList ADT_LinkedList__LinkedListDesc_Copy(ADT_LinkedList__LinkedList l);
#define _TBN_ADT_LinkedList__LinkedListDesc_Copy 9
typedef ADT_LinkedList__LinkedList (*_TBP_ADT_LinkedList__LinkedListDesc_Copy)(ADT_LinkedList__LinkedList l);
extern void ADT_LinkedList__LinkedListDesc_Clear(ADT_LinkedList__LinkedList l);
#define _TBN_ADT_LinkedList__LinkedListDesc_Clear 7
typedef void (*_TBP_ADT_LinkedList__LinkedListDesc_Clear)(ADT_LinkedList__LinkedList l);
extern void ADT_LinkedList__LinkedListDesc_Insert(ADT_LinkedList__LinkedList l, OOC_INT32 index, Object__Object obj);
#define _TBN_ADT_LinkedList__LinkedListDesc_Insert 17
typedef void (*_TBP_ADT_LinkedList__LinkedListDesc_Insert)(ADT_LinkedList__LinkedList l, OOC_INT32 index, Object__Object obj);
extern Object__Object ADT_LinkedList__LinkedListDesc_Get(ADT_LinkedList__LinkedList l, OOC_INT32 index);
#define _TBN_ADT_LinkedList__LinkedListDesc_Get 12
typedef Object__Object (*_TBP_ADT_LinkedList__LinkedListDesc_Get)(ADT_LinkedList__LinkedList l, OOC_INT32 index);
extern void ADT_LinkedList__LinkedListDesc_Set(ADT_LinkedList__LinkedList l, OOC_INT32 index, Object__Object obj);
#define _TBN_ADT_LinkedList__LinkedListDesc_Set 26
typedef void (*_TBP_ADT_LinkedList__LinkedListDesc_Set)(ADT_LinkedList__LinkedList l, OOC_INT32 index, Object__Object obj);
extern OOC_INT32 ADT_LinkedList__LinkedListDesc_Size(ADT_LinkedList__LinkedList l);
#define _TBN_ADT_LinkedList__LinkedListDesc_Size 27
typedef OOC_INT32 (*_TBP_ADT_LinkedList__LinkedListDesc_Size)(ADT_LinkedList__LinkedList l);
extern OOC_CHAR8 ADT_LinkedList__LinkedListDesc_Contains(ADT_LinkedList__LinkedList l, Object__Object obj);
#define _TBN_ADT_LinkedList__LinkedListDesc_Contains 8
typedef OOC_CHAR8 (*_TBP_ADT_LinkedList__LinkedListDesc_Contains)(ADT_LinkedList__LinkedList l, Object__Object obj);
extern OOC_INT32 ADT_LinkedList__LinkedListDesc_IndexOf(ADT_LinkedList__LinkedList l, Object__Object obj);
#define _TBN_ADT_LinkedList__LinkedListDesc_IndexOf 16
typedef OOC_INT32 (*_TBP_ADT_LinkedList__LinkedListDesc_IndexOf)(ADT_LinkedList__LinkedList l, Object__Object obj);
extern OOC_INT32 ADT_LinkedList__LinkedListDesc_LastIndexOf(ADT_LinkedList__LinkedList l, Object__Object obj);
#define _TBN_ADT_LinkedList__LinkedListDesc_LastIndexOf 19
typedef OOC_INT32 (*_TBP_ADT_LinkedList__LinkedListDesc_LastIndexOf)(ADT_LinkedList__LinkedList l, Object__Object obj);
extern OOC_CHAR8 ADT_LinkedList__LinkedListDesc_IsEmpty(ADT_LinkedList__LinkedList l);
#define _TBN_ADT_LinkedList__LinkedListDesc_IsEmpty 18
typedef OOC_CHAR8 (*_TBP_ADT_LinkedList__LinkedListDesc_IsEmpty)(ADT_LinkedList__LinkedList l);
extern OOC_CHAR8 ADT_LinkedList__LinkedListDesc_Equals(ADT_LinkedList__LinkedList l, Object__Object obj);
#define _TBN_ADT_LinkedList__LinkedListDesc_Equals 0
typedef OOC_CHAR8 (*_TBP_ADT_LinkedList__LinkedListDesc_Equals)(ADT_LinkedList__LinkedList l, Object__Object obj);
extern OOC_INT32 ADT_LinkedList__LinkedListDesc_HashCode(ADT_LinkedList__LinkedList l);
#define _TBN_ADT_LinkedList__LinkedListDesc_HashCode 1
typedef OOC_INT32 (*_TBP_ADT_LinkedList__LinkedListDesc_HashCode)(ADT_LinkedList__LinkedList l);
extern void ADT_LinkedList__LinkedListDesc_Store(ADT_LinkedList__LinkedList l, ADT_Storable__Writer w);
#define _TBN_ADT_LinkedList__LinkedListDesc_Store 4
typedef void (*_TBP_ADT_LinkedList__LinkedListDesc_Store)(ADT_LinkedList__LinkedList l, ADT_Storable__Writer w);
extern void ADT_LinkedList__LinkedListDesc_Load(ADT_LinkedList__LinkedList l, ADT_Storable__Reader r);
#define _TBN_ADT_LinkedList__LinkedListDesc_Load 3
typedef void (*_TBP_ADT_LinkedList__LinkedListDesc_Load)(ADT_LinkedList__LinkedList l, ADT_Storable__Reader r);
extern ADT_LinkedList__Iterator ADT_LinkedList__LinkedListDesc_GetIterator(ADT_LinkedList__LinkedList l, ADT_LinkedList__Iterator i);
#define _TBN_ADT_LinkedList__LinkedListDesc_GetIterator 14
typedef ADT_LinkedList__Iterator (*_TBP_ADT_LinkedList__LinkedListDesc_GetIterator)(ADT_LinkedList__LinkedList l, ADT_LinkedList__Iterator i);
extern OOC_CHAR8 ADT_LinkedList__IteratorDesc_HasNext(ADT_LinkedList__Iterator i);
#define _TBN_ADT_LinkedList__IteratorDesc_HasNext 0
typedef OOC_CHAR8 (*_TBP_ADT_LinkedList__IteratorDesc_HasNext)(ADT_LinkedList__Iterator i);
extern Object__Object ADT_LinkedList__IteratorDesc_Next(ADT_LinkedList__Iterator i);
#define _TBN_ADT_LinkedList__IteratorDesc_Next 2
typedef Object__Object (*_TBP_ADT_LinkedList__IteratorDesc_Next)(ADT_LinkedList__Iterator i);
extern OOC_INT32 ADT_LinkedList__IteratorDesc_NextIndex(ADT_LinkedList__Iterator i);
#define _TBN_ADT_LinkedList__IteratorDesc_NextIndex 3
typedef OOC_INT32 (*_TBP_ADT_LinkedList__IteratorDesc_NextIndex)(ADT_LinkedList__Iterator i);
extern void ADT_LinkedList__IteratorDesc_Remove(ADT_LinkedList__Iterator i);
#define _TBN_ADT_LinkedList__IteratorDesc_Remove 4
typedef void (*_TBP_ADT_LinkedList__IteratorDesc_Remove)(ADT_LinkedList__Iterator i);
extern void ADT_LinkedList__IteratorDesc_Set(ADT_LinkedList__Iterator i, Object__Object obj);
#define _TBN_ADT_LinkedList__IteratorDesc_Set 5
typedef void (*_TBP_ADT_LinkedList__IteratorDesc_Set)(ADT_LinkedList__Iterator i, Object__Object obj);
extern void ADT_LinkedList__IteratorDesc_Insert(ADT_LinkedList__Iterator i, Object__Object obj);
#define _TBN_ADT_LinkedList__IteratorDesc_Insert 1
typedef void (*_TBP_ADT_LinkedList__IteratorDesc_Insert)(ADT_LinkedList__Iterator i, Object__Object obj);
extern void OOC_ADT_LinkedList_init(void);
extern void OOC_ADT_LinkedList_init0(void);

/* run-time meta data */
extern RT0__StructDesc _td_ADT_LinkedList__Entry;
extern RT0__StructDesc _td_ADT_LinkedList__EntryDesc;
extern RT0__StructDesc _td_ADT_LinkedList__LinkedList;
extern RT0__StructDesc _td_ADT_LinkedList__LinkedListDesc;
extern RT0__StructDesc _td_ADT_LinkedList__Iterator;
extern RT0__StructDesc _td_ADT_LinkedList__IteratorDesc;
#endif /* _MODULE_ADT_LinkedList_ */

/* --- */
