
Changes to the Reflex API moving from SEAL to ROOT
==================================================

General remarks:
----------------

.) Namespace change:
   The SEAL version lives in namespace "seal::reflex" the ROOT version in namespace "ROOT::Reflex"

.) Function names:
   The first letter of all function names is upper case. Further changes to function names are 
   mentioned below.

.) Iterating over containers:
   Every container provides stl like iterators which are encouraged to use. The functions provided are
   - _Begin()
   - _End()
   - _RBegin()
   - _REnd()

   for each possible container type a forward and reverse iterator type is provided. These types are:
   - Type
   - Base
   - Scope
   - Object
   - Member
   - TypeTemplate
   - MemberTemplate
   - StdString
   e.g. "Type_Iterator" and "Reverse_Type_Iterator"

   example: the container of sub types in class Scope provides
   - Type_Iterator SubType_Begin() const;
   - Type_Iterator SubType_End() const;
   - Reverse_Type_Iterator SubType_RBegin() const;
   - Reverse_Type_Iterator SubType_REnd() const;

   in addition the "old" style iteration is provided
   - the getter for a specific containee is appended with "At" (e.g. "SubTypeAt")
   - the getter for the size changed from "Count" to "Size" (e.g. "SubTypeSize") 

.) New iterator functions for parameter names and defaults for FunctionMembers, TypeTemplates and 
   MemberTemplates

.) Functions for lookup of data/function members by name have changed from "function/dataMember" 
   to "Function/DataMemberByName" and "member" to "memberByName"

.) The function to get the length of an array has changed from "length" to "ArrayLength"

.) The following functions have been removed from Object
   - invokeT - use "invoke" together with object cast instead
   - setT    - use "set" instead
   - getT    - use "get" together with "Object_Cast" instead
   - field   - use "get" instead
   
.) The function "scope" was removed from the "Type" and "Member" classes. Use function
   "DeclaringScope" instead which provides the same functionality

Detailed list of changed/added/removed functions:
-------------------------------------------------
(except the changes where the first letter of the function name changed to upper case) 

SEAL                    ->  ROOT

class Type
~~~~~~~~~~
base                    ->  BaseAt
baseCount               ->  BaseSize
base_begin              ->  Base_Begin
base_end                ->  Base_End
base_rbegin             ->  Base_RBegin
base_rend               ->  Base_REnd
dataMember              ->  DataMemberByName
dataMember              ->  DataMemberAt
dataMemberCount         ->  DataMemberSize
dataMember_begin        ->  DataMember_Begin
dataMember_end          ->  DataMember_End
dataMember_rbegin       ->  DataMember_RBegin
dataMember_rend         ->  DataMember_REnd
functionMember          ->  FunctionMemberByName
functionMember          ->  FunctionMemberAt
functionMemberCount     ->  FunctionMemberSize
functionMember_begin    ->  FunctionMember_Begin
functionMember_end      ->  FunctionMember_End
functionMember_rbegin   ->  FunctionMember_RBegin
functionMember_rend     ->  FunctionMember_REnd
length                  ->  ArrayLength
member                  ->  MemberByName
member                  ->  MemberAt
memberCount             ->  MemberSize
member_begin            ->  Member_Begin
member_end              ->  Member_End
member_rbegin           ->  Member_RBegin
member_rend             ->  Member_REnd
memberTemplate          ->  MemberTemplateAt
memberTemplateCount     ->  MemberTemplateSize
memberTemplate_begin    ->  MemberTemplate_Begin
memberTemplate_end      ->  MemberTemplate_End
memberTemplate_rbegin   ->  MemberTemplate_RBegin
memberTemplate_rend     ->  MemberTemplate_REnd
parameter               ->  FunctionParameterAt
parameterCount          ->  FunctionParameterSize
parameter_begin         ->  FunctionParameter_Begin
parameter_end           ->  FunctionParameter_End
parameter_rbegin        ->  FunctionParameter_RBegin
parameter_rend          ->  FunctionParameter_REnd
propertyList            ->  Properties
scope                   ->  "removed, use DeclaringScope instead"
subScope                ->  SubScopeAt
subScopeCount           ->  SubScopeSize
subScope_begin          ->  SubScope_Begin
subScope_end            ->  SubScope_End
subScope_rbegin         ->  SubScope_RBegin
subScope_rend           ->  SubScope_REnd
subType                 ->  SubTypeAt
subTypeCount            ->  SubTypeSize
subType_begin           ->  SubType_Begin
subType_end             ->  SubType_End
subType_rbegin          ->  SubType_RBegin
subType_rend            ->  SubType_REnd
templateArgument        ->  TemplateArgumentAt
templateArgumentCount   ->  TemplateArgumentSize
templateArgument_begin  ->  TemplateArgument_Begin
templateArgument_end    ->  TemplateArgument_End
templateArgument_rbegin ->  TemplateArgument_RBegin
templateArgument_rend   ->  TemplateArgument_REnd
type                    ->  TypeAt
typeCount               ->  TypeSize
type_begin              ->  Type_Begin
type_end                ->  Type_End
type_rbegin             ->  Type_RBegin
type_rend               ->  Type_REnd
typeTemplate            ->  SubTypeTemplateAt
typeTemplateCount       ->  SubTypeTemplateSize
typeTemplate_begin      ->  SubTypeTemplate_Begin
typeTemplate_end        ->  SubTypeTemplate_End
typeTemplate_rbegin     ->  SubTypeTemplate_RBegin
typeTemplate_rend       ->  SubTypeTemplate_REnd

