Todo List

Member BCatalog::AddEntry (const SString &name, const SValue &entry)
Fix this by hooking in to ReportChangeAtLocked()!!!

Member BCatalog::RenameEntry (const SString &entry, const SString &name)
Need to keep the same IDatum object.

Member BCatalog::RenameEntry (const SString &entry, const SString &name)
Fix to only get the entry object if linked!!!

Member BIndexedTableNode::UpdateEntryIndicesLocked (size_t index, ssize_t delta)
Should we push something when the entry is deleted?

Member BIndexedTableNode::FetchEntryAtLocked (const sptr< IndexedIterator > &it, size_t rowIndex, uint32_t flags, SValue *entry)
should be smarter about this, maybe even get rid of COLLAPSE_NODE.

Member BIndexedTableNode::ReportChangeAtLocked (size_t row, size_t col, const sptr< IBinder > &editor, uint32_t changes, off_t start=-1, off_t length=-1)
Should only push this event for iterators with select queries?

Class BMallocStore
Change this to be based off of BStreamDatum.

Class BMemoryStore
Change this to be based off of BStreamDatum.

Class BMetaDataNode
Should an option be added here to allow the node to store any arbitrary meta-data? Or should that functionality be provided in some further derived class (such as BCatalog)? I guess this depends on whether we want to allow others to rely on extendable meta-data functionality...

Member BnNode::PushEntryRemoved (const sptr< INode > &who, const SString &name)
Should this also return the IBinder of the old entry? For correctness, probably so, though that would cause some implementation difficulties.

Class BSchemaRowIDJoin::RowNode
Deal with changes in the columns of the underlying tables.

Push appropriate events when the underlying table change.

Class BSchemaTableNode
Implement efficient IDatum stream read/write operations.

Fix data access to use cursor ID instead of always row ID.

Implement adding and removing of columns in underlying table.

Make everything update when columns are added/removed.

Member BSchemaTableNode::ReportChangeAtLocked (size_t rowid, size_t col, const sptr< IBinder > &editor, uint32_t changes, off_t start=-1, off_t length=-1)
Should only push this event for iterators with select queries?

Class BValueDatum
Need to consider what to do with B_STRING_TYPE in terms of NUL-termination.

Class BValueDatum
Should probably introduce a BAbstractValueDatum class that this one derives from, and/or add facilities to allow clients to more easily control how the value can be modifed (restrict its possible types etc).

Member ICatalog::AddEntry (const SString &name, const SValue &entry)=0
This API should not allow both creation of new entries and modification of existing entries.

Member ICatalog::AddEntry (const SString &name, const SValue &entry)=0
This API should work more like CreateDatum(), where the name is an in/out parameter, and it should be able to return the created object as an optional output. Perhaps this functionality should be moved to CreateNode() and CreateDatum(), and this method changed to ReplaceEntry() to only modify an existing entry.

Member IDatum::Open (uint32_t mode, const sptr< IBinder > &editor=NULL, uint32_t newType=0)=0
Add status_t output to retrieve error codes.

Class IInformant
API should be updated to support a richer process model, where transient processes can be created to handle the RegisterForCreation() API.

Class IInformant
RegisterForCreation() should use an SValue instead of an SString for the component name, so that constructor arguments can be included.

Member INode::Walk (SString *path, uint32_t flags, SValue *node)=0
COLLAPSE_NODE should probably be removed.

Class ITable
I think it would be cleaner to get rid of the CreateRow() and RemoveNode() APIs, putting that functionality on ICatalog so it continues to be your one-stop-shopping for manipulating entries. This interface then is just very specific table operation -- monitoring table changes, and finding and manipulating columns.

Member ITable::ColumnNames () const =0
Should be replaced with an IIterable interface.

Member ITable::CreateRow (SString *name, const SValue &columns, uint32_t flags=0, sptr< INode > *createdRow=NULL)=0
This should probably be removed from this interface, and the ICatalog::CreateNode() API extended to have all of this functionality.

Member ITable::RemoveRow (const sptr< INode > &row)=0
This should probably be removed from this interface, and put on ICatalog.

Member ITable::Schema () const =0
Should be replaced with an IIterable interface.

Class ITextInput
This should probably be changed to not derive from IInterface, so it doesn't depend on the Binder. It has never been clear how to marshal these across processes, anyway.

Class ITextOutput
This should probably be changed to not derive from IInterface, so it doesn't depend on the Binder. It has never been clear how to marshal these across processes, anyway.

Member SAtom::AttachAtom (SAtom *target)
This method is not yet implemented!

Class SDatabase
Develop a concurrent version, SConcurrentDatabase, which can perform reader-writer locking.

Class SDatumGeneratorInt
May want to revisit deletion, the value that gets set and if any events get pushed when it happens.

Member SDatumGeneratorInt::UpdateDatumIndicesLocked (size_t index, ssize_t delta)
Should we push something when the entry is deleted?

Class SNode
Need to clean up the Walk() methods to get rid of amiguities between them.

Member SSQLBuilder::MapSQLColumn (SValue *inoutColumn) const
Should support mappings from one SValue column to multiple SQL columns.

Member SString::operator const char * () const
This should be removed!

Member bndErrBadType
Should this go away and just use B_BAD_TYPE?

Member B_WEAK_BINDER_LINK
Should this be the default for links? It is safer than holding a strong reference, and usually what you want.

Page Missing Features
Implement command line history and editing in Binder Shell.

Page Missing Features
Implement Binder Shell access to underlying host commands / filesystem.

Page Missing Features
Implement cross-network communicatiom support

Page Missing Features
Implement object introspection

Page To Do Items for OpenBinder
Better process and security management.

Page To Do Items for OpenBinder
Reorganize sources.

Page To Do Items for OpenBinder
Rework scripting in IBinder.

Page To Do Items for OpenBinder
Improve the way we handle marshalling and unmarshalling of arrays.

Page To Do Items for OpenBinder
Pacakge manager needs to use the data model

Page To Do Items for OpenBinder
Lots of improvements to links

Page To Do Items for OpenBinder
PIDGEN: currently doesn't deal with an IDL file that contains a forward declaration and declaration of the same interface.

Page To Do Items for OpenBinder
PIDGEN: Fix multi-line comments

Page To Do Items for OpenBinder
PIDGEN: Improve SValue return

Page To Do Items for OpenBinder
PIDGEN: B_IMPLEMENT_IINTERFACE_FLATTEN_FUNCS

Page To Do Items for OpenBinder
PIDGEN: Support wptr in sequence?

Page To Do Items for OpenBinder
PIDGEN: UnlinkSomeInterface() should take a wptr<>

Page Threading Conventions
Talk about examples such as IViewManager and SVector, byte streams and IDatum::Open() and IStorage, IIterator and IIterable::NewIterator().