[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Swarm-Support] Lisp saving objects subclassed from Arguments_c
From: |
Marcus G. Daniels |
Subject: |
Re: [Swarm-Support] Lisp saving objects subclassed from Arguments_c |
Date: |
Sun, 15 Apr 2007 18:26:49 -0600 |
User-agent: |
Thunderbird 1.5.0.10 (X11/20070302) |
Marcus G. Daniels wrote:
I suspect it is because there is a function variable in Arguments_c,
that serialization code doesn't know how to handle.
Nope, that's not it. Here's a test case that perhaps you can adapt to
break and illustrate the problem.
This only tests writing. It should write a complete myFile.scm file if
you invoke it like this:
./a.out -X 12 -Y test
#include <simtools.h> // initSwarmArguments
#include <defobj.h>
#include <defobj/Arguments.h>
#include <misc.h> // atoi, strdup
@interface MyArguments: Arguments_c
{
int foobar;
char *gnorkGnork;
}
@end
@implementation MyArguments
+ createBegin: aZone
{
id args = [super createBegin: aZone];
[args addOption: "foobar" key: 'X' arg: "value" flags: 0
doc: "the important foobar value"
group: 100];
[args addOption: "gnorkgnork" key: 'Y' arg: "value" flags: 0
doc: "the less crucial gnorkgnork value"
group: 101];
return args;
}
- (int)parseKey: (int)key arg: (const char *)arg
{
if (key == 'X') {
foobar = atoi (arg);
return 0;
} else if (key == 'Y') {
gnorkGnork = strdup (arg);
return 0;
}
else
return [super parseKey: key arg: arg];
}
- (void)saveParameters: (char*)aString
{
char dataArchiveName[strlen (aString + 4 + 1)];
id dataArchiver;
sprintf (dataArchiveName,"%s.scm", aString);
printf ("saving to `%s'\n", dataArchiveName);
dataArchiver = [LispArchiver create: [self getZone]
setPath: dataArchiveName];
[dataArchiver putShallow: "parameters" object: self];
[dataArchiver sync];
[dataArchiver drop];
}
@end
int
main (int argc, const char **argv)
{
initSwarmArguments (argc, argv, [MyArguments class]);
[(id) arguments saveParameters: "myFile"];
return 0;
}
/*
Local Variables:
compile-command: "gcc -D_GNU_SOURCE address@hidden -g -I$HOME/packages/include
-L$HOME/packages/lib -Wl,-rpath,$HOME/packages/lib test.m -lswarm"
End:
*/