TODO list for GNU EDMA
----------------------
x [SEMI] * Implement Repository Management (TESTING)
x [SEMI] * Full API review (TESTING)
O [TODO]	 - Remove redundant code
O [TODO]	 - Improve encapsulation and locality on accessing data structures
O [TODO]	 - Rework messy code
  [    ] ------------------------------------------------------------------------------
. [TODO] * Add IngrIDF-like API for implementation modules --> ABI compatibility issues
o [TODO] * Add support for include-like primitive in IDF files
  [    ] ------------------------------------------------------------------------------
. [TODO] * Heavy changes in internal data structs:
x [SEMI] 	 - Class table and object table will introduce an extra indirection **SEMI-DONE**
X [DONE] 	   * Indirection to class table 
X [DONE] 	     # API to define local and run-time classes 
x [SEMI] 	     # API to support Metaclasses -> Generic, Class-Factories,... (in study) ** Use Run-Time Class Definition API **
O [TODO] 	     # Make class table grow dynamically
X [DONE]     * Changes to make the object table grow dynamically	
  [INFO] 	     # These changes will require to revise the whole source tree. Interface shouldn't get changed
O [TODO] 	     # We will made unit test for all the system now that we must check the whole thing (**In-PROGESS**)
x [SEMI] 	- Simulation of execution stack for multithread applications. (Required for safe hotswap)
  [----] ---------------------------------------------------------------------------------------------
. [TODO] * Generic Hotswap function to run from safe points in code. 
. [----] 	- Requires:
X [DONE] 	  * API to create/destroy threads in an ordered way 
X [DONE] 	  * API to manage Mutex and Condition Variables     
X [DONE] 	  * API to deal with TLS (Thread Local Storage)
x [SEMI] 	- Write thread-safe stack-execution code
. [TODO] 	- Write simple EVE implementation to provide update scripts without external dependencies ** LOW PRIORITY **
. [TODO] 	- Then add mechanisms for doing it automagically
  [----] ------------------------------------------------------------------------------------------------------------
o [TODO] * Update primitives to work with namespaces and version numbers (classpath...)
  [----] ------------------------------------------------------------------------------------------------------------
. [TODO] * Enable some mechanism to ensure anchor points never matches classnames
  [INFO] 	- For example, prepending character '_' on anchor points
  [INFO] 	  This also can make more easy some run-time checks
  [----] ------------------------------------------------------------------------------------------------------------
X [DONE] * Update the edma_met3s. Now we are using the old one....
  [----] ------------------------------------------------------------------------------------------------------------
O [TODO] * Make it thread-safe
O [TODO] 	 - Add mutex to object struct to serialize object struct modification in multithread apps
X [DONE] 	 - Add semaphore function to serialize process access to shared structs (class table) ** MUTEX in place ***
  [----] ------------------------------------------------------------------------------------------------------------
. [TODO] * Possibility to add new virtual method to running objects. This will change the method lookup algorithm (test if it worths)
  [----] ------------------------------------------------------------------------------------------------------------
O [TODO] * Cleanup code to insert subobjects in class hierarchy. The two available functions are basically the same except for the edma_new_obj call.
. [TODO] * Add horizontal class inserting code. It requires modifications in the object struct
X [DONE] 	 Modification on object struct is done, just write the code.
. [TODO] * Extend object insertion function to allow inserting object after and before a given object
o [TODO] * Virtual Properties as renaming strategy on Supeclass Name clashing
O [TODO] * Revise method signature expansion -> multimethods
O [TODO] * Extend method structure to keep several function pointers (also multimethods)
X [DONE]   - Update data structures
O [TODO]   - Update code to use the new data structures
O [TODO] 	 - Multiple method override (stacking)
O [TODO] 	 - Multi-dispatch (Needs rework of method signatures otherwise is trivial)
. [TODO] 	 - Thread virtual method override
  [----] ------------------------------------------------------------------------------------------------------------
x [SEMI] * Add primitive 'edma_obj_commit_suicide' to allow objects kill themselves.
  [INFO] 	 - This primitive should set a flag in object struct to free it on method function return
  [----] ------------------------------------------------------------------------------------------------------------
x [SEMI] * Add thread-contex structure to contain thread dependable information
. [TODO] 	 - Per-thread error code
. [TODO] 	 - Virtual method overriden on virtual method invokation
. [TODO] 	 - Others
  [----] ------------------------------------------------------------------------------------------------------------
