This is my plan for how Delay Loading will work. This is both for my reference, 
and so you guys can comment on it.

I believe this is necessary for a few reasons. In the future, more lumps will 
be in the RELOAD format. Heroes, enemies and text boxes are prime candidates, 
right off the bat. However, loading and unloading the entire text box tree 
every time you show one would take a forever. And, keeping the tree in memory 
might not be a good idea either (I actually have no idea how efficient the 
in-memory tree is, to be honest).

So, instead, you would load the tree once, with delay loading enabled (which it 
will be by default, but can be overridden).

RELOAD will open the document, parse the header and root node, and then stop. 
The root node will be marked with a flag saying "this node is only partially 
loaded", and the child node will be null. Further, RELOAD will cache the file 
handle in the Doc UDT, and the file position in the Node UDT.

When the child node is dereferenced (by GetFirstChild), RELOAD will notice that 
1. It's null, and 2. It's only partially loaded. It will then partially load 
the children of the node, and clear the flag on it. Repeat for all the 
children, etc.

The important thing to keep in mind is that whenever one child is loaded, all 
its immediate brethren are loaded too. This ensures that the Next/PrevSibling() 
commands are always valid.

It will also be possible to tell GetFirstChild to disable Delay Loading, where 
upon it will load the entire branch of the tree. Again, this will be useful in 
the situation of loading a text box, for example. Once you find the text box in 
question, you know you're going to read all the children, so it will be more 
efficient to load it all at once.

One last thing. Obviously, adding a new child to a partially loaded node will 
trigger loading. I think I will also add a command to go through the entire 
tree and load everything, so the file can be closed. (We can't close the file 
while not using it, because if it happens to change somehow, then any time we 
load a partially loaded node, we risk corrupting something!)

Anything I'm forgetting here?

--
Mike Caron
_______________________________________________
Ohrrpgce mailing list
[email protected]
http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org

Reply via email to