Again, I am abstracting this message to promote it to a higher level in
the discussion.
The thing I notice immediately is the distinction between contents and
subnodes. It appears I am not alone in realizing these two conceptual
entities must be kept distinct. Yes?
-------- Original Message --------
From: Paul Fernhout
For versioning, from the class comment of PointrelTreeArchiver in Squeak
(this took quite a bit of time/thought to work out, and if I did it over
again I might make some minor changes):
=============================================
maintains multiple versions of things.
This is the recursive structure maintained.
There is one top level named node called "tree archive root".
This node points to other nodes which contain versions of archive
information.
Any user of this archive to load a sensible subset of the archive then
will have one "node version" of "tree archive root" (or lower in the
tree).
This node version will point to other specific node versions
which defines a subset of the archive.
In this definition, except for the first node, each line starts with the
name of a property of the object type above it.
Three dots such as '...' denotes that the previous property line above
it can be repeated multiple times.
'has property -> type' denotes the expected type of the property.
The subsequent indented lines define the properties of this type if it
is new.
Things in double quotes are comments.
named node
has name -> string
has node version list -> node version list
has node version -> node version
has version tag -> string
has current contents version -> contents version
"the following node version should be from a subnode's
version list"
has current subnode version -> node version
...
...
has contents version list -> contents version list
has contents version -> contents version
has contents -> string
has version tag -> string
...
has subnode list -> subnode list
has named node -> named node
...
"The following field is only appropriate if there is only
one shared current state by all archive users"
has loaded version -> node version
Or, decomposed into pseudo-objects:
node version list
has node version -> node version
...
node version
has version tag -> string
has current contents version -> contents version
"the following node version should be from a subnode's
version list"
has current subnode version -> node version
...
contents version list
has contents version -> contents version
...
contents version
has contents -> string
has version tag -> string
subnode list
has named node -> named node
...
named node
has name -> string
has node version list -> node version list
has contents version list -> contents version list
has subnode list -> subnode list
"The following field is only appropriate if there is only
one shared current state by all archive users"
has loaded version -> node version
==========================================
(Pursuant to the terms of the X/MIT type license)
This produces a general system for having multiple versions of
hierarchical content. ENVY for Smalltalk (VisualWorks, VisualAge)
produces a similar effect but is less general.
-Paul Fernhout
Kurtz-Fernhout Software
=========================================================
Developers of custom software and educational simulations
Creators of the Garden with Insight(TM) garden simulator
http://www.kurtz-fernhout.com
-------------------------- eGroups Sponsor -------------------------~-~>
eGroups eLerts
It's Easy. It's Fun. Best of All, it's Free!
http://click.egroups.com/1/9698/5/_/444287/_/972681259/
---------------------------------------------------------------------_->
Community email addresses:
Post message: unrev-II@onelist.com
Subscribe: unrev-II-subscribe@onelist.com
Unsubscribe: unrev-II-unsubscribe@onelist.com
List owner: unrev-II-owner@onelist.com
Shortcut URL to this page:
http://www.onelist.com/community/unrev-II
This archive was generated by hypermail 2b29 : Fri Oct 27 2000 - 14:24:32 PDT