[root] / trunk / core / metautils / inc / TClassEdit.h Repository:
ViewVC logotype

Log of /trunk/core/metautils/inc/TClassEdit.h

Parent Directory Parent Directory


Links to HEAD: (view) (download) (as text) (annotate)
Sticky Revision:

Revision 47952 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Mon Dec 10 18:57:10 2012 UTC (2 years, 1 month ago) by rdm
File length: 3906 byte(s)
Diff to previous 47767
More CINT removal cleanups:
- configure: remove enable_cling and hascling as we always have cling.
- remove many R__HAS_CLING ifdef's from the code.

Revision 47767 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Sat Dec 1 18:32:55 2012 UTC (2 years, 1 month ago) by pcanal
File length: 3960 byte(s)
Diff to previous 47393
Enhance the TClassEdit routines to support more complete types (references and const keyword)

Revision 47393 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Sat Nov 17 08:08:27 2012 UTC (2 years, 2 months ago) by pcanal
File length: 3849 byte(s)
Diff to previous 46233
Extend to TClassEdit::Init to actually initialize the list of typedef to avoid desugaring (aka TNormalizedCtxt).
Modify TClintWithCling and rootcling to call the updated initialization routine.

Implement ROOT::TMetaUtils::ReSubstTemplateArg which uses the fact that in the decl for class template instances, the types inserted/replaced where one of the template parameters used to be, is wrapped by a clang::SubstTemplateTypeParmType, to re-substitute them with the partially desugared version of the template arguments (aka the one still containing Double32_t and Float16_t).

Update TClingBaseClassInfo and TClingDataMember to record the data member types with the template argument resubstitution.

[Note: 
 To properly handle default template, the patch 
    interpreter/llvm/src/ROOT-patches/allow-typedef-in-default-tmplt-param.cpp 
 needs to be applied. As well as defining in TMetaUtils.cxx the macro
    R__HAS_PATCH_TO_MAKE_EXPANSION_WORK_WITH_NON_CANONICAL_TYPE
]

Revision 46233 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Thu Sep 27 14:43:40 2012 UTC (2 years, 3 months ago) by pcanal
File length: 3726 byte(s)
Diff to previous 43294
Port TClassEdit to cling

Revision 43294 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Thu Mar 8 14:59:41 2012 UTC (2 years, 10 months ago) by pcanal
File length: 3555 byte(s)
Diff to previous 38309
Protect TClassEdit::GetLong64_Name against being passed a null char * (fix cov 35887, 35888 and a few others)

