OOP load update
Robert T. Short
octave at phaselockedsystems.com
Tue May 5 15:06:43 CDT 2009
Ahh! I did try save --ascii. My bad. Should have read the docs more
carefully. Actually I didn't really test this on any real variety of
file formats. Just one more item..... In fact when I said binary, I
was being very sloppy. I should have said matfile version 6. I saved
v6 mat files in MATLAB and read them here as well as saving them from
octave and reading them back. So, Bob needs to do some more testing. I
think the structure is pretty solid though. There are some interesting
issues that I will bring up when I can spare a few minutes.
It works very well from hdf5 and mat file formats and, yes, the changes
will be essentially the same for the save_ascii function. I tested
this on many different types of inheritance and aggregation and it works
really well. I didn't have to muck about your "exemplar" stuff at all
either, so that was well-conceived.
Note that if there is an object load failure I don't return the struct,
just fail. I will try to figure out something that works. It might be
just fine to return the broken object and use the struct(obj) function
to get the struct info from the class. Of course, I will have to write
the struct(obj) function, but I think that will be pretty easy.
I will fix the save_ascii thing and try to figure out what to do when
there is a class structure mismatch. The next thing is to see that
"clear classes" works. Since I have to figure out exactly what "works"
means, there is some effort involved.
Just some other information.
I went and re-read the MATLAB documentation; it says very clearly that a
class constructor must be able to handle the no-argument case since the
constructor is called for loading from a mat file and and building
arrays of objects. They don't actually test for it of course, and I am
quite sure they DON'T call the constructor for loading from a mat file.
I think they do for creating an array of objects. Some experimentation
here and I will do the correct thing. I want to do a lot of the little
detail stuff first and will get back to this issue later.
Also, in the MATLAB documentation they say that field names are always
32 bits long, but that is NOT what is actually saved in the mat file.
It saves names in the minimum space required.
Bob
--
Robert T. Short
PhaseLocked Systems
John W. Eaton wrote:
> On 5-May-2009, Robert T. Short wrote:
>
> | Attached is a fix so that the load command works with legacy objects.
> | It works for binary and hdf5 formats, but the save command doesn't work
> | with ASCII files, so I haven't fixed the load command. Will work on
> | that later.
>
> How does it fail? It seems to work for me, at least with the simple
> object I tried to save. Note that it can't work for "save -ascii",
> but that's not what the save_ascii function is for. It is called when
> saving objects in the "-text" format. The naming is an unfortunate
> historical artifact...
>
> I would guess that the changes to handle loading from a file saved in
> Octave's -text file format should be about the same as for the binary
> and hdf5 formats.
>
> What about loading from the MAT file format? Is that working now?
>
> | This is the last major issue with legacy objects. There are scads of
> | minor issues left.
>
> I checked in this changeset with a few more minor changes.
>
> Thanks,
>
> jwe
>
>
>
More information about the Octave-maintainers
mailing list