#define __LISPREADER_H__
#include <stdio.h>
+#include <zlib.h>
+#include <string>
#include <vector>
+#include <exception>
+#include "exceptions.h"
#define LISP_STREAM_FILE 1
#define LISP_STREAM_STRING 2
#define LISP_PATTERN_LIST 7
#define LISP_PATTERN_OR 8
+// Exception
+class LispReaderException : public SuperTuxException
+{
+ public:
+ LispReaderException(const char* _message = "lispreader error", const char* _file = "", const unsigned int _line = 0)
+ : SuperTuxException(_message, _file, _line) { };
+};
+
typedef struct
{
int type;
} v;
};
+lisp_stream_t* lisp_stream_init_gzfile (lisp_stream_t *stream, gzFile file);
lisp_stream_t* lisp_stream_init_file (lisp_stream_t *stream, FILE *file);
lisp_stream_t* lisp_stream_init_string (lisp_stream_t *stream, char *buf);
lisp_stream_t* lisp_stream_init_any (lisp_stream_t *stream, void *data,
void (*unget_char) (char c, void *data));
lisp_object_t* lisp_read (lisp_stream_t *in);
+lisp_object_t* lisp_read_from_file(const std::string& filename);
void lisp_free (lisp_object_t *obj);
lisp_object_t* lisp_read_from_string (const char *buf);
/** cur == ((pos 1 2 3) (id 12 3 4)...) */
LispReader (lisp_object_t* l);
+ bool read_int_vector (const char* name, std::vector<int>* vec);
+ bool read_int_vector (const char* name, std::vector<unsigned int>* vec);
+ bool read_char_vector (const char* name, std::vector<char>* vec);
+ bool read_string_vector (const char* name, std::vector<std::string>* vec);
+ bool read_string (const char* name, std::string* str);
bool read_int (const char* name, int* i);
bool read_float (const char* name, float* f);
bool read_bool (const char* name, bool* b);
- };
-
-/** */
-class LispWriter
- {
- private:
- std::vector<lisp_object_t*> lisp_objs;
-
- void append (lisp_object_t* obj);
- lisp_object_t* make_list3 (lisp_object_t*, lisp_object_t*, lisp_object_t*);
- lisp_object_t* make_list2 (lisp_object_t*, lisp_object_t*);
- public:
- LispWriter (const char* name);
- void write_float (const char* name, float f);
- void write_int (const char* name, int i);
- void write_boolean (const char* name, bool b);
- void write_string (const char* name, const char* str);
- void write_symbol (const char* name, const char* symname);
- void write_lisp_obj(const char* name, lisp_object_t* lst);
-
- /** caller is responible to free the returned lisp_object_t */
- lisp_object_t* create_lisp ();
+ bool read_lisp (const char* name, lisp_object_t** b);
};
#endif