. [TODO] * Add extra information to anchor points
. [TODO] 	 - Required type for type-safe coding
x [SEMI] 	 - Dummy entries... not used on property/method lookup. For example role-based programming (Data is there. Code still not added)
  [----] ------------------------------------------------------------------------------------------------------------
. [TODO] * Add INNER-like method invocation primitive (to study)... Should start running from top most object
  [----] ------------------------------------------------------------------------------------------------------------
x [SEMI] * Finish singleton classes. We'll need it for interpreter interface (i.e. ANNA)
  [----] ------------------------------------------------------------------------------------------------------------
. [TODO] * Add primitive NewObjWithPolyCons to allow to use polymorphic constructors
  [----] ------------------------------------------------------------------------------------------------------------
. [TODO] * Add extended object creation primitive to allow to choose class version and namespace
  [----] ------------------------------------------------------------------------------------------------------------
. [TODO] * Add support for static methods and properties in core
O [TODO] 	 - Add support for static methods with signature.
o [TODO] 	 - Add support for static properties ???
. [TODO] 	 - Update EDMA tools for managing Static Information
  [----] ------------------------------------------------------------------------------------------------------------
x [SEMI] * Use automake/autoconf for system compiling
  [----] ------------------------------------------------------------------------------------------------------------
. [TODO] * EDMA distro package (rpm, deb,...)
  [----] ------------------------------------------------------------------------------------------------------------
O [TODO] * Extensive testing
  [----] ------------------------------------------------------------------------------------------------------------
. [TODO] * Optimizations
. [TODO] 	 - Add a cache to objects for long classpaths 
. [TODO] 	   (Problem. keep the cache consistent when object hierarchy changes)
. [TODO]   - Optimize method/property search (** On testing, Hash Table Implementation **)
X [DONE] 	   * Use a hash table
. [TODO] 	   * Use binary search against hash dictionary
  [----] ------------------------------------------------------------------------------------------------------------
x [SEMI] * Dynamic Invocation Interface (** SEMI-DONE **)
  [----] ------------------------------------------------------------------------------------------------------------
O [TODO] * Allow to install classes selectively
X [DONE] 	 - Class instalation using ines_class_register
x [SEMI] 	 - Predefined class-sets: Minimal, Full, EDNA,... With latest modifications will be easy
O [TODO] 	 - Find out how to face these features using autotools
 
Testing
-------
. [TODO] * Deep testing on updated features:
. [TODO] 	 - Clonning primitives
. [TODO] 	 - Anchor point overrwrite
. [TODO] * Test Changes to GNU/EDMA Subsystem Management API

Components
----------
. [TODO] * PIA:
. [TODO] 	 Perl->GNU/EDMA: Solve problem with stack corruption. Maybe use multiple return values
. [TODO] 	 GNU/EDMA->Perl: to do
  [----] ------------------------------------------------------------------------------------------------------------
. [TODO] * ANNA
. [TODO] 	 Python->GNU/EDMA: Use Python multiple return values to return output parameters
. [TODO] 	 GNU/EDMA->Python: to do
  [----] ------------------------------------------------------------------------------------------------------------
. [TODO] * JANE
. [TODO] 	 Java->GNU/EDMA: Dynamic invocation interface required
. [TODO] 	 GNU/EDMA->Java: Need to test old EDMA 0.3r1 code
  [----] ------------------------------------------------------------------------------------------------------------
. [TODO] * MONNA
. [TODO] 	 Mono->GNU/EDMA: Complete the interface
. [TODO] 	 GNU/EDMA->Mono: Finish property access functions
  [----] ------------------------------------------------------------------------------------------------------------
. [TODO] * Other
. [TODO] 	 CORBA interface, Bonoboo interface, GNUStep interface, gObject interface
  [----] ------------------------------------------------------------------------------------------------------------
. [TODO] * Networking
. [TODO] 	 - Classes to deal with socket options
. [TODO] 	 - Classes to deal with network address
. [TODO] 	 - Text based protocol class
. [TODO]   - select based server class
  [----] ------------------------------------------------------------------------------------------------------------
. [TODO] * Data Structures
O [START]	 - Basic data structs: lists, trees, vectors...
. [TODO] 	 - Generic Iterators
. [TODO] 	 - Data struct mutators
  [----] ------------------------------------------------------------------------------------------------------------
