MantisBT - Open CASCADE
View Issue Details
0024023Open CASCADE[OCCT] OCCT:Foundation Classespublic2013-06-10 15:412018-07-15 11:15
frpons 
abv 
normalfeature 
closedfixed 
ALL
[OCCT] 6.6.0 
[OCCT] 7.0.0[OCCT] 7.0.0 
0024023: Revamp the OCCT Handle
Replace the actual implementation of shared pointer used by OCCT (Handle) by a more modern solutions.
Forum thread
http://dev.opencascade.org/index.php?q=node/737 [^]
No tags attached.
parent of 0024805closed apn Open CASCADE Eliminate unused static functions and methods: ShallowDump(), ShallowCopy(), STANDARD_TYPE(...) 
parent of 0024806closed bugmaster Open CASCADE Extend macro DEFINE_STANDARD_RTTI by additional argument specifying base class 
parent of 0024814closed abv Open CASCADE Avoid using explicit names of Handle classes 
parent of 0026373new abv Open CASCADE Merge NCollection_Handle with opencascade::handle 
parent of 0024947closed abv Open CASCADE Redesign OCCT legacy type system 
parent of 0029961closed bugmaster Open CASCADE Foundation Classes - NCollection_Shared constructor passes arguments by copy 
related to 0024870closed abv Open CASCADE Provide OCCT RTTI test cases 
related to 0026377closed abv Open CASCADE Passing Handle objects as arguments to functions as non-const reference to base type is dangerous 
related to 0026457closed abv Open CASCADE Failed build with OCCT_DEBUG enabled 
related to 0024895closed bugmaster Community 'PLUGINFACTORY' has C-linkage specified, but returns user-defined type 'Handle_Standard_Transient' which is incompatible with C 
related to 0026497closed bugmaster Community Restore explicit hierarchy of handles 
related to 0026549closed abv Open CASCADE Provide move constructors and operators for basic classes 
related to 0027104closed abv Community DownCast() cannot return null for mismatched handle 
related to 0027111closed abv Community Add generalized copy constructor in handle class for old compilers 
related to 0027563closed bugmaster Open CASCADE Foundation Classes, opencascade::handle - make operator*() consistent with operator->() 
child of 0024002closed abv Open CASCADE Overall code and build procedure refactoring 
Not all the children of this issue are yet resolved or closed.
Issue History
2013-06-10 15:41frponsNew Issue
2013-06-10 15:41frponsAssigned To => frpons
2013-06-10 15:42frponsRelationship addedchild of 0024002
2013-06-10 16:05abvNote Added: 0024715
2013-06-10 16:11abvNote Added: 0024716
2014-03-04 08:21abvNote Added: 0028111
2014-03-11 13:20abvNote Added: 0028192
2014-04-02 08:59abvNote Added: 0028612
2014-04-02 09:31abvNote Added: 0028613
2014-04-02 09:31abvAssigned Tofrpons => abv
2014-04-02 09:31abvStatusnew => assigned
2014-04-07 20:11abvRelationship addedparent of 0024805
2014-04-08 09:27abvRelationship addedparent of 0024806
2014-04-09 18:51abvRelationship addedparent of 0024814
2014-04-24 10:58kgvRelationship addedrelated to 0024870
2014-07-29 11:13Roman LyginNote Added: 0030463
2014-07-29 11:19Roman LyginNote Added: 0030464
2014-09-11 19:03abvTarget Version => 7.0.0
2015-06-12 09:09gitNote Added: 0042121
2015-06-17 06:52gitNote Added: 0042174
2015-06-22 07:03gitNote Added: 0042290
2015-06-22 19:27gitNote Added: 0042323
2015-06-24 15:55abvRelationship addedparent of 0026373
2015-06-24 19:50gitNote Added: 0042433
2015-06-25 06:38gitNote Added: 0042434
2015-06-25 18:07gitNote Added: 0042463
2015-06-26 06:32gitNote Added: 0042470
2015-06-26 19:29gitNote Added: 0042513
2015-06-26 19:34abvNote Added: 0042514
2015-06-28 13:39abvRelationship addedparent of 0024947
2015-06-28 13:57abvRelationship addedrelated to 0026377
2015-06-28 14:50gitNote Added: 0042516
2015-07-17 15:59abvRelationship addedrelated to 0026457
2015-07-20 14:09abvAssigned Toabv => kgv
2015-07-20 14:09abvStatusassigned => resolved
2015-07-20 14:09abvCategoryOCCT:Application Framework => OCCT:Foundation Classes
2015-07-20 14:22kgvAssigned Tokgv => bugmaster
2015-07-20 14:22kgvStatusresolved => reviewed
2015-07-22 07:35gitNote Added: 0043256
2015-07-22 07:37gitNote Added: 0043257
2015-07-22 07:41gitNote Added: 0043258
2015-07-22 16:27gitNote Added: 0043306
2015-07-22 16:40gitNote Added: 0043310
2015-07-22 16:45gitNote Added: 0043312
2015-07-22 16:51gitNote Added: 0043315
2015-07-23 11:55abvChangeset attached => occt master 7f22979e
2015-07-23 11:55abvChangeset attached => occt master 5b111128
2015-07-23 11:55abvChangeset attached => occt master caaeed1b
2015-07-23 11:55abvChangeset attached => occt master 543a9964
2015-07-23 11:55abvChangeset attached => occt master a1eb3afd
2015-07-23 11:55abvChangeset attached => occt master c5f3a425
2015-07-23 11:55abvChangeset attached => occt master ce8b059a
2015-07-23 11:55abvChangeset attached => occt master 83eaf3e8
2015-07-23 11:55abvChangeset attached => occt master c04c30b3
2015-07-23 11:55abvChangeset attached => occt master 35c0599a
2015-07-23 11:55abvChangeset attached => occt master e7195ab4
2015-07-23 11:55abvAssigned Tobugmaster => abv
2015-07-23 11:55abvStatusreviewed => verified
2015-07-23 11:55abvResolutionopen => fixed
2015-07-27 10:34kgvRelationship addedrelated to 0024895
2015-07-30 01:58Roman LyginRelationship addedrelated to 0026497
2015-07-30 14:30kgvRelationship addedparent of 0026477
2015-08-11 22:59abvRelationship addedrelated to 0026549
2016-01-21 16:30Roman LyginRelationship addedrelated to 0027104
2016-01-25 20:35Roman LyginRelationship addedrelated to 0027111
2016-04-20 15:43aivFixed in Version => 7.0.0
2016-04-20 15:49aivStatusverified => closed
2016-08-06 14:09kgvRelationship addedrelated to 0027563
2018-07-15 11:15kgvRelationship addedparent of 0029961