Revision 38309 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Fri Mar 4 17:14:19 2011 UTC (3 years, 10 months ago) by pcanal
File length: 3502 byte(s)
Diff to previous 33299
When double checking whether a checksum difference is sustantial, ignore the std namespace (using the name option for TClassEdit::ShortType: TClassEdit::kDropStd

Revision 33299 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Thu Apr 29 14:43:56 2010 UTC (4 years, 8 months ago) by rdm
File length: 3449 byte(s)
Diff to previous 33114
From Fed:
effc++ warning.

Revision 33114 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Tue Apr 20 19:03:33 2010 UTC (4 years, 9 months ago) by pcanal
File length: 3367 byte(s)
Diff to previous 32941
Reduce possible confusions and conflict by always using in TClass and TStreamerInfo
the version of template instance name with ULong64_t and Long64_t rather than [unsigned] long long.

Revision 32941 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Mon Apr 12 12:01:34 2010 UTC (4 years, 9 months ago) by pcanal
File length: 3191 byte(s)
Diff to previous 32821
From Axel: provide dummy copy c'tor to silence effc++ due to TSplitType's pointer data member.

Revision 32821 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Mon Mar 29 21:38:52 2010 UTC (4 years, 9 months ago) by pcanal
File length: 3108 byte(s)
Diff to previous 28776
Improve the time required to load libraries, in particular at process loading time.
For example the total time to completion of root.exe -b -l -q is cut in half!

We now wait until CINT is initialized before starting to execute any dictionary setup function.
In CINT's allocate function, avoid having to recalculate the 'index' of the G__var_array.
Enhance the performance of TClassEdit by introducing TSplitType which can be reused for a few a
the string based type manipulation that TClass needs to do.
In the implementation of TClassEdit::ShortType and TClassEdit::GetSplit, this patch reduces the 
amount of work done (by reducing the number of calls to TClassEdit::CleanType, in 
particular in the case where we know that the type is already prep-ed)

Revision 28776 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Tue Jun 2 15:16:39 2009 UTC (5 years, 7 months ago) by pcanal
File length: 2716 byte(s)
Diff to previous 28095
Add support for std::bitset in ROOT I/O

Revision 28095 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Fri Apr 3 19:52:28 2009 UTC (5 years, 9 months ago) by pcanal
File length: 2649 byte(s)
Diff to previous 27409
From Axel:
Implement TClassEdit::InsertStd() is requested at Savannah 46871:
   it puts "std::" in front of all STL classes.

Revision 27409 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Tue Feb 10 22:31:15 2009 UTC (5 years, 11 months ago) by pcanal
File length: 2604 byte(s)
Diff to previous 22961
From Axel:
Add new mode 1<<7 to TClassEdit::ShortType() which removes all default
template arguments from a type name, as long as the type's dictionary
has been loaded. Also fix a doc bug in ResolveTypedef.

Revision 22961 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Thu Apr 3 13:32:57 2008 UTC (6 years, 9 months ago) by rdm
File length: 2510 byte(s)
Diff to previous 20882
move the directories:
  base clib cont meta metautils newdelete pcre rint thread unix utils
  winnt zip
under the new core meta directory.

Revision 20882 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Mon Nov 19 11:31:26 2007 UTC (7 years, 2 months ago) by rdm
Original Path: trunk/metautils/inc/TClassEdit.h
File length: 2510 byte(s)
Diff to previous 19826
Set property svn:eol-style LF on all source and Makefiles. This should avoid
problems with Win32 line endings ending up in the repository. All MS tools
support LF eols fine.

Revision 19826 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed Sep 19 19:56:11 2007 UTC (7 years, 4 months ago) by rdm
Original Path: trunk/metautils/inc/TClassEdit.h
File length: 2510 byte(s)
Diff to previous 19825
imported svn:keywords Id property

Revision 19825 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed Sep 19 19:49:10 2007 UTC (7 years, 4 months ago) by rdm
Original Path: trunk/metautils/inc/TClassEdit.h
File length: 2563 byte(s)
Diff to previous 19391
remove :$ from tag line

Revision 19391 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed Jul 18 12:50:37 2007 UTC (7 years, 6 months ago) by rdm
Original Path: trunk/metautils/inc/TClassEdit.h
File length: 2573 byte(s)
Diff to previous 12602
add missing copyright notice.

Revision 12602 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Sat Sep 3 02:26:31 2005 UTC (9 years, 4 months ago) by pcanal
Original Path: trunk/metautils/inc/TClassEdit.h
File length: 2043 byte(s)
Diff to previous 10429
Fix to follow coding conventions

Revision 10429 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Fri Oct 29 16:07:32 2004 UTC (10 years, 2 months ago) by rdm
Original Path: trunk/metautils/inc/TClassEdit.h
File length: 2059 byte(s)
Diff to previous 9527
Mods for port to latest aCC on HP-UX 11.5i. Most changes are related
to aCC now being standards compliant (STL container in proper std
namespace, etc.).

Revision 9527 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Thu Jul 15 23:08:23 2004 UTC (10 years, 6 months ago) by rdm
Original Path: trunk/metautils/inc/TClassEdit.h
File length: 2055 byte(s)
Diff to previous 9381
From Philippe:
This patch allows the user code to be compiled with the -pedantic flag.

Revision 9381 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Sat Jul 3 09:34:30 2004 UTC (10 years, 6 months ago) by brun
Original Path: trunk/metautils/inc/TClassEdit.h
File length: 2056 byte(s)
Diff to previous 8582
Replace the enum kNone by kNotSTL to avoid a possible clash with
the kNone in GuiTypes.h

Revision 8582 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Thu Apr 15 06:41:49 2004 UTC (10 years, 9 months ago) by brun
Original Path: trunk/metautils/inc/TClassEdit.h
File length: 2056 byte(s)
Diff to previous 8394
From Philippe:
This fixes a parsing problem when encountering a typedefed STL containers inside a class template.

template <class T> class x {
  typedef map<...> xyz_t;
  xyz_t datamember;
};

Revision 8394 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Fri Mar 12 21:45:27 2004 UTC (10 years, 10 months ago) by brun
Original Path: trunk/metautils/inc/TClassEdit.h
File length: 2052 byte(s)
Diff to previous 8098
From Philippe:
This patches prevents a confusion due to possible aliasing of STL container of Long64_t.

This patches also transform TClassEdit from a class with only static member to a namespace.
(The same should be done for TMath).

This allow some simplication by allowing the usage of
        using namespace TClassEdit;
which removes the need to always use TClassEdit:: to refer to the functions.

Revision 8098 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Sat Jan 31 08:59:09 2004 UTC (10 years, 11 months ago) by brun
Original Path: trunk/metautils/inc/TClassEdit.h
File length: 2061 byte(s)
Diff to previous 8091
Reintroduce Philippe's patch, now corrected for several machines.
stress, bench and DrawTest.sh runs correctly.
Still problem in running DrawTest.sh on SGI (cc,gcc,kcc). Likely due
to an alignement problem with the handling of the new type Double32_t

Revision 8091 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Fri Jan 30 08:12:57 2004 UTC (10 years, 11 months ago) by brun
Original Path: trunk/metautils/inc/TClassEdit.h
File length: 1945 byte(s)
Diff to previous 8087
Withdraw all changes made since yesterday night.
The changes were unfortunately introduced withouth enough testing.

Revision 8087 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Thu Jan 29 23:08:16 2004 UTC (10 years, 11 months ago) by brun
Original Path: trunk/metautils/inc/TClassEdit.h
File length: 2027 byte(s)
Diff to previous 7957
From Philippe:
This patch should resolve completely the issue discovered by Minos (related to
typename being typedefs).  It also repairs the I/O for fixed size array of
TObject.

TString:
        add constructor and operator= taking a std::string argument

TROOT:
        GetClass now properly resolve templateClass<typedef>.
      Previously the typedef resolution was restricted to the full name.

TClassTable:
        Look for an existing TClass directly in TROOT::fListOfClasses to
        avoid the potential loading behavior of TROOT::GetClass

TCint::UpdateClassInfo
        Also look for possible alias name in the list of TClass objects.
        In particular, depending on the load order of libraries and file,
        the Emulated class for container<int> might be container<Int_t> or
        vce et versa.

TClass::Init
        When we have a templated class, also look for existing Emulated
        class which may have a different name.

TStreamerElement/TStreamerInfo
        Use the name with resolved typedef in the TStreamerElement.
        Also repair the I/O for fixed size array of TObjects.

TClassEdit:
        Add a utility to resolve the typedefs inside a typename.
        This resolution has 2 modes.  One where it resolved all
        typedefs which should be used to compare 2 typename and
        establish equality.  A second where it resolved all
        typedefs __except__ for the ROOT integral type typedefs,
        this version is used to create the typename that will be
        save on file.  This is necessary to avoid the replacement
        of (for example) Long64_t by its platform dependent version.

Revision 7957 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed Jan 21 07:04:33 2004 UTC (11 years ago) by brun
Original Path: trunk/metautils/inc/TClassEdit.h
File length: 1945 byte(s)
Diff to previous 7923
From Philippe:

The following patch make sures that the dictionary generated by
rootcint does not prepend 'pair' with '::', thus repairing the behavior
on windows.

Revision 7923 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Fri Jan 16 21:29:27 2004 UTC (11 years ago) by brun
Original Path: trunk/metautils/inc/TClassEdit.h
File length: 1893 byte(s)
Diff to previous 7880
From Philippe:

This should fix the issue with vector<bool> by adding a TBoolVectorProxy and by making sure rootcint write
'std::allocator' as 'allocator and not as '::allocator'.

Revision 7880 - (view) (download) (as text) (annotate) - [select for diffs]
Added Sat Jan 10 10:52:31 2004 UTC (11 years ago) by brun
Original Path: trunk/metautils/inc/TClassEdit.h
File length: 1808 byte(s)
From Philippe:

This mega patch introduces a new implementation of the STL I/O
which is backward and forward compatible.  In addition this is more
exactly a new implementation or an extension of the container I/O.

We are introducing a new abstract interface:
"TVirtualContainerProxy", which can be implemented to present a
proxy to any collection which the I/O (and TTreeFormula) can use
then transparently.

The TVirtualContainerProxy interface allows to the I/O system to
request some information and to execute some essential function of
the container:
   what kind of object/data does it contain
   does it contain pointers
   how to insert data into the container
   how to retrieve an array of pointer to the elements inside
   how to create a collection object
   how to clear the collection
   how to resize the collection
   how to streamer the collection (if needed)
   how to calculate the sizeof the collection
   how to calculate the number of elements of the collection.

Using those primitives, the I/O and TTreeFormula should be able to
access any collection.   The I/O should also be able to handle the
splitting of collections that can be split (i.e. contains a single
type of object/data).

The current compromise selected between code duplication,
performance of the I/O of TClonesArray and vector of pointers and
the performance of the I/O of other containers, was to have on
function handle all collection as if they were a C-style array of
pointers to data.  This implies for example that the I/O of vector
of object current passes via the construction of temporary array
of pointer.  The cost of this construction is usually ~Qjust~R the
cost of calculating the addresses of the elements and assigning it
to an array element.

Registering a collection proxy will be similar to
     static int dummy = GenerateInitInstance((CollectType*)0x0)-
>AdoptCollectionProxy(new CollectTypeProxy));