. [TODO] * IPC Classes
. [TODO] 	 - Shared memory, messages, ...
. [TODO] 	 - Semaphores
. [TODO]   - MONITOR SIU Proxy + CONDITION class for signalling
  [----] ------------------------------------------------------------------------------------------------------------
  [DESCOP] * OLGA Classes
  [DESCOP]   - OpenGL widgets and generic GUI facilities
  [----] ------------------------------------------------------------------------------------------------------------
. [TODO] * Complete filesystem classes
  [----] ------------------------------------------------------------------------------------------------------------
. [TODO] * Extra syscall wrapper classes
  [----] ------------------------------------------------------------------------------------------------------------
. [TODO] * Logging

Tools
-----
. [TODO] * Update GNOME IDF Wizard to edit:
O [TODO] 	 - OnLoad and OnUnload... like born and rip
o [TODO] 	 - Preferrer Anchor points editing on inheritance form
. [TODO] 	 - Parameter editing
o [TODO] 	 - Support for class templates
. [TODO] 	 - Support for literate programming
. [TODO] 	 - Support for per language type-safe warppers
o [TODO}	 - Select license
  [----] ------------------------------------------------------------------------------------------------------------
. [TODO] * Update GNOME EDMA Class Browser
O [TODO] 	 - Add tree control for grouping classes by NameSpace and/or repository
. [TODO] 	 - Show all method and properties of a class, including the inherited ones
. [TODO] 	 - Show class help
O [TODO]         - Install class menu
O [TODO]         - Load repository
X [DONE] * Write GTK versions of this tools
[----] ------------------------------------------------------------------------------------------------------------
. [TODO] * Class dependency tool to use in class intallation process
. [TODO] * Hot class install tool and translator ???
. [TODO] * Refactoring tool and binding with hotswap updating scripting

SubSystems
----------
. [TODO] * EDNA (EDMA Deployment Network Architecture). Needs more specification work
. [TODO]   - Rebuild the basic system
. [TODO] 	 - Implement the class query/locate/distribution processes
. [TODO] 	    Binary
. [TODO] 	    Source code and compilation
. [TODO] 	    Interpreted/Virtual Machines
. [TODO] 	 - Write a generic Class Server for Network deployment

Experimental
------------
X [DONE] * Object aliasing
X [DONE]   - Change an subobject class without changing object identifier ** DONE **
X [DONE] 	    Automagically solved using table object indirection 
X [DONE]   - Object temporal redirection **DONE**
X [DONE] 	    Automagically solved using table object indirection
  [----] ------------------------------------------------------------------------------------------------------------
O [TODO] * Extend EMI with new "exceptions"
O [TODO] 	 - "Method and Property not found" handlers
. [TODO] 	 - Maybe provide generic fallbacks
. [TODO]   - Make class EXCEPTION built-in...
. [TODO]   - Make class EXCEPTION multi-thread
  [----] ------------------------------------------------------------------------------------------------------------
. [TODO] * SISI (Smart Inheritance System Interface). 
. [TODO] 	 - Needs more specification work

Documentation
-------------
O [TODO] * Tutorials requires spell checking by a native English-speaker
. [TODO] * Finish User reference manual
. [TODO] * Write Programmer reference manual
. [TODO] * Write base classes documentation
. [TODO] * Complete FAQ
o [TODO] * Tutorials
O [TODO] 	 - Getting Started Series
x [SEMI]	   * GNU/EDMA Overview
x [SEMI]           * How to write GNU/EDMA applications
x [SEMI]	   * How to write GNU/EDMA classes
x [SEMI] 	   * GNU/EDMA for C/C++ Developers
x [SEMI] 	   * GNU/EDMA for Component Developers
. [TODO]           * Using the GNU/EDMA tools
O [TODO] 	 - Finish Inheritance tutorial
. [TODO] 	 - Prototype based programming tutorial
x [SEMI]         - GNU/EDMA AOP Programming
O [TODO] 	 - IngrIDF parsers tutorial
O [TODO] 	 - SIU Proxies tutorial
O [TODO] 	 - EMI Handlers tutorial
. [TODO] 	 - Build run-time specialization hierarchies (GENERICS)
  [----] ------------------------------------------------------------------------------------------------------------
X [DONE] * Examples
X [DONE] 	 - GoF Dessign Patterns Implementation (Only some of them)
X [DONE] 	 - AOP