class Scope
~~~~~~~~~~~
base                    ->  BaseAt
baseCount               ->  BaseSize
base_begin              ->  Base_Begin
base_end                ->  Base_End
base_rbegin             ->  Base_RBegin
base_rend               ->  Base_REnd
dataMember              ->  DataMemberByName
dataMember              ->  DataMemberAt
dataMemberCount         ->  DataMemberSize
dataMember_begin        ->  DataMember_Begin
dataMember_end          ->  DataMember_End
dataMember_rbegin       ->  DataMember_RBegin
dataMember_rend         ->  DataMember_REnd
functionMember          ->  FunctionMemberByName
functionMember          ->  FunctionMemberAt
functionMemberCount     ->  FunctionMemberSize
functionMember_begin    ->  FunctionMember_Begin
functionMember_end      ->  FunctionMember_End
functionMember_rbegin   ->  FunctionMember_RBegin
functionMember_rend     ->  FunctionMember_REnd
member                  ->  MemberByName
member                  ->  MemberAt
memberCount             ->  MemberSize
member_begin            ->  Member_Begin
member_end              ->  Member_End
member_rbegin           ->  Member_RBegin
member_rend             ->  Member_REnd
memberTemplate          ->  MemberTemplateAt
memberTemplateCount     ->  MemberTemplateSize
memberTemplate_begin    ->  MemberTemplate_Begin
memberTemplate_end      ->  MemberTemplate_End
memberTemplate_rbegin   ->  MemberTemplate_RBegin
memberTemplate_rend     ->  MemberTemplate_REnd
propertyList            ->  Properties
scope                   ->  ScopeAt
scopeCount              ->  ScopeSize
scope_begin             ->  Scope_Begin
scope_end               ->  Scope_End
scope_rbegin            ->  Scope_RBegin
scope_rend              ->  Scope_REnd
subScope                ->  SubScopeAt
subScopeCount           ->  SubScopeSize
subScope_begin          ->  SubScope_Begin
subScope_end            ->  SubScope_End
subScope_rbegin         ->  SubScope_RBegin
subScope_rend           ->  SubScope_REnd
subType                 ->  SubTypeAt
subTypeCount            ->  SubTypeSize
subType_begin           ->  SubType_Begin
subType_end             ->  SubType_End
subType_rbegin          ->  SubType_RBegin
subType_rend            ->  SubType_REnd
templateArgument        ->  TemplateArgumentAt
templateArgumentCount   ->  TemplatArgumentSize
templateArgument_begin  ->  TemplateArgument_Begin
templateArgument_end    ->  TemplateArgument_End
templateArgument_rbegin ->  TemplateArgument_RBegin
templateArgument_rend   ->  TemplateArgument_REnd
typeTemplate            ->  SubTypeTemplateAt
typeTemplateCount       ->  SubTypeTemplateSize
typeTemplate_begin      ->  SubTypeTemplate_Begin
typeTemplate_end        ->  SubTypeTemplate_End
typeTemplate_rbegin     ->  SubTypeTemplate_RBegin
typeTemplate_rend       ->  SubTypeTemplate_REnd