Follows a few details on the modifications made to some of the
files and classes.

Bytes.h:
   Work around a problem in the MSVC++ 6.0 optimizer.  This should
not affect other compilers.

String:
   Included the std::string dictionary into G__Base2.cxx, this
insures its presence at all time.
   Added a new file string.cxx holding the streamer for
std::string.

RConfig.h
   Added proper ansi stream configuration for AIX, KCC
   Added template specialization defect for MSVC

TBrowser
   Start adding the ability to browser non TObject classes

TBuffer
   To handle the reading and writing array of objects, added:
     Int_t    CheckByteCount(UInt_t startpos, UInt_t bcnt, const
TClass *clss, const char* classname);
     Int_t    CheckByteCount(UInt_t startpos, UInt_t bcnt, const
char *classname);
     void     ReadFastArray(void  *start , TClass *cl, Int_t n=1,
TMemberStreamer *s=0);
     void     ReadFastArray(void **startp, TClass *cl, Int_t n=1,
Bool_t isPreAlloc=kFALSE, TMemberStreamer *s=0);
     void     WriteFastArray(void  *start,  TClass *cl, Int_t n=1,
TMemberStreamer *s=0);
     Int_t    WriteFastArray(void **startp, TClass *cl, Int_t n=1,
Bool_t isPreAlloc=kFALSE, TMemberStreamer *s=0);

