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);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.