/*#io
docCopyright("Steve Dekorte", 2002)
docLicense("BSD revised")
*/

#ifndef IoMap_DEFINED
#define IoMap_DEFINED 1

#include "Common.h"
#include "IoObject.h"
#include "IoList.h"
#include "Hash.h"

#ifdef __cplusplus
extern "C" {
#endif

#define ISMAP(self) IoObject_hasCloneFunc_(self, (TagCloneFunc *)IoMap_rawClone)

typedef IoObject IoMap;

IoMap *IoMap_proto(void *state);
IoMap *IoMap_rawClone(IoMap *self);
IoMap *IoMap_new(void *state);
void IoMap_free(IoMap *self);
void IoMap_mark(IoMap *self);
Hash *IoMap_rawHash(IoMap *self);

void IoMap_writeToStore_stream_(IoMap *self, IoStore *store, BStream *stream);
void IoMap_readFromStore_stream_(IoMap *self, IoStore *store, BStream *stream);

// ----------------------------------------------------------- 

IoObject *IoMap_empty(IoMap *self, IoObject *locals, IoMessage *m);

IoObject *IoMap_rawAt(IoMap *self, IoSymbol *k);
IoObject *IoMap_at(IoMap *self, IoObject *locals, IoMessage *m);

void IoMap_rawAtPut(IoMap *self, IoSymbol *k, IoObject *v);
IoObject *IoMap_atPut(IoMap *self, IoObject *locals, IoMessage *m);
IoObject *IoMap_atIfAbsentPut(IoMap *self, IoObject *locals, IoMessage *m);
IoObject *IoMap_removeAt(IoMap *self, IoObject *locals, IoMessage *m);
IoObject *IoMap_size(IoMap *self, IoObject *locals, IoMessage *m);

IoObject *IoMap_hasKey(IoMap *self, IoObject *locals, IoMessage *m);
IoObject *IoMap_hasValue(IoMap *self, IoObject *locals, IoMessage *m);

IoList *IoMap_rawKeys(IoMap *self);
IoObject *IoMap_keys(IoMap *self, IoObject *locals, IoMessage *m);

IoObject *IoMap_values(IoMap *self, IoObject *locals, IoMessage *m);
IoObject *IoMap_foreach(IoMap *self, IoObject *locals, IoMessage *m);

#ifdef __cplusplus
}
#endif
#endif


syntax highlighted by Code2HTML, v. 0.9.1