TROOT
   Enhancement to make the access to gROOT not dependent for the
library loading order.  In particular we added:
      ROOT::GetROOT()
   which should be used instead of gROOT.

   Improve support for STL.  In particular, now STL containers do
have a corresponding TClass object


TRealData
   Replace SetStreamer by AdoptStreamer that allow to use not only
a streamer function but also streamer object (allowing streamer
with a state for Foreign classes)

TString:
   Improve streamer performance

TSystem:
   More consistency of the return value of TSystem::CompileMacro

build/unix/makecintdlls.sh
   Stop making the string.dll

config:
   enhance sgicc makefiles

cont:
   fix TBits::operator=
   TClassTable now warns for duplicate only for non stl classes
   TClonesArray fix a typo

gpad:
   Add a new class TInspectObject to enable inspect non TObject
classes
   TRootBrowser : enable inspect non TObject classes

TFormula/TTreeFormula
   To enhance performance switch from using one array fOper which
contained the operation code and its arguments to using 2 arrays
fActions and fActionParams to store respectively the operation and
its parameters.
   A new function Convert is used to convert old version from the
fOper to fActions.  This allows cleaner coding and offer
optimization opportunities.

TTreePlayer
   Start adding support in MakeClass for STL containers.

TRint/TProofServ
   Insure the loading of the string support

Event.cxx
   make sure to avoid memory over-write