Notes
(0024715)
abv   
2013-06-10 16:05   
To add technical details, here are some practical concerns for this revamping.
The main challenge is to do this keeping existing interface so as to avoid a need to update all existing OCCT-dependent code...

1. Interaction with RTTI

Handle classes are used together with OCCT-specific implementation of run-time type identification (RTTI). For that, specific methods IsKind(), DynamicType(), are added to each class manipulated by Handle, and static function Standard_Type_* is created to instantiate relevant type object.

The latter static function represents particular problem: it has to be instantiated in C++ code. This is (major) reason of existence of extra files with extension ixx in drv subfolder. It is very desirable to get rid of this necessity as this would allow to eliminate these unnecessary files.

A possible way for this is to use C++ RTTI (typeid, typeinfo, dynamic_cast) instead of OCCT-specific one.

2. Inheritance of Handle classes

Handle classes in OCCT inherit each other, reflecting inheritance of the handled classes. This allow Handles to be passed by reference in function arguments, which is not possible e.g. with boost smart pointers. This is quite useful feature, and it is highly desirable to keep it.

3. No weak handles

Handles do not provide weak pointers, would be worth adding.
(0024716)
abv   
2013-06-10 16:11   
Here is result of analysis of possibility to replace OCCT RTTI by standard C++ one, made by mpv:

-------

During the research of removal of "Standard_Type" class from OCCT performance in order to remove "RTTI" definitions is C++ code the next conclusions were achieved:

1. Modifications of "Standard" package must be serious, but most of them are simplification of existing code:
- remove Standard_Type and Standard_AncestorIterator classes
- # define STANDARD_TYPE(aType) typeid(aType)
- "typedef type_info Handle_Standard_Type;" in new Standard_Type.hxx for "imported Type;" in Standard.cdl
- remove "aType##_Type_()" method definitions from all atomic classes, like "Standard_Boolean_Type_()", so, some ".cxx" files also should be removed from "Standard" packages
- minor modification in WOK generated files: remove "class Standard_Type;" definition from all produced files
- changes in "HashCode" methods which use size of Standard_Type class

2. Modifications needed outside of "Standard" packages are minimal, like usage of Standard_AncestorIterator only in one method:
- Message_Algorithm::SendStatusMessages;

3. But serious limitation faced during this development is "IsKind" methods, used widely in OCCT sources. The problem is that the only method that can be used here is "dynamic_cast", but it is impossible to apply it on "type_info" object given as an argument. Visible solution here is usage of templates or macros instead of current API of "IsKind" method. But this requires serious changes in OCC sources and depended products and application.
(0028111)
abv   
2014-03-04 08:21   
One more point that could be addressed is incompatibility of Handle() macro with same-named class defined in CGAL library, described in
http://www.opencascade.org/org/forum/thread_23768/?forum=3 [^]
(0028192)
abv   
2014-03-11 13:20   
Idea by szv: we can provide transparent down casting for Handles, e.g.:

Handle(Geom_Curve) aC = ...;
Handle(Geom_BSplineCurve) aBspl = aC; // transparent down cast
(0028612)
abv   
2014-04-02 08:59   
One more feature desired from handles is to be able to interact correctly with namespaces. Current implementation has a problem in that: since Handle(Class) is expanded to Handle_Class, it does not work if Class is defined not in the current namespace and has to be prefixed by namespace name. This can be avoided either by changing the Handle definition to Class_Handle, or by switching to use of templates.
(0028613)
abv   
2014-04-02 09:31   
We will have to use macros to add standard definitions for OCCT RTTI in classes inheriting Transient anyway. Currently this is not a big problem since most of instances of such macros are generated from CDL. When we get rid of CDL, these macros become sources. Then it will be easy to get inconsistent definition of such macro vs. actual class definition (w.r.t. class name, base class name). Thus we need some tool to check such consistency -- either a checking script, or a C++ compile time assert (or both).
(0030463)
Roman Lygin   
2014-07-29 11:13   
Currently OCC handles offer the following two valuable advantages:

1. The least possible memory footprint. An extra cost is just a sizeof(int) for reference counter in the Standard_Transient.
    (We don't count sizeof(void*) for vtbl in Standard_Transient assuming that these are its own costs).
    This makes the handle an efficient alternative to shared_ptr when dealing with large number of objects where each byte counts.
    In comparison, extra footprint of std::shared_ptr in MSVS2010 is sizeof(void*) + 2 * sizeof (long) + sizeof (void*) + sizeof (void*)

2 Ability to traverse hiearchy of types (using Standard_AncestorIterator).
    Consider the following use case (from CAD Exchanger). There is a map (std::unordered_map) of {Handle_Standard_Type, V}, for instance a map of processors for entities.
    To find a value V for type T the map owner first finds if there is a direct record {T, V}. If not it searches for {Parent_of_T, V} and so on until it finds a record or
    finishes at {STANDARD_TYPE(Standard_Transient), V}. For example, this is used to process all Geom_Curve's in one way, and Geom_TrimmedCurve in some other way.
    
    Standard RTTI (std::type_info) does not provide the ability to retrieve a direct ancestor. It only allows to compare if one type_info is an ancestor
    (not necessarily immediate) of the other. Thus implementation of the above logic would hardly be possible.

So please consider the above points during refactoring.
Thank you.
(0030464)
Roman Lygin   
2014-07-29 11:19   
Regarding the above "transparent down casting for Handles, e.g.:

Handle(Geom_Curve) aC = ...;
Handle(Geom_BSplineCurve) aBspl = aC; // transparent down cast "

Please do NOT enable that !

This contradicts with strict type cast which C++ applies to the pointers (including shared_ptr). You should receive a compilation time error and address the issue in the compile, not in run time.

Handle is essentially a pointer and hence should inherit the same logic.

You should be able to write
Handle_Geom_Curve aC = aBspl;
but not the other way around.

Just like you would be able to write:
Geom_Curve* aCP = aBsplP; //where aBsplP is Geom_BSplineCurve
or
std::shared_ptr<Geom_Curve> aCSP = aBsplSP; //where aBsplSP is shared_ptr<Geom_BSplineCurve>

and not the other way around.

Detecting errors at compile time is the cheapest, so all the efforts should be applied to retain that.
(0042121)
git   
2015-06-12 09:09   
Branch CR24023_4 has been created by abv.

SHA-1: 6762ff6c43d9d0786dac7b1c35ca85640e5fb292


Detailed log of new commits:

Author: abv
Date: Fri Jun 12 09:08:32 2015 +0300

    Next step...

Author: abv
Date: Tue Jun 9 06:27:30 2015 +0300

    First attempt to make non-inheriting handle

Author: abv
Date: Tue Apr 8 16:26:21 2014 +0400

    0024023: Revamp the OCCT Handle
    
    *** NOTE: THIS CHANGE IS INCOMPLETE ***
    
    Macro defining Handle class is replaced by template class implementing the same concept (defined in Standard_Handle.hxx and Standard_Transient.hxx).
    
    Header file Standard_DefineHandle.hxx becomes deprecated: the only useful macro DEFINE_STANDARD_RTTI is defined now in Standard_Type.hxx. Standard_DefineHandle.hxx is kept for compatibility, it defines macros previously used for definition of Handles and RTTI as empty.
    
    Definition of macro Handle() and STANDARD_TYPE() moved from Standard_Macro.hxx to Standard_Handle.hxx (new file) and Standard_Type.hxx, respectively.
    
    Conflicts:
        src/Standard/Standard_Macro.hxx
(0042174)
git   
2015-06-17 06:52   
Branch CR24023_4 has been updated by abv.

SHA-1: 0dccaaa1c8f7fe8c59d098637fe6f1a92e2e792f


Detailed log of new commits:

Author: abv
Date: Wed Jun 17 06:52:06 2015 +0300

    Corrections

Author: abv
Date: Tue Jun 16 22:01:37 2015 +0300

    Automatic upgrade by occt_upgrade . -handle

Author: abv
Date: Tue Jun 16 21:39:52 2015 +0300

    Corrections in Handle

(0042290)
git   
2015-06-22 07:03   
Branch CR24023_4 has been updated by abv.

SHA-1: 8fb25435452a8e50aba54ebaa6f888bdc4ab2f05


Detailed log of new commits:

Author: abv
Date: Mon Jun 22 07:02:42 2015 +0300

    Corrections in TKMath

Author: abv
Date: Sat Jun 20 20:30:22 2015 +0300

    TKernel made compilable

(0042323)
git   
2015-06-22 19:27   
Branch CR24023_4 has been updated by abv.

SHA-1: ce40a2cf0903cc56ad9bdfe9861e72b2074fe3c6


Detailed log of new commits:

Author: abv
Date: Mon Jun 22 19:26:57 2015 +0300

    Added missing header

Author: abv
Date: Mon Jun 22 18:31:16 2015 +0300

    Conversion of handle to const & to another handle restricted to compatible types only; constructor from other handle and method reset() added; some ambiguities resolved

Author: abv
Date: Mon Jun 22 18:29:59 2015 +0300

    Clean-up of poor code in Modeling Data exhibited due to templated handle

Author: abv
Date: Mon Jun 22 11:51:55 2015 +0300

    HashCode() added for Handle

(0042433)
git   
2015-06-24 19:50   
Branch CR24023_4 has been updated by abv.

SHA-1: a414f24a294a998d68e3d2bad84e9f5f01199593


Detailed log of new commits:

Author: abv
Date: Wed Jun 24 19:50:01 2015 +0300

    Next pack of code corrections...

Author: kgv
Date: Thu Apr 24 10:57:26 2014 +0400

    0024870: Provide OCCT RTTI test cases
    
    Test commands for checking performance and functionality of OCCT handles and RTTI added.
    New test case added for that: test perf fclasses handle

Author: abv
Date: Tue Jun 23 20:19:45 2015 +0300

    Forgotten changes in headers

Author: abv
Date: Tue Jun 23 19:30:05 2015 +0300

    Casting constructor of handle is made conditional (only for compatible types); operator casting to const reference to handle to base type is disabled for MSVC below below v12

Author: abv
Date: Tue Jun 23 19:28:12 2015 +0300

    Updates of rest of MOA and part of OCAF

Author: abv
Date: Tue Jun 23 15:17:49 2015 +0300

    Corrections in Handle and Standard_Persistent

Author: abv
Date: Tue Jun 23 14:47:23 2015 +0300

    Code adaptation for new Handle
    
    Adaptor3d_CurveOnSurface: added method Load() with two parameters, allowing to avoid ambiguity of cast of handles when calling separate methods Load() for curve and surface
    BOPAlgo, BOOPDS_DS, GeomInt, IntPatch, IntTools, BRepMAT2d, MAT2d, ShapeCustom: handle argument passed by reference made const
    BRepGProps, Law: removed typedefs that used Handle macro to define class name
    BRepMesh, ShapeFix: Includes of headers "Handle_...hxx" are removed
    IntPatch: direct cast of reference to handle replaced by DownCast()
    MAT, CDM: use This() method to initialize handle to class instance from within its const methods
    ShapeAnalysis: switch to use of remaining Append() method for sequences
    
    Missing headers added; wrong use of macro Handle() corrected.
    Code corrected to avoid ambiguous situations due to changed implementation of Handle.

(0042434)
git   
2015-06-25 06:38   
Branch CR24023_5 has been created by abv.

SHA-1: 8c9ff1295f93592b641e467baccc764632964398


Detailed log of new commits:

Author: abv
Date: Thu Jun 25 00:47:17 2015 +0300

    0024023: Revamp the OCCT Handle - Nullify
    
    Assignment of handle to NULL replaced by call to method Nullify()

Author: abv
Date: Thu Jun 25 01:06:37 2015 +0300

    0024023: Revamp the OCCT Handle - unsorted

Author: abv
Date: Thu Jun 25 00:45:56 2015 +0300

    0024023: Revamp the OCCT Handle - cast
    
    Code corrected to eliminate passing object to function as non-const reference to handle of the base type.
    DownCast is used instead of C-style cast to handle to derived type.

Author: abv
Date: Thu Jun 25 00:37:41 2015 +0300

    0024023: Revamp the OCCT Handle - this
    
    Construction of handle from const pointer to class corrected to be explicit

Author: abv
Date: Wed Jun 24 23:40:44 2015 +0300

    0024023: Revamp the OCCT Handle - ambiguity
    
    Code corrected to avoid ambiguous situations due to changed implementation of Handle.
    
    In Adaptor3d_CurveOnSurface added method Load() with two parameters, allowing to avoid ambiguity of cast of handles when calling separate methods Load() for curve and surface, replacing by single call.
    
    In NCollection_DefineHSequence.hxx, method Append() from another HSequence is removed; Append() from Sequence is used instead.

Author: abv
Date: Thu Jun 25 00:39:28 2015 +0300

    0024023: Revamp the OCCT Handle - GC
    
    Implementation of operator of type casting to resulting object simplified in classes of GC and GCE2d packages

Author: abv
Date: Thu Jun 25 00:31:05 2015 +0300

    0024023: Revamp the OCCT Handle - general
    
    Missing headers added; includes of headers "Handle_...hxx" removed.
    Misuses of macro Handle() and its use in typedefs corrected.
    
    Alias classes Profile and Option are removed from IFSelect; ones defined in MoniTool are used directly.

Author: abv
Date: Tue Jun 16 22:01:37 2015 +0300

    Automatic upgrade by occt_upgrade . -handle

Author: abv
Date: Wed Jun 24 22:44:25 2015 +0300

    0024023: Revamp the OCCT Handle
    
    Macro defining Handle class is replaced by template class implementing the same concept (defined in Standard_Handle.hxx and Standard_Transient.hxx), opencascade::handle<>.
    
    Header file Standard_DefineHandle.hxx becomes deprecated: the only useful macro DEFINE_STANDARD_RTTI is defined now in Standard_Type.hxx. Standard_DefineHandle.hxx is kept for compatibility, it defines macros previously used for definition of Handles and RTTI as empty. Macro DEFINE_STANDARD_HANDLE(C1,C2) defining typedef "Handle_C1" to corresponding handle class is also kept for compatibility.
    
    Definitions of macro Handle() and STANDARD_TYPE() moved from Standard_Macro.hxx to Standard_Handle.hxx (new file) and Standard_Type.hxx, respectively.
(0042463)
git   
2015-06-25 18:07   
Branch CR24023_5 has been updated by abv.

SHA-1: 207a313b9f539b537a20a1d53b8bc15928b410ec


Detailed log of new commits:

Author: abv
Date: Thu Jun 25 18:06:00 2015 +0300

    Added possibility to define maps manipulated by handle, via macro DEFINE_HMAP defined in NCollection_DefineHMap.hxx
    This is applied in visualization to use normal handles instead of NCollection_Handle<>

Author: abv
Date: Thu Jun 25 17:14:41 2015 +0300

    0024023: Revamp the OCCT Handle - general 3
    
    Separate header files defining Handle classes removed (except Image_PixMap_Handle.hxx)

Author: abv
Date: Thu Jun 25 14:58:31 2015 +0300

    0024023: Revamp the OCCT Handle - ambiguity 2
    
    Ambiguities resolved
    
    Second argument made non-default in method IGESData_IGESWriter::Send() having entity argument to force flag to be always passed explicitly

Author: abv
Date: Thu Jun 25 14:44:11 2015 +0300

    0024023: Revamp the OCCT Handle - general 2
    
    Missing headers added

Author: abv
Date: Thu Jun 25 14:39:10 2015 +0300

    Added DownCast(ptr)

(0042470)
git   
2015-06-26 06:32   
Branch CR24023_5 has been updated by abv.

SHA-1: c8e2a1c707baeceb9e11c64db0591f9e94069f7b


Detailed log of new commits:

Author: abv
Date: Fri Jun 26 06:32:08 2015 +0300

    HashCode() for Standard_Transient*

Author: abv
Date: Fri Jun 26 06:31:41 2015 +0300

    Further adaptations

(0042513)
git   
2015-06-26 19:29   
Branch CR24023_6 has been created by abv.

SHA-1: 4b1318dce6cb0c3434538f318217f529820f83c8


Detailed log of new commits:

Author: abv
Date: Fri Jun 26 18:20:13 2015 +0300

    0024023: Revamp the OCCT Handle -- ambiguity
    
    Code corrected to avoid ambiguous situations due to changed implementation of Handle (overloaded methods accepting handles of different types).
    
    In Adaptor3d_CurveOnSurface added method Load() with two parameters, allowing to avoid ambiguity of cast of handles when calling separate methods Load() for curve and surface, replacing by single call.
    
    In NCollection_DefineHSequence.hxx, method Append() with handle to another HSequence as argument is removed; Append() from Sequence is used instead.
    
    Second argument made non-default in method IGESData_IGESWriter::Send() with entity argument, to force flag to be always passed explicitly.
    
    In DrawTrSurf and IGESData_IGESWriter, template variants of methods Set() and Send(), respectively, are added to avoid ambiguity when these methods are called with handles to derived types (using SFINAE).

Author: abv
Date: Fri Jun 26 12:23:30 2015 +0300

    0024023: Revamp the OCCT Handle -- plugin
    
    Definition of PLUGINFACTORY function changed to return Standard_Transient* instead of Handle(Standard_Transient), which cannot be returned by C-style function.
    Default implementation of PLUGINFACTORY() instantiated by macro PLUGIN() now keeps static instance of the factory object, initialized once (at the first call).

Author: abv
Date: Thu Jun 25 00:39:28 2015 +0300

    0024023: Revamp the OCCT Handle -- GC
    
    Implementation of operator of type casting to resulting object simplified in classes of GC and GCE2d packages

Author: abv
Date: Fri Jun 26 18:17:15 2015 +0300

    0024023: Revamp the OCCT Handle -- downcast
    
    C-style cast of Handle to that of derived type (now illegal) is replaced by call to DownCast()

Author: abv
Date: Fri Jun 26 18:17:07 2015 +0300

    0024023: Revamp the OCCT Handle -- general
    
    Missing headers added; includes of headers "Handle_...hxx" removed.
    
    Misuses of macro Handle() and its use in typedefs corrected.
    
    Alias classes Profile and Option are removed from IFSelect; ones defined in MoniTool are used directly.
    
    Removed header files defining only Handle classes (except Image_PixMap_Handle.hxx)
    
    Classes SelectMgr_BaseFrustum and now inherit Standard_Transient and can be manipulated by Handle (not NCollection_Handle)

Author: abv
Date: Tue Jun 16 22:01:37 2015 +0300

    Automatic upgrade by occt_upgrade . -handle

Author: abv
Date: Wed Jun 24 22:44:25 2015 +0300

    0024023: Revamp the OCCT Handle -- handle
    
    Macro defining Handle class is replaced by template class implementing the same concept (defined in Standard_Handle.hxx and Standard_Transient.hxx), opencascade::handle<>.
    
    Header file Standard_DefineHandle.hxx becomes deprecated: the only useful macro DEFINE_STANDARD_RTTI is defined now in Standard_Type.hxx. Standard_DefineHandle.hxx is kept for compatibility, it defines macros previously used for definition of Handles and RTTI as empty. Macro DEFINE_STANDARD_HANDLE(C1,C2) is also kept for compatibility; now it expands to typedef "Handle_C1" to corresponding handle class.
    
    Definitions of macro Handle() and STANDARD_TYPE() moved from Standard_Macro.hxx to Standard_Handle.hxx (new file) and Standard_Type.hxx, respectively.
    
    New template class NCollection_Shared added, allowing to define sub-class manipulated by handle, for any non-transient class.
(0042514)
abv   
2015-06-26 19:34   
Branch CR24023_6 contains first working version of the new templated handles, see details in commit messages above. This version is minimalistic in terms of efforts needed to port dependent code, yet these efforts are quite considerable. Porting notes are to come...
(0042516)
git   
2015-06-28 14:50   
Branch CR24023_6 has been updated forcibly by abv.

SHA-1: 81f8947a5901ca03ba237023ab01b03aa3c7edad
(0043256)
git   
2015-07-22 07:35   
Branch CR24023_6 has been deleted by abv.

SHA-1: 81f8947a5901ca03ba237023ab01b03aa3c7edad
(0043257)
git   
2015-07-22 07:37   
Branch CR24023_4 has been deleted by abv.

SHA-1: a414f24a294a998d68e3d2bad84e9f5f01199593
(0043258)
git   
2015-07-22 07:41   
Branch CR24023_5 has been deleted by abv.

SHA-1: c8e2a1c707baeceb9e11c64db0591f9e94069f7b
(0043306)
git   
2015-07-22 16:27   
Branch CR24023_qatests has been deleted by abv.

SHA-1: 5d991862cf6abb71971461a0e030326315f35331
(0043310)
git   
2015-07-22 16:40   
Branch CR24023_downcast has been deleted by abv.

SHA-1: 0b89c53dc07d0b82241dcbfed46df3f26390bba0
(0043312)
git   
2015-07-22 16:45   
Branch CR24023 has been deleted by abv.

SHA-1: 7a4756ea8075fa9bbf006ea3c1434703151a42ff
(0043315)
git   
2015-07-22 16:51   
Branch CR24023_new has been deleted by abv.

SHA-1: d3b1f1edc2e737540ce7ec29ebf4f2626d167e16