/*#io
Sequence ioDoc(
docCopyright("Steve Dekorte", 2002)
docLicense("BSD revised")
*/
#ifndef IOSEQ_DEFINED
#define IOSEQ_DEFINED 1
#include "IoVMApi.h"
#include "Common.h"
#include "ByteArray.h"
#include "IoObject_struct.h"
#include "IoMessage.h"
#ifdef __cplusplus
extern "C" {
#endif
IOVM_API int ISMUTABLESEQ(IoObject *self);
#define IOSEQ(data, size) IoSeq_newWithData_length_((IoState*)IOSTATE, data, size)
#define IOSEQ_LENGTH(self) ByteArray_size((ByteArray *)(IoObject_dataPointer(self)))
#define IOSEQ_BYTES(self) ByteArray_bytes((ByteArray *)(IoObject_dataPointer(self)))
#define ISSEQ(self) IoObject_hasCloneFunc_(self, (TagCloneFunc *)IoSeq_rawClone)
#define WHITESPACE " \t\n\r"
// Symbol defines
#define IOSYMBOL(s) IoState_symbolWithCString_((IoState*)IOSTATE, (char *)(s))
#define IOSYMBOLID(s) (IoObject_dataPointer(self))
#define CSTRING(uString) IoSeq_asCString(uString)
#define ISSYMBOL(self) (self->isSymbol)
#define ISBUFFER(self) ISMUTABLESEQ(self)
#if !defined(IoSymbol_DEFINED)
#define IoSymbol_DEFINED
typedef IoObject IoSymbol;
typedef IoObject IoSeq;
#endif
//#define IOSYMBOL_HASHCODE(self) ((unsigned int)(self->extraData))
#define IOSYMBOL_LENGTH(self) ByteArray_size(((ByteArray *)(IoObject_dataPointer(self))))
#define IOSYMBOL_BYTES(self) ByteArray_bytes(((ByteArray *)(IoObject_dataPointer(self))))
typedef IoObject *(IoSplitFunction)(void *, ByteArray *, int);
typedef IoObject IoSeq;
IOVM_API int ioSeqCompareFunc(void *s1, void *s2);
IOVM_API int ioSymbolFindFunc(void *s, void *ioSymbol);
IOVM_API int IoObject_isStringOrBuffer(IoObject *self);
IOVM_API int IoObject_isNotStringOrBuffer(IoObject *self);
IOVM_API IoSeq *IoSeq_proto(void *state);
IOVM_API IoSeq *IoSeq_protoFinish(IoSeq *self);
IOVM_API IoSeq *IoSeq_rawClone(IoSeq *self);
IOVM_API IoSeq *IoSeq_new(void *state);
IOVM_API IoSeq *IoSeq_newWithByteArray_copy_(void *state, ByteArray *ba, int copy);
IOVM_API IoSeq *IoSeq_newWithData_length_(void *state, const unsigned char *s, size_t length);
IOVM_API IoSeq *IoSeq_newWithDatum_(void *state, Datum *d);
IOVM_API IoSeq *IoSeq_newWithCString_length_(void *state, const char *s, size_t length);
IOVM_API IoSeq *IoSeq_newWithCString_(void *state, const char *s);
IOVM_API IoSeq *IoSeq_newFromFilePath_(void *state, const char *path);
IOVM_API IoSeq *IoSeq_rawMutableCopy(IoSeq *self);
// these Symbol creation methods should only be called by IoState
IOVM_API IoSymbol *IoSeq_newSymbolWithCString_(void *state, const char *s);
IOVM_API IoSymbol *IoSeq_newSymbolWithData_length_(void *state, const char *s, size_t length);
IOVM_API IoSymbol *IoSeq_newSymbolWithByteArray_copy_(void *state, ByteArray *ba, int copy);
// these Symbol creation methods can be called by anyone
IOVM_API IoSymbol *IoSeq_newSymbolWithFormat_(void *state, const char *format, ...);
//
IOVM_API void IoSeq_free(IoSeq *self);
IOVM_API int IoSeq_compare(IoSeq *self, IoSeq *v);
IOVM_API char *IoSeq_asCString(IoSeq *self);
IOVM_API unsigned char *IoSeq_rawBytes(IoSeq *self);
IOVM_API ByteArray *IoSeq_rawByteArray(IoSeq *self);
IOVM_API size_t IoSeq_rawSize(IoSeq *self);
IOVM_API size_t IoSeq_rawSizeInBytes(IoSeq *self);
IOVM_API void IoSeq_rawSetSize_(IoSeq *self, size_t size);
IOVM_API void IoSeq_setIsSymbol_(IoSeq *self, int i);
// conversion
IOVM_API double IoSeq_asDouble(IoSeq *self);
IOVM_API Datum IoSeq_asDatum(IoSeq *self);
IOVM_API IoSymbol *IoSeq_rawAsSymbol(IoSeq *self);
IOVM_API IoSymbol *IoSeq_rawAsUnquotedSymbol(IoObject *self);
IOVM_API IoSymbol *IoSeq_rawAsUnescapedSymbol(IoObject *self);
IOVM_API int IoSeq_rawEqualsCString_(IoObject *self, const char *s);
IOVM_API double IoSeq_rawAsDoubleFromHex(IoObject *self);
IOVM_API double IoSeq_rawAsDoubleFromOctal(IoObject *self);
#include "IoSeq_immutable.h"
#include "IoSeq_mutable.h"
#include "IoSeq_inline.h"
#ifdef __cplusplus
}
#endif
#endif
syntax highlighted by Code2HTML, v. 0.9.1