00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef TERMREADER_H
00022 #define TERMREADER_H
00023
00024 #include "libicl.h"
00025 #include "glib.h"
00026
00027 #ifdef NORMAL_GC
00028 #undef CHECK_LEAKS
00029 #include <gc/leak_detector.h>
00030 #undef strdup
00031 EXTERN char* gc_strdup(char*s);
00032 #define strdup(s) gc_strdup(s)
00033 #else
00034 #define CHECK_LEAKS()
00035 #endif
00036
00037 #ifdef __cplusplus
00038 extern "C" {
00039 #endif
00040
00041 struct TermReaderStruct;
00042 typedef struct TermReaderStruct TermReader;
00043
00044 typedef ICLTerm* (*TermReaderGetNext)(TermReader*, double);
00045 typedef void (*TermReaderCleanup)(TermReader*);
00046
00047 enum TermReaderTypeEnum {
00048 UNKNOWNTERMREADERTYPE = -1,
00049 STRINGTERMREADERTYPE = 0,
00050 BINARYTERMREADERTYPE = 1,
00051 FILETERMREADERTYPE = 2
00052 }
00053 ;
00054 typedef enum TermReaderTypeEnum TermReaderType;
00055
00056 enum TermReaderErrorNum {
00057 TERMREADER_BINUNREACHABLE = -106,
00058 TERMREADER_BINNOTENOUGHARGS = -105,
00059 TERMREADER_BINBADICLSTRUCT = -104,
00060 TERMREADER_BINBADICLSTR = -103,
00061 TERMREADER_BINBADICLVAR = -102,
00062 TERMREADER_BINUNEXPECTEDTYPE = -101,
00063 TERMREADER_BINUNEXPECTEDSENTINEL = -100,
00064
00065 TERMREADER_NOTINITIALIZED = -3,
00066 TERMREADER_READERR = -2,
00067 TERMREADER_SELECTERR = -1,
00068
00069 TERMREADER_OKAY = 0,
00070
00071 TERMREADER_TIMEOUT = 1,
00072 TERMREADER_NOCONN = 2,
00073 TERMREADER_EOF = 3,
00074 TERMREADER_BINNOTENOUGHDATA = 100
00075 }
00076 ;
00077
00078 EXTERN TermReader* termReader_create();
00079 EXTERN void termReader_free(TermReader* t);
00080
00081 EXTERN void termReader_setError(TermReader* t, gint errnum);
00082 EXTERN gint termReader_getError(TermReader* t);
00083 EXTERN void termReader_setSocket(TermReader* t, gint newsocket);
00084 EXTERN gint termReader_getSocket(TermReader* t);
00085 EXTERN void termReader_setType(TermReader* t, TermReaderType type);
00086 EXTERN TermReaderType termReader_getType(TermReader* t);
00087 EXTERN void termReader_setReaderSpecificData(TermReader* t, gpointer g);
00088 EXTERN gpointer termReader_getReaderSpecificData(TermReader* t);
00089 EXTERN void termReader_setGetNextCallback(TermReader* t, TermReaderGetNext g);
00090 EXTERN void termReader_setCleanupCallback(TermReader* t, TermReaderCleanup c);
00091
00095 EXTERN ICLTerm* termReader_getNextTerm(TermReader* t, double timeout);
00096
00097 #ifdef __cplusplus
00098 }
00099 #endif
00100
00101 #endif