class Member
~~~~~~~~~~~~
parameterCount          ->  FunctionParameterSize
parameterDefault        ->  FunctionParameterDefaultAt
                        ->  FunctionParameterDefault_Begin
                        ->  FunctionParameterDefault_End
                        ->  FunctionParameterDefault_RBegin
                        ->  FunctionParameterDefault_REnd
parameterName           ->  FunctionParameterNameAt
                        ->  FunctionParameterName_Begin
                        ->  FunctionParameterName_End
                        ->  FunctionParameterName_RBegin
                        ->  FunctionParameterName_REnd
propertyList            ->  Properties
scope                   ->  "removed, use DeclaringScope instead"
templateArgument        ->  TemplateArgumentAt
templateArgumentCount   ->  TemplateArgumentSize
templateArgument_begin  ->  TemplateArgument_Begin
templateArgument_end    ->  TemplateArgument_End
templateArgument_rbegin ->  TemplateArgument_RBegin
templateArgument_rend   ->  TemplateArgument_REnd
type                    ->  TypeOf

class Object
~~~~~~~~~~~~
type                    ->  TypeOf
field                   -> "removed, use Get"
getT                    -> "removed, use Get with Object_Cast"
invokeT                 -> "removed, use Invoke with Object_Cast"
setT                    -> "removed, use Set"

class Base
~~~~~~~~~~
no changes

class PropertyList
~~~~~~~~~~~~~~~~~~
propertyCount           ->  PropertySize

class TypeTemplate
~~~~~~~~~~~~~~~~~~
instantiation           ->  TemplateInstanceAt
instantiationCount      ->  TemplateInstanceSize
instantiation_begin     ->  TemplateInstance_Begin
instantiation_end       ->  TemplateInstance_End
instantiation_rbegin    ->  TemplateInstance_RBegin
instantiation_rend      ->  TemplateInstance_REnd
parameterCount          ->  TemplateParameterSize
parameterDefault        ->  TemplateParameterDefaultAt
                        ->  TemplateParameterDefault_Begin
                        ->  TemplateParameterDefault_End
                        ->  TemplateParameterDefault_RBegin
                        ->  TemplateParameterDefault_REnd
parameterName           ->  TemplateParameterNameAt
                        ->  TemplateParameterName_Begin
                        ->  TemplateParameterName_End
                        ->  TemplateParameterName_RBegin
                        ->  TemplateParameterName_REnd

class MemberTemplate
~~~~~~~~~~~~~~~~~~~~
instantiation           ->  TemplateInstanceAt
instantiationCount      ->  TemplateInstanceSize
instantiation_begin     ->  TemplateInstance_Begin
instantiation_end       ->  TemplateInstance_End
instantiation_rbegin    ->  TemplateInstance_RBegin
instantiation_rend      ->  TemplateInstance_REnd
parameterCount          ->  TemplateParameterSize
parameterDefault        ->  TemplateParameterDefaultAt
                        ->  TemplateParameterDefault_Begin
                        ->  TemplateParameterDefault_End
                        ->  TemplateParameterDefault_RBegin
                        ->  TemplateParameterDefault_REnd
parameterName           ->  TemplateParameterNameAt
                        ->  TemplateParameterName_Begin
                        ->  TemplateParameterName_End
                        ->  TemplateParameterName_RBegin
                        ->  TemplateParameterName_REnd

class Any
~~~~~~~~~
type                    ->  TypeInfo


