rev 333 - in trunk: . modules/Prosist src
SVN User <[email protected]>
| Newsgroups | gmane.comp.lang.prothon.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: mark
Date: 2004-04-12 01:21:58 -0400 (Mon, 12 Apr 2004)
New Revision: 333
Modified:
trunk/STATUS.txt
trunk/modules/Prosist/Prosist.c
trunk/src/builtins-tuple.c
Log:
More work on unfinished Prosist
Modified: trunk/STATUS.txt
===================================================================
--- trunk/STATUS.txt 2004-04-12 00:46:38 UTC (rev 332)
+++ trunk/STATUS.txt 2004-04-12 05:21:58 UTC (rev 333)
@@ -3,6 +3,8 @@
--- add list comprehension
+--- add support for APR_BINARY in File.c ('b' flag)
+
--- catch exceptions during module loading
--- help() in interactive console()
Modified: trunk/modules/Prosist/Prosist.c
===================================================================
--- trunk/modules/Prosist/Prosist.c 2004-04-12 00:46:38 UTC (rev 332)
+++ trunk/modules/Prosist/Prosist.c 2004-04-12 05:21:58 UTC (rev 333)
@@ -57,14 +57,52 @@
#include <string.h>
#include <prothon/prothon_dll.h>
+#define INITIAL_NUMBER_OF_OBJECTS 32
+
+typedef struct obj_map_s* obj_map_p;
+
+typedef struct obj_map_s {
+ int free;
+ obj_p obj;
+ size_t ofs;
+ size_t len;
+ obj_map_p prev;
+ obj_map_p next;
+} obj_map_t;
+
typedef struct {
apr_file_t* stream;
apr_pool_t* pool;
apr_thread_mutex_t* mutex;
+ size_t file_size;
+ size_t free_size;
+ obj_map_p free_list;
+ obj_map_p map_list;
} dbdata_t;
typedef dbdata_t* dbdata_p;
+
+
+void store_object(isp ist, dbdata_p dbdatap, obj_p root_obj) {
+
+}
+
+void trans_abort(isp ist, dbdata_p dbdatap) {
+
+}
+
+void trans_commit(isp ist, dbdata_p dbdatap) {
+
+}
+
+obj_p load_object(isp ist, dbdata_p dbdatap, i64_t id) {
+ obj_p obj = NULL;
+
+ return obj;
+}
+
+
MODULE_DECLARE(Prosist);
MODULE_DECLARE(DB);
MODULE_DECLARE(ProsistException);
@@ -87,27 +125,34 @@
set_obj_rdacc(DB_OBJ, ACC_USER1);
}
-DEF(DB, __init__, list4(ist, sym(ist, "filename"), NULL,
- sym(ist, "root_obj"), NULL ) ) {
+DEF( DB, __init__, list6(ist, sym(ist, "filename"), NULL,
+ sym(ist, "root"), OBJ(NONE),
+ sym(ist, "overwrite"), OBJ(PR_FALSE) ) ) {
+ char* filename;
obj_p root_obj;
+ int overwrite = FALSE;
+ apr_int32_t flags;
apr_status_t aprerr;
dbdata_p dbdatap;
- char* filename;
CHECK_TYPE_EXC(parms[1], OBJ(STRING_PROTO), "string");
-
- read_unlock(ist, self);
filename = strch(parms[1]);
root_obj = parms[3];
- set_obj_rdacc(self, ACC_USER1);
- add_doc_to_obj(ist, self, "Prosist DataBase");
+ if (parms[5] == OBJ(PR_TRUE)) overwrite = TRUE;
+
self->data_type = OBJ_TYPE_DATAPTR;
dbdatap = self->data.ptr = pr_malloc(sizeof(dbdata_t));
- read_lock(ist, self);
+ //dbdatap->obj_map = new_dict_obj(ist, INITIAL_NUMBER_OF_OBJECTS);
+
aprerr = apr_pool_create(&(dbdatap->pool), get_pr_head_pool());
IF_APR_ERR("Out of memory creating Prosist DB") return NULL;
- aprerr = apr_file_open(&(dbdatap->stream), filename, (APR_READ |APR_WRITE | APR_CREATE), APR_OS_DEFAULT, dbdatap->pool);
+ flags = APR_READ | APR_WRITE | APR_BINARY;
+ if (root_obj != OBJ(NONE)) {
+ flags |= APR_CREATE;
+ if (!overwrite) flags |= APR_EXCL;
+ }
+ aprerr = apr_file_open(&(dbdatap->stream), filename, flags, APR_OS_DEFAULT, dbdatap->pool);
if (aprerr != APR_SUCCESS) {
char err_buf[80];
raise_exception(ist, OBJ(IOEXCEPTION), "Unable to open file %s: %s",
@@ -115,39 +160,57 @@
apr_pool_destroy(dbdatap->pool);
return NULL;
}
+ if (root_obj == OBJ(NONE))
+ root_obj = load_object(ist, dbdatap, 0);
+ else
+ store_object(ist, dbdatap, root_obj);
+
+ read_unlock(ist, self);
+ set_obj_rdacc(self, ACC_USER1);
+ add_doc_to_obj(ist, self, "Prosist DataBase");
+ set_attr(ist, self, sym(ist, "filename"), parms[1]);
+ set_attr(ist, self, sym(ist, "root"), root_obj);
+ read_lock(ist, self);
+
return OBJ(NONE);
}
-void db_commit(isp ist, obj_p self){
+DEF(DB, abort, NULL) {
+ dbdata_p dbdatap = self->data.ptr;
+ if (dbdatap)
+ trans_abort(ist, dbdatap);
+ return self;
}
-DEF(DB, commit, NULL) {
- db_commit(ist, self);
+DEF(DB, commit, NULL) {
+ dbdata_p dbdatap = self->data.ptr;
+ if (dbdatap)
+ trans_commit(ist, dbdatap);
return self;
}
DEF(DB, close, NULL) {
dbdata_p dbdatap = self->data.ptr;
- if (dbdatap->stream) {
- db_commit(ist, self);
+ if (dbdatap) {
+ trans_commit(ist, dbdatap);
apr_file_close(dbdatap->stream);
- dbdatap->stream = NULL;
apr_pool_destroy(dbdatap->pool);
+ self->data.ptr = NULL;
}
return self;
}
DEF(DB, closed_QUES, NULL) {
- dbdata_p dbdatap = self->data.ptr;
- if (dbdatap->stream) return OBJ(PR_FALSE);
- else return OBJ(PR_TRUE);
+ if (self->data.ptr) return OBJ(PR_FALSE);
+ else return OBJ(PR_TRUE);
}
MAIN_MODULE_INIT(Prosist)
{
MODULE_SUB_INIT(Prosist);
MODULE_ADD_SYM(DB, __init__);
+ MODULE_ADD_SYM(DB, abort);
MODULE_ADD_SYM(DB, commit);
MODULE_ADD_SYM(DB, close);
MODULE_ADD_SYM(DB, closed_QUES);
Modified: trunk/src/builtins-tuple.c
===================================================================
--- trunk/src/builtins-tuple.c 2004-04-12 00:46:38 UTC (rev 332)
+++ trunk/src/builtins-tuple.c 2004-04-12 05:21:58 UTC (rev 333)
@@ -316,7 +316,6 @@
{
MODULE_SUB_INIT(Tuple);
MODULE_ADD_SYM(Tuple, __init__);
- MODULE_ADD_SYM(Tuple, __cdatalen__);
MODULE_ADD_SYM(Tuple, __str__);
MODULE_ADD_SYM(Tuple, len);
MODULE_ADD_SYM(Tuple, min);
@@ -334,6 +333,7 @@
MODULE_ADD_SYM(Tuple, __setitem__);
MODULE_ADD_SYM(Tuple, __delitem__);
MODULE_ADD_SYM(Tuple, __objlist__);
+ MODULE_ADD_SYM(Tuple, __cdatalen__);
MODULE_SUB_INIT(Tgen);
MODULE_ADD_SYM(Tgen, next);