stress.cxx
   Add new parameters
      stress <nevent> <style> <subbench> <portion>
   if <subbench> is 1 or higher, print the benchmark results after
each test.  This allows understand
   which test is affect by a performance change.
   portion is a binary field to indicate which test to run.  This
allows to focus on a particular test.

TVirtualCollectionProxy
   Abstract interface used to access any type of containers from
the I/O system and TTreeFormula. See TVectorProxy and
TEmulatedVectorProxy for examples.

TEmulatedVectorProxy
   Implementation of a std::vector proxy to be able to read a
std::vector without any libraries.

TVectorProxy
   Implementation of TVirtualCollectionProxy for a std::vector for
which we have the library.

TStreamerInfo.cxx
   Split in 3 files:  TStreamerInfo.cxx
TStreamerInfoReadBuffer.cxx TStreamerInfoWriteBuffer.cxx

   All the ReadBuffer, ReadBufferClones and the new ReadBufferSTL
(similarly for  WriteBuffer) have been factorized into one
function and 2 short wrappers.  The new main function expect an
array of pointer to the objects (this array is most often of size
one).

   TClonesArray objects pass GetObjectRef(0) to the common
ReadBuffer
   vector<bla*> v pass &(v[0])
   vector<bla> needs to create an intermediary array to hold the
address

   This mechanism is sometimes not optimal (vector<blah>) but
allows extremely flexibly and extension.  Basically, to add
support for a new container type using the StreamerInfo mechanism
(in particular allows splitting), one 'just' need to implement a
TVirtualCollectionProxy, which, in particular, will return an
array of address to the object it contains.  Even std::map can be
handled with this mechanism, since, for I/O purposes, it can be
consider as a container of pairs.

   Add a few optimization, including more caching via a new array
of a new struct (fComp).

   Fixed a problem (re)introduced while implementing the Foreign
class CheckSum.  Doing:
      class Event;
      f = new TFile("Event.root");
   resulted in errors.

TCint
   Add proper support for TClass of STL containers. Fix a memory
leak.
   Add support for load TClass via a typedef.
   Fix a problem with multiple inheritance

TClass
   Fixed a problem (re)introduced while implementing the Foreign
class CheckSum.  Doing:
      class Event;
      f = new TFile("Event.root");
   resulted in errors.
   Add a

TClass/TGenericClassInfo/TDataMember
   Add support for a new interface (TVirtualCollectionProxy)
useable for STL containers or any user defined containers.
   Add support for streamer with are objects (as opposed to free
standing function or methods).  This allows the user a greater
flexibility in writing a streamer.
   Add a few optimizations
   Add CanSplit to answer the question for a whole Class (for
example some collection can not be splitted).

TClassStreamer
   New class to wrap a class wide streamer

ClassStreamerFunc_t
   typedef for a class wide streamer function

TMemberStreamer
   New class to wrap a specific class member streamer

MemberStreamerFunc_t
   typedef for  a specific class member streamer function

RootStreamer
   Macro to specify a free standing streamer object or function
for a class
   For example:
      RootStreamer(string,std_string_streamer);

TStreamerElement:
   A couple of optimization/simplification.
   Add support for the new STL I/O
   Extend the useful

TBranchElement:
   add a connection to the proper TVirtualCollectionProxy
   add support for STL containers (non-split and split mode)

TTree
   Make the function TTree::GetMakeClass NON-virtual for better
efficiency
   Add support for STL containers

TBasket
   Left (in comment) a yet unproved improvement proposed by
Victor.  The preliminary tests were inconclusive performance wise
and it had (seemingly) problem with backward and forward
compatibility.

TBranch
   Performance improvements

metautils
   This is a new package for C++ files shared between rootcint and
meta.
   It contains TClassEdit a class to help determine some property
of a class given its class name (stl, template, etc).

utils
   Introduced a new file RStl.cxx to start separating rootcint in
modules.
   Modified rootcint to support the new STL I/O methods.
   In particular a new class RStl is in charge of doing the
generating of code for STL containers.

This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, enter a numeric revision.

  Diffs between and
  Type of Diff should be a

Sort log by:

Subversion Admin
ViewVC Help
Powered by ViewVC 1.0.9