2005-10-31 Stefan
	* added stl like iterators for all containers of Types, Scopes, Members, etc. The following 
	  iterators have been introduced: type_iterator, base_iterator, scope_iterator, object_iterator
	  member_iterator, typeTemplate_iterator, memberTemplate_iterator and their reverse typese
	  (e.g. reverse_type_iterator). Every container for one of these types contains now the 
	  functions begin(), end(), rbegin() and rend() (e.g. Type::dataMember_begin()) which return
	  a (reverse_)iterator.
	
2005-10-10 Pere
	* fixed ProperyList::propertyAsString(key) to return a empty string when the key is not
	  existing (reported by RD Schaffer). Added test case in test_Reflex_unit.

2005-09-16 Stefan
	* changes for invocation of overloaded methods. The "invoke" function takes an
	  additional argument of type "const Type &" which represents the type of the overloaded
	  function. If function methods are overloaded and no Type is passed the first one is taken.
	* Object.h: the following functions are deprecated and will be removed in a future release
	  invokeT, getT, setT, field (explanations what functions to use instead are given in the header)
	* moving makeVector utility from TypeBuilder.h to Tools.h

2005-09-01 Stefan
	* added selection functionality from within c++, credits to Scott Snyder (snyder@fnal.gov)

2005-08-26 Stefan
	* TypeBase.cpp: change allocate to malloc(size), deallocate to free(instance), 
	  when destructing and operator delete called no deallocation necessary

2005-08-20 Stefan
	* adding parameter "signature" for member lookup by name
	* adding function dataMember(const std::string&) for data member lookup by name
	* adding function functionMember(const std::string&, const std::string&="") for
	  function member lookup by name (and optionally signature)
	* a signature can be passed optionally with the function name argument to invoke 
	  functions of Object. separated by semi-colon (e.g. "foo;int (void)")

2005-07-27 Stefan
	* Object.h: added function destruct(), fixes for templated get, invoke functions

2005-07-05 Stefan
	* Class.cpp: when destructing a type which has no destructor defined (e.g. for complex types with
	only simple members), instead of invoking the destructor stub, call operator delete and free

2005-07-04 Stefan
	* Member : added functions declaringScope, declaringType which return the Scope/Type
	the members lives in (i.e. the same)
	* Member : function scope will be depricated, use declaringScope instead (same functionality)

2005-07-01 Stfan
	* gcc4 compliance

2005-06-26 Stefan
	* Type.h: add Type::declaringScope

2005-06-24 Stefan
	* Any.h : cleanup for Root compliance
	* Object.h,.cpp: fixed templated get, invoke functions
	* stl_hash.h: removed namespace define for icc compilers 

2005-06-17 Pere
	* CollectionProxy.h: commited changes from Markus

2005-06-10 Pere
	* TypeBuilder.cpp(.h) added EnumTypeBuilder() function

2005-06-07 Stefan
	* updated autotool configuration files

2005-06-02 Stefan
	* Typedef.h : forwarding of several functions for class/struct/templated type/typedef

2005-06-01 Stefan
	* Tools.cpp: fixed return value of cxxabi::demangle for stl string (i.e. std::basic_string<char> 
	  instead of std::string)

2005-05-30 Stefan
	* TypeTemplate.h: added operator ==

2005-05-25 Stefan
	* ClassBuilder.h: new class ClassBuilderNT which is a non templated version of ClassBuilder
	* Kernel.h: new dummy structs UnnamedClass/Namespace/Struct/Union which will be attached to such types

2005-05-20 Stefan
	* Scope/Type(Name).h: new function "const char* name_c_str() const" which 
	returns the char* to the unqualified name (performance reasons)
	* bool isClass() checks now for class/instantiated class/struct types
	* Type/Scope(Name).h: contain a vector of Types/Scopes which allows non
	mutable access to Types/Scopes by number (will not change) with 
	Type::type(size_t) or Scope::scope(size_t)

2005-04-26 Stefan
	* fixed bug #8105 overview: Reflex::Type non-equality does not work
	* added operator != also for Scope, Object, Member
	* Object.h: added forward function "Type dynamicType() const"

