[rkward-cvs] SF.net SVN: rkward: [787] trunk/rkward/rkward

tfry at users.sourceforge.net tfry at users.sourceforge.net
Sun Oct 1 22:35:40 UTC 2006


Revision: 787
          http://svn.sourceforge.net/rkward/?rev=787&view=rev
Author:   tfry
Date:     2006-10-01 15:35:28 -0700 (Sun, 01 Oct 2006)

Log Message:
-----------
First use of RCommand::GetStructuredData, practicing on something easy.
This seems to be more code to write in general, but also much more readable

Modified Paths:
--------------
    trunk/rkward/rkward/dialogs/rkloadlibsdialog.cpp
    trunk/rkward/rkward/dialogs/rkloadlibsdialog.h
    trunk/rkward/rkward/rbackend/rdata.cpp
    trunk/rkward/rkward/rbackend/rembedinternal.cpp
    trunk/rkward/rkward/rbackend/rpackages/rkward/R/internal.R

Modified: trunk/rkward/rkward/dialogs/rkloadlibsdialog.cpp
===================================================================
--- trunk/rkward/rkward/dialogs/rkloadlibsdialog.cpp	2006-10-01 21:44:11 UTC (rev 786)
+++ trunk/rkward/rkward/dialogs/rkloadlibsdialog.cpp	2006-10-01 22:35:28 UTC (rev 787)
@@ -2,7 +2,7 @@
                           rkloadlibsdialog  -  description
                              -------------------
     begin                : Mon Sep 6 2004
-    copyright            : (C) 2004 by Thomas Friedrichsmeier
+    copyright            : (C) 2004, 2006 by Thomas Friedrichsmeier
     email                : tfry at users.sourceforge.net
  ***************************************************************************/
 
@@ -598,11 +598,19 @@
 		if (!command->failed ()) {
 			delete placeholder;
 			placeholder = 0;
-			RK_ASSERT (command->getDataType () == RData::StringVector);
-			RK_ASSERT ((command->getDataLength () % 2) == 1);
-			unsigned int count = (command->getDataLength () / 2);
+
+			RK_ASSERT (command->getDataLength () == 3);
+
+			RData *names = command->getStructureVector ()[0];
+			RData *versions = command->getStructureVector ()[1];
+			RData *repos = command->getStructureVector ()[2];
+
+			unsigned int count = names->getDataLength ();
+			RK_ASSERT (count == versions->getDataLength ());
+			RK_ASSERT (repos->getDataLength () == 1);
+
 			for (unsigned int i=0; i < count; ++i) {
-				new QListViewItem (installable_view, command->getStringVector ()[i], command->getStringVector ()[count + i]);
+				new QListViewItem (installable_view, names->getStringVector ()[i], versions->getStringVector ()[i]);
 			}
 			installable_view->setEnabled (true);
 
@@ -613,7 +621,7 @@
 			}
 
 			// this is after the repository was chosen. Update the repository string.
-			parent->repos_string = command->getStringVector ()[2 * count];
+			parent->repos_string = repos->getStringVector ()[0];
 		} else {
 			get_list_button->setEnabled (true);
 		}
@@ -646,7 +654,7 @@
 
 	get_list_button->setEnabled (false);
 
-	RCommand *command = new RCommand ("c (.rk.get.available.packages (), rk.make.repos.string ())", RCommand::App | RCommand::GetStringVector, QString::null, this, FIND_AVAILABLE_PACKAGES_COMMAND);
+	RCommand *command = new RCommand (".rk.get.available.packages ()", RCommand::App | RCommand::GetStructuredData, QString::null, this, FIND_AVAILABLE_PACKAGES_COMMAND);
 	RKProgressControl *control = new RKProgressControl (this, i18n ("Please stand by while downloading the list of available packages."), i18n ("Fetching list"), RKProgressControl::CancellableProgress | RKProgressControl::AutoCancelCommands);
 	control->addRCommand (command, true);
 	RKGlobals::rInterface ()->issueCommand (command, parent->chain);

Modified: trunk/rkward/rkward/dialogs/rkloadlibsdialog.h
===================================================================
--- trunk/rkward/rkward/dialogs/rkloadlibsdialog.h	2006-10-01 21:44:11 UTC (rev 786)
+++ trunk/rkward/rkward/dialogs/rkloadlibsdialog.h	2006-10-01 22:35:28 UTC (rev 787)
@@ -2,7 +2,7 @@
                           rkloadlibsdialog  -  description
                              -------------------
     begin                : Mon Sep 6 2004
-    copyright            : (C) 2004 by Thomas Friedrichsmeier
+    copyright            : (C) 2004, 2006 by Thomas Friedrichsmeier
     email                : tfry at users.sourceforge.net
  ***************************************************************************/
 

Modified: trunk/rkward/rkward/rbackend/rdata.cpp
===================================================================
--- trunk/rkward/rkward/rbackend/rdata.cpp	2006-10-01 21:44:11 UTC (rev 786)
+++ trunk/rkward/rkward/rbackend/rdata.cpp	2006-10-01 22:35:28 UTC (rev 787)
@@ -82,6 +82,7 @@
 void RData::detachData () {
 	data = 0;
 	length = 0;
+	datatype = NoData;
 }
 
 void RData::setData (RData *from) {

Modified: trunk/rkward/rkward/rbackend/rembedinternal.cpp
===================================================================
--- trunk/rkward/rkward/rbackend/rembedinternal.cpp	2006-10-01 21:44:11 UTC (rev 786)
+++ trunk/rkward/rkward/rbackend/rembedinternal.cpp	2006-10-01 22:35:28 UTC (rev 787)
@@ -455,7 +455,10 @@
 			{
 				RData **structure_array = new RData*[count];
 				for (unsigned int i=0; i < count; ++i) {
-					structure_array[i] = SEXPToRData (VECTOR_ELT (from_exp, i));
+					SEXP subexp;
+					PROTECT (subexp = VECTOR_ELT (from_exp, i));
+					structure_array[i] = SEXPToRData (subexp);
+					UNPROTECT (1);
 				}
 				data->data = structure_array;
 			}
@@ -716,9 +719,6 @@
 	
 	UNPROTECT (1); // exp
 	
-	if (*error != NoError) {
-		return 0;
-	}
 	return data;
 }
 

Modified: trunk/rkward/rkward/rbackend/rpackages/rkward/R/internal.R
===================================================================
--- trunk/rkward/rkward/rbackend/rpackages/rkward/R/internal.R	2006-10-01 21:44:11 UTC (rev 786)
+++ trunk/rkward/rkward/rbackend/rpackages/rkward/R/internal.R	2006-10-01 22:35:28 UTC (rev 787)
@@ -132,7 +132,7 @@
 
 ".rk.get.available.packages" <- function () {
 	x <- .rk.cached.available.packages ()
-	return (c (as.vector (x[,1]), as.vector (x[,2])))
+	return (list (as.character (x[,1]), as.character (x[,2]), rk.make.repos.string ()))
 }
 
 "require" <- function (package, quietly = FALSE, character.only = FALSE, ...)


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the rkward-tracker mailing list