create/destroy name change proposal
Xiaolin Li
linli at ams.sunysb.edu
Thu May 6 16:29:35 CDT 2010
This proposal looks fine with FronTier.
On Wed, 2010-05-05 at 10:16 -0400, Carl Ollivier-Gooch wrote:
> I redirected this to the interface list, to help signal-to-noise ratio.
>
> On 10-04-29 09:30 PM, Mark Miller wrote:
> > Author(s):
> > ----------
> > Mark C. Miller
> >
> > Proposal:
> > ---------
> > Change the name(s) of a few iMesh functions to make the API a little
> > more consistently named. For convenience, I list below the names of many
> > fuctions that add/remove or create/destroy things.
> >
> > Add/Remove methods
> > ------------------
> > iMesh_addEntToSet/iMesh_rmvEntFromSet
> > iMesh_addEntArrToSet/iMesh_rmvEntArrFromSet
> > iMesh_addEntSet/iMesh_rmvEntSet
> > iMesh_addPrntChld/iMesh_rmvPrntChld
> > no-add-method/iMesh_rmvEntSetTag
> > no-add-method/iMesh_rmvArrTag
> > no-add-method/iMesh_rmvTag
> >
> > Create/Destroy methods (sort of)
> > --------------------------------
> > iMesh_newMesh/iMesh_dtor
> > iMesh_createEntSet/iMesh_destroyEntSet
> > iMesh_createVtxArr/iMesh_deleteEntArr
> > iMesh_createEntArr/iMesh_deleteEntArr
> > iMesh_createTag/iMesh_destroyTag
> > iMesh_createVtx/iMesh_deleteEnt
> > iMesh_createEnt/iMesh_deleteEnt
> >
> > So, I propose to rename the following functions...
> >
> > iMesh_newMesh --> iMesh_create
> > iMesh_dtor --> iMesh_destroy
> >
> > iMesh_deleteEnt --> iMesh_destroyEnt
> > iMesh_deleteEntArr --> iMesh_destroyEntArr
> >
> > Rational:
> > ---------
> > For the most part, we have an 'add' operation that adds an existing
> > thing to another existing thing and a corresponding 'remove' operation
> > that undoes whatever the add did.
>
> I have no complaints about rationalizing the names. These are the way
> they are for no particularly good reason. The _dtor, for instance, is a
> carryover from the name SIDL pushed on us....
>
> > Related concern #1:
> > ------------------
> > What says the specification regarding what is supposed to happen to
> > storage associated with the things being removed or destroy? I could not
> > find anything that specifically enumerates what, if anything, an
> > implementation is required to do with removing or destroying things with
> > the storage associated with those things. If we give implementations
> > flexibility what to do with storage, I could envision implementations
> > where a remove operation just indicates internally that an item should
> > be ignored but otherwise does nothing to free up any storage that might
> > be associated with the item having been previously added. Likewise for
> > 'destroy' operations. Worse, I could storage that is 'lost' to removed
> > or destroy'd things being kept around presisting across save/load which
> > would be even worse. So, I think the specification should speak to the
> > issue of an implementation's responsibility regarding storage associated
> > with things being removed/destroyed.
>
> Can of worms warning! :-)
>
> GRUMMP is one of the implementations that marks stuff as removed without
> freeing up storage. Rationale: entities are created internally in
> blocks rather than one by one. Removing an entity in the middle of a
> block with compression of the remaining data is O(n) for every deletion,
> which is bad. Actually, it's worse, because that changes all of your
> connectivity data (whether you use integers or pointers). And it's even
> worse than that, because the way GRUMMP stores sets and entity handle
> tags is by using pointers to entities. So if I compress the data
> structures, all of that stuff has to be updated.
>
> As a result, the compression is done in batch and only occasionally.
> This is why we have this obscure function about handle validity: to give
> implementations notice that it's okay to rearrange the database without
> messing up handles that the application may be holding on to. When the
> database is compressed, blocks of memory with no entities in them are
> freed, but the remaining blocks won't be 100% full (except by remarkable
> coincidence).
>
> GRUMMP -does- compress the database before writing (actually, it also
> reorders at this point, too). So there's no carryover of
> non-garbage-collected memory to the next run.
>
> > Related concern #2:
> > -------------------
> > In three of the remove methods for tags, above, we have no corresponding
> > 'add' method. Instead, I think a call to iMesh_set<Whatever>Data has the
> > effect of both 'adding' the tag and setting the data value. That just
> > seems a little inconsistent too.
>
> Yes, but. The "but" is that if you can add a tag without setting it,
> now you have to have some (implementation dependent, at least for
> handles) automatic value to assign. This is true in a different form
> even if we mandate that iMesh_get<>Data for an added-but-unset tag
> returns an error: how does the implementation know that the value hasn't
> been set yet?
>
> Overall, I think the inconsistency is worth it here: it eliminates a
> call in common usage (the only correct usage that I can see) and makes
> implementation easier.
>
> Carl
>
More information about the tstt-interface
mailing list