2005-04-18 Stefan
	* Type/Scope/Member(Base): new function templateFamiliy which
	returns the generalized template type (TypeTemplate, MemberTemplate)
	* Remove Distillerbase - problem with vc71 compiler. Implementations 
	moved to static functions.
	* Fixed [bug #7973] overview: Multiple errors in reflex
	(sic!) (addendum: 2 function implementations in Meberbase fixed)
	* VariableBuilder.h/.cpp: New class for generation of data
	members in namespaces.

2005-04-05 Stefan
	* Type/Scope(Base).h/.cpp, Class.h/.cpp, Enum.h, Union.h: new overloaded
	  functions to add Function/Datamembers, Subscopes/types (with complete parameterlist)   

2005-03-17 Stefan
	* Object.h: new function castObject
	* Typdef.h, Typedef.cpp, Kernel.cpp: Generate aliases to fundamentals as Typedefs with typeType FUNDAMENTAL

2005-03-15 Stefan
	* TypeName.h private function setTypeInfo to reset the hash_map entry 
	* TypeBase.cpp if the TypeName exists and if a TypeName with the
	same type_info exists reset it in the hash_map
	
2005-03-14 Stefan 
	* Moved several header files from the include directory to src
	* New classes Union,Enum,Typdef/BuilderImpl
	* Building typedefs always with typeid(UnknownType)
	
2005-03-07 Stefan
	* Changes for compilation with sun forte 
	* Object.h: names of functions returning T are postfixed with T

2005-03-06 Stefan
	* added CppUnitLite test framework
	* updated autotool files added tests for autotools

2005-03-04 Stefan
	* TypeBase.cpp: removing fundamentals from global namespace

2005-03-01 Stefan
	* added support for enums and typedefs in classes
	* Object.h: added operator bool() and implementation for object_cast
	* Scope.h, ScopeBase.h: added isEnum, isUnion

2005-02-17 Stefan
	* FunctionBuilder.cpp: added generation of templated free functions

2005-02-17 Stefan
	* Member/Type/Scope(Base).h: one function "bool	isTemplateInstance() const "
	  to check whether a Member/Type is templated. All other functions removed.
	
2005-02-16 Stefan
	* added functionality for MemberTemplates
	* added unit tests for MemberTemplates
	
2005-02-15 Stefan
	* ClassTemplateInstance: fixed name()
	* Type.h, TypeBase.h: added forwarding functions for instantation/Count()
	
2005-02-14 Stefan
	* TypeTemplate: removed template parameter name information from name() 
	* Template implementation, added builder capabilities

2005-02-11 Stefan
	* Template implementation for type templates
	* Type.h: new function isEquivalentTo(const Type &)
	
2005-02-10 Stefan
	* Type.h: type equivalence operator 

2005-02-08 Pere
        * Fixed [bugs #6685] Type equivalence operator.
          The name generated by buildTypeName() functions should be fully scoped and
          qualified.
          
2005-02-01 Pere
	* reintroduced the TRANSIENT modifier

2005-01-25 Stefan
	* fixed: bug #5420 overview: typeInfo() always returns NullType for typedefs.
	
2005-01-24 Stefan
	* added accessor to (function)member context

2005-01-21 Stefan
	* added autoconf, automake scripts
	* removed virtual from destructors of Object and PropertyList wrappers

2005-01-20 Stefan Roiser
	* Member: parameterCount(bool required) when true return only num
	of required parameters

2005-01-19 Stefan Roiser
	* fix for static argv0, now function returning string

2005-01-14 Stfan Roiser
	* changed Function building to respect typedefs as separate types
	* Callback.cpp: static vector returned by function 

2005-01-13 Stefan Roiser
	* removed functions "std::string fullName()" and "std::string name(bool)"
	* new function std::string name(unsigned int mod) mod can be a
	combination of enums "SCOPED", "FINAL", "QUALIFIED" (shortcuts
	"S","F","Q")
	* Enums and Unions are now Scopes and Types (removed
	Union/EnumInfo classes)
	* fixed bug #6247 overview: Class::pathToBase returns invalid
	objects.
	

2005-01-11 Stefan Roiser
	* removed compiler warnings on linux
	* testDict will only compile with scram config > 1_5_3 (template depth)
	* added Buildfile to test/generate
 
2005-01-10 Stefan Roiser
	* get, invoke functions of Members return Object (before void*)

2005-01-06 Pere Mato
	* Fix bug #6161 overview: reflex::Scope.subScope*() do not give access 
	to classes which inherit from others.

2005-01-06 Pere Mato
	* added Reflex/Builder/CollectionProxy.h header file. This is need to generate 
	  extra code to handle collections in a generic way.

2005-01-05 Stefan Roiser
	* removed Class wrapper
	* enhancing Type with functionality of Class and Scope

2005-01-03 Stefan Roiser
	* new wrapper for Class (class Class is now ClassImpl)
	* new wrapper for PropertyList (class PropertyList is now
	  PropertyListImpl). PorpertyLists are handled in TypeBase,
	  ScopeBase and MemberBase
	* a lot of changes in the documentation from Together 
	
	
2004-12-16 Pere Mato
 	* Tools.h(.cpp): added new method Tools::getScopeName() that takes into account templated types
 	* ScopeBase.cpp: adapted to use Tools::getScopeName(). Changed ScopeBase::name() to return 
 	                 the name of the scope without its declaring scope. 
 	* TypeBase.cpp: adapted to use Tools::getScopeName()
        * test_Reflex_unit.cpp: removed "&" in type name
        
2004-12-14 Pere Mato
 	* removed __NOPROPERTYLIST__ static to avoid linking problems on Windows.

2004-12-01 Stefan Roiser
 	* fixed gcc compiler warnings
	* removal of properties in ScopeBase, TypeBase, MemberBase
	
2004-11-30 Stefan Roiser
 	* finished revision, moved from pointer based to object based implementation

2004-11-05 Stefan Roiser
	* starting major revision (last tag before is Reflex_0_0_4)

2004-11-04 Stefan Roiser
	* resolving ambigous Class::asInstantiatedTemplateClass()
	* moved several destructors to implementation files
	
2004-11-01 Stefan Roiser
	* fixed bug #5315 overview: Remove unnecessary virtual inheritance.

2004-10-21 Stefan Roiser
	* TypeBuilder.h: Changed OffsetOf macro to also support offset calculation
	  from templated types (max 16)	
	* added CppUnit test to check offset calculation from templated classes
	* added test classes (testDict2) for offset calculation from templated classes

2004-10-12 Stefan Roiser, Pere Mato
	* Changed hash_map for name to type and name to scope lookup key
	  from std::string to const char* (avoids duplication of information)

2004-10-11 Stefan Roiser
	* Introduced new modifiers COPYCONSTRUCTOR, OPERATOR, CONVERTER
	* Reactivated modifiers INLINE, EXTERN
	* Changed modifiers type from unsigned char to unsigned int
	* Porting to Mac OSX
	* Renamed FunctionBuilder to FunctionBuilderT
	* Renamed FunctionBuilder2 to FunctionBuilder
	* Removed default constructor from Scope (not needed anymore)
	* Renamed Reflex.cpp to Kernel.cpp (header file name)
	* Tried to apply common coding style to all files

2004-10-08 Pere mato, Stefan Roiser
        * Added FunctionBuilder stuff
        * Added NamespaceBuilder.cpp
        * Creation of declaring Namespaces if creating a Namespace
        * Added Function and Operator test
         
2004-09-13 Pere Mato
        * Class.h: changed name() to return by reference instead of by value
        * DataMember.h, FunctionMember.h, Member.h: moved isPrivate(), isProtected(), is Public() to base 
          class Member.
        * ScopeBase.h: changed name() to return by reference instead of by value
        * ScopeBase.h: added addSubType() and removeSubType() methods
        * Type.h, TypeBase.h: changed name() to return by reference instead of by value
        * TypeBase.h: modified constructor to associate each Type with a Scope
        * Added NamespaceBuilder.h
        * added test_Reflex_generate to generate header files from Reflex
        
2004-09-01 Pere Mato
	* New Iteration with ClassBuilder using an argument Type* instead of using templated methods
	  This is to avoid the problem of caused by having only forward declared classes.

2004-08-03 Pere Mato
	* New Iteration with almost complete functionality

2004-06-21 Stefan Roiser
	* Initial import 
