[root] / branches / v5-22-00-patches / io / io / src / TStreamerInfoReadBuffer.cxx Repository:
ViewVC logotype

Log of /branches/v5-22-00-patches/io/io/src/TStreamerInfoReadBuffer.cxx

Parent Directory Parent Directory


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

Revision 33176 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Sat Apr 24 21:45:46 2010 UTC (4 years, 9 months ago) by pcanal
File length: 93514 byte(s)
Diff to previous 30998
Add support for reading file written by 5.27/02 and containing
a data member like:
     std::container<Data> *fDataObjects;
which has been streamed memberwise (see revision r33173 of the trunk).

Revision 30998 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Thu Nov 5 22:45:56 2009 UTC (5 years, 2 months ago) by pcanal
File length: 92007 byte(s)
Diff to previous 27005
Change needed to compile with 4.4.1

Revision 27005 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Thu Dec 18 15:18:08 2008 UTC (6 years, 1 month ago) by rdm
File length: 87875 byte(s)
Diff to previous 27002
Make v5-22-00-patches branch, for fixing the single remaining bug.

Revision 27002 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Thu Dec 18 09:21:10 2008 UTC (6 years, 1 month ago) by brun
Original Path: tags/v5-22-00/io/io/src/TStreamerInfoReadBuffer.cxx
File length: 87875 byte(s)
Diff to previous 26073
Stamp version v5-22-00

Revision 26073 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Tue Nov 4 11:16:09 2008 UTC (6 years, 2 months ago) by pcanal
Original Path: trunk/io/io/src/TStreamerInfoReadBuffer.cxx
File length: 87875 byte(s)
Diff to previous 25453
Fix for near obsolete platform

Revision 25453 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Thu Sep 18 22:28:44 2008 UTC (6 years, 4 months ago) by pcanal
Original Path: trunk/io/io/src/TStreamerInfoReadBuffer.cxx
File length: 84644 byte(s)
Diff to previous 25450
refine test

Revision 25450 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Thu Sep 18 21:13:42 2008 UTC (6 years, 4 months ago) by pcanal
Original Path: trunk/io/io/src/TStreamerInfoReadBuffer.cxx
File length: 84622 byte(s)
Diff to previous 23122
Import the code from the branch dev/datamodelevolution revision 25436

This implements the infrastructure for the new Data Model Evolution Scheme.

This Data Model Evolution is brought to your courtesy of BNL/STAR/ATLAS/Fermi/Cern

Current Capabilities:
  Assign values to transient data members
  Rename classes
  Rename data members
  Change the shape of the data structures or convert one class structure to another
  Change the meaning of data members
  Ability to access the TBuffer directly when needed
  Ensure that the objects in collections are handled in the same way as the ones stored separately
  Supported in object-wise, member-wise and split modes.

Coming soon:
  Make things operational also in bare ROOT mode
  Ability to transform data before writing
  Support for changing the class type of nested object in a split branch
  Support for access to onfile version of nested objects from within the parent rule

LinkDef rule syntax:
  Setting a transient member:

#pragma read sourceClass="ACache" targetClass="ACache" source="" version="[1-]" target="zcalc" \
   code="{ zcalc = false; }"

  Setting a new member from 2 removed members

#pragma read sourceClass="ACache" targetClass="ACache" source="int x; int y; char c"  version="[8]" target="z" \
   code="{ z = onfile.x*1000 + onfile.y*10; }"

   Renaming a class

#pragma read sourceClass="ACache" version="[8]" targetClass="Axis" \
   source="int x; int y;"  target="z" \
   code="{ z = onfile.x*1000 + onfile.y*
#pragma read sourceClass="ACache" version="[9]" targetClass="Axis";

Selection XML syntax

  <read  sourceClass="ACache" targetClass="ACache" source="" version="[1-]" target="zcalc">
  <![CDATA[
   { zcalc = false; }
  ]]></read>


Revision 23122 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Thu Apr 10 14:56:30 2008 UTC (6 years, 9 months ago) by rdm
Original Path: trunk/io/io/src/TStreamerInfoReadBuffer.cxx
File length: 78703 byte(s)
Copied from: trunk/io/src/TStreamerInfoReadBuffer.cxx revision 23121
Diff to previous 22940
move the following directories into "io":

castor, chrip, dcache, gfal, io, rfio, sql, xml

Revision 22940 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed Apr 2 11:00:49 2008 UTC (6 years, 9 months ago) by pcanal
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 78703 byte(s)
Diff to previous 21917
Insure that the TStreamerInfo a contained class that is to written memberwise
is _not_ optimized.

Repair a few place where TStreamerInfo was wasting some space when the 
streamed collection was empty.  Increase TStreamerInfo version to 7 to 
distinguish the old and new cases.

Rename TCollectionProxyInfo::Environ::delete_temp to use_temp to clarify code/semantic
and fix its use to properly manage the life time of the temporary used (necessary in
the case of memberwise streaming (in non-split mode)).

Revision 21917 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed Jan 30 04:29:49 2008 UTC (6 years, 11 months ago) by pcanal
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 78355 byte(s)
Diff to previous 21862
Fix compilation on platform where R__BROKEN_FUNCTION_TEMPLATE is defined (includes at least older Macs)

Revision 21862 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Sat Jan 26 09:48:18 2008 UTC (6 years, 11 months ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 77080 byte(s)
Diff to previous 20882
From Lukasz Janyst:
   * TStreamerInfo: TPointerCollection adapter class and access methods
     added to enable handling collections of pointers with existing
     Read|WriteBuffer code

   * TCollectionProxy: check if the proxy was initialized when
     calling HasPointers

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/io/src/TStreamerInfoReadBuffer.cxx
File length: 76615 byte(s)
Diff to previous 20854
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 20854 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Fri Nov 16 22:34:15 2007 UTC (7 years, 2 months ago) by pcanal
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 76615 byte(s)
Diff to previous 20173
* Correct the schema evolution to and from any numerical type involvind on one
  end or the other any variation of Float16_t and Double32_t.
* Add the annotation (aka the comment part with [xyz]) of C style arrays, 
  Float16_t and Double32_t to the checksum calculation.
* Allow the checksum of existing class with a ClassDef to match with and 
  without the annotation taken in consideration.  This  allows for reading 
  older file (hence with desufficient checksum) to be read without any warning 
  message.  However this also means that if the classes on this older file are 
  different _only_ by the annotation, it will not be noted.
* Prevent the fact that any consecutive Double32_t, independently of their
  annotation are 'compiled' together and thus only the annotation of the first 
  one are used (incorrectly).  To support backward compatibility with files 
  written with this bug, the version number of TStreamerInfo has been 
  increased to 6.  The compilation is still done the same way for 'old' 
  TStreamerInfo (TStreamerInfo version 5 or less).  However if the 
  Double32_t are changed to Float16_t, since the compilation is turned off 
  because of the schema evolution, the 'wrong' annotation might be used for 
  those old files. [This should be rare]
* Corrected the fact that due to an off by one lookup, the number of 
  TStreamerInfo for a class was actually limited to 13.

Revision 20173 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Tue Oct 2 11:52:49 2007 UTC (7 years, 3 months ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 74864 byte(s)
Diff to previous 19826
Second batch of changes to support the new type Float16_t.

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/io/src/TStreamerInfoReadBuffer.cxx
File length: 72024 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/io/src/TStreamerInfoReadBuffer.cxx
File length: 72089 byte(s)
Diff to previous 19048
remove :$ from tag line

Revision 19048 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Sat Jun 16 03:19:37 2007 UTC (7 years, 7 months ago) by pcanal
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 72099 byte(s)
Diff to previous 17819
Add I/O support for a varying length array of polymorphic
pointers to objects.

Int_t fN;
MyClass** fAry; //[fN]
MyClass** fAryAry[10]; //[fN]

fAry = new MyClass*[fN];
fAryAry[0] = new MyClass*[fN];

fAry[0] = new MyClass;
fAry[1] = new DerivedFromMyClass;

fAryAry[0][0] = new MyClass;
fAryAry[0][1] = new DerivedFromMyClass;

This is implement using a different file format for data member
which are variable size arrays of pointers to objects.

We plan on triggering on the file version (5.15/09) which in practice
means that any file that
  a) was written with 5.15/09 (the development code) prior to the checking
  b) contains variable size arrays of pointers to objects.
will __partially__ not be readable with the new code (more exactly it will
issue a lot of warning messages and lose 'only' the objects from
the variable size arrays of pointers to objects.

Revision 17819 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Fri Feb 9 10:16:07 2007 UTC (7 years, 11 months ago) by rdm
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 63066 byte(s)
Diff to previous 17711
correct cvs ident line (base/cont/meta -> io).

Revision 17711 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Mon Feb 5 18:11:29 2007 UTC (7 years, 11 months ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 63068 byte(s)
Diff to previous 17545
-Implement necessary casts due to TVirtualStreamerinfo.

Revision 17545 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Sun Jan 28 18:31:37 2007 UTC (7 years, 11 months ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 63018 byte(s)
Diff to previous 17510
-Implement changes when streaming a referenced object by calling the new
functions in TBuffer.

Revision 17510 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Thu Jan 25 11:51:58 2007 UTC (8 years ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 63047 byte(s)
Diff to previous 17412
Replace calls to TProcessID::ReadProcessID by TVirtualIO::ReadProcessID

Revision 17412 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Sat Jan 20 19:29:35 2007 UTC (8 years ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 63090 byte(s)
Diff to previous 14085
-Remove Varargs.h from TString.h and TObject.h and add this include
in the few files that need it.

-Move the following enums from TBuffer.h to TBufferFile.h

   enum { kMapSize = 503 };
   enum { kStreamedMemberWise = BIT(14) }; //added to version number to know if a collection has been stored member-wise
   enum { kNotDecompressed = BIT(15) };    //indicates a weird buffer, used by TBasket
   enum { kCannotHandleMemberWiseStreaming = BIT(17), //if set TClonesArray should not use memeber wise streaming
          kTextBasedStreaming = BIT(18) };            // indicates if buffer used for XML/SQL object streaming

Revision 14085 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed Feb 22 19:53:12 2006 UTC (8 years, 11 months ago) by pcanal
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 63049 byte(s)
Diff to previous 14032
improve somewhat (there is still a spurrious error message) backward compatibility with STL container writen with the ROOT v2.25 still of streamer (pre-streamerInfo)

Revision 14032 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Thu Feb 9 20:44:00 2006 UTC (8 years, 11 months ago) by pcanal
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 62932 byte(s)
Diff to previous 13949
From Paul Russo:
o Use new TClass::New/DeleteArray interface.
o Adapt to NewArrFunc_t interface change.

Revision 13949 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Mon Jan 30 09:01:12 2006 UTC (8 years, 11 months ago) by rdm
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 64532 byte(s)
Diff to previous 13255
TStreamerInfo was including TFile.h, TROOT.h and TClonesArray.h iso of
forward declaring them. This caused massif recompilation if e.g.
TFile.h was changed. Correct some sources that did not include
TFile.h because it was coming via TStreamerInfo.h.

Revision 13255 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed Nov 16 20:10:00 2005 UTC (9 years, 2 months ago) by pcanal
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 63889 byte(s)
Diff to previous 12998
Coding convention, white spaces and comments update

Revision 12998 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Fri Oct 21 18:18:15 2005 UTC (9 years, 3 months ago) by pcanal
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 63342 byte(s)
Diff to previous 12991
cosmetic

Revision 12991 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Thu Oct 20 19:24:04 2005 UTC (9 years, 3 months ago) by pcanal
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 63346 byte(s)
Diff to previous 12601
From Paul Russo:

We extend the support for pointers to varying length arrays
of objects to include the cases:

  1) Objects whose classes do not have a ClassDef macro, but do
     have dictionaries loaded (no default Streamer, but we do have
     TStreamerInfo).

  2) Objects of classes with custom Streamer functions.

  3) Reading an object from a file when we do not have the
     dictionary loaded for the object's class, and then writing
     that object out to a file again (emulated objects).  This
     allows us to copy trees without have to have the class
     dictionaries loaded.

Note that we still do not support the case of STL objects.

There is a problem with the old implementation and the current
implementation in that memory is leaked in the case of reading
a varying length array of pointers to objects.  The memory for
the objects read on the previous read is leaked because the code
is written in such a way that we have already overwritten the
length of the old variable array with the length of the new one
before we get to the place where we must iterate through the
array and free the old objects.  The code must be changed to
take note of the old value of the varying length when the new
value is read, so that it may be used later to free the old
set of objects.

Revision 12601 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Sat Sep 3 00:48:25 2005 UTC (9 years, 4 months ago) by pcanal
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 58879 byte(s)
Diff to previous 12038
Fix to follow coding conventions

Revision 12038 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Mon Jun 13 21:54:18 2005 UTC (9 years, 7 months ago) by pcanal
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 58843 byte(s)
Diff to previous 11623
add propection (and print error message) when a bad index paramater is passed to ReadBuffer

Revision 11623 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Tue Apr 19 07:41:19 2005 UTC (9 years, 9 months ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 58688 byte(s)
Diff to previous 11606
Add protections against reading arrays bigger than the buffer size

Revision 11606 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Mon Apr 18 10:54:58 2005 UTC (9 years, 9 months ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 58631 byte(s)
Diff to previous 11445
Extend the functionality of the Double32_t data type (see below)
This extension supports higher precision than just a 32 bit float
and it also allows better compression when the range and number of bits
are specified.

New functions in TBuffer
  void TBuffer::ReadDouble32 (Double_t *d, TStreamerElement *ele)
  void TBuffer::WriteDouble32 (Double_t *d, TStreamerElement *ele)

The following functions of TBuffer have new signatures;
  Int_t TBuffer::ReadArrayDouble32(Double_t *&d, TStreamerElement *ele)
  Int_t TBuffer::ReadStaticArrayDouble32(Double_t *d, TStreamerElement *ele)
  void  TBuffer::ReadFastArrayDouble32(Double_t *d, Int_t n, TStreamerElement *ele)
  void  TBuffer::WriteArrayDouble32(const Double_t *d, Int_t n, TStreamerElement *ele)
  void  TBuffer::WriteFastArrayDouble32(const Double_t *d, Int_t n, TStreamerElement *ele)

The following data members have been added to TStreamerElement;
   Double_t  fXmin;    //Minimum of data member if a range is specified  [xmin,xmax,nbits]
   Double_t  fXmax;    //Maximum of data member if a range is specified  [xmin,xmax,nbits]
   Double_t  fFactor;  //Conversion factor if a range is specified fFactor = (1<<nbits/(xmax-xmin)

The static function GetRange has been added to TStreamerElement.cxx.
This function analyzes the range specifier given in the data member
comments field.

The following cases are supported for streaming a Double32_t type
depending on the range declaration in the comment field of the data member:
     A-    Double32_t     fNormal;
     B-    Double32_t     fTemperature; //[0,100]
     C-    Double32_t     fCharge;      //[-1,1,2]
     D-    Double32_t     fVertex[3];   //[-30,30,10]
     E     Int_t          fNsp;
           Double32_t*    fPointValue;   //[fNsp][0,3]

    In case A fNormal is converted from a Double_t to a Float_t
    In case B fTemperature is converted to a 32 bit unsigned integer
    In case C fCharge is converted to a 2 bits unsigned integer
    In case D the array elements of fVertex are converted to an unsigned 10 bits integer
    In case E the fNsp elements of array fPointvalue are converted to an unsigned 32 bit integer
              Note that the range specifier must follow the dimension specifier.
    the case B has more precision (9 to 10 significative digits than case A (6 to 7 digits).

    The range specifier has the general format: [xmin,xmax] or [xmin,xmax,nbits]
     [0,1]
     [-10,100];
     [-pi,pi], [-pi/2,pi/4],[-2pi,2*pi]
     [-10,100,16]
    if nbits is not specified, or nbits <2 or nbits>32 it is set to 32

TStreamerInfo has been modified to take into account the new facility
when streaming a Double32_t. It calls the new TBuffer functions ReadDouble32
and WriteDouble32 instead of the previous inline code.

Note that the files TEmulatedCollectionProxy.cxx and TGenCollectionStreamer.cxx
must still be modified to pass correctly the TStreamerElement object
to the Double32 conversion routines (for Philippe).

Note also that the class TXMLBuffer must still be changed to support
the Double32_t data type (for Sergei).

The test program Event has been modified to illustrate several combinations
of the range specifier.

The test program stress2 has been changed to take into account the slight
increase in the file size due to the new members in TStreamerElement.

Revision 11445 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Tue Mar 29 17:43:25 2005 UTC (9 years, 9 months ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 58643 byte(s)
Diff to previous 11436
From Philippe:
This patch insures that objects that did not save a variable size array
eventhough the index is non zero will be read properly.

Revision 11436 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Mon Mar 28 21:17:39 2005 UTC (9 years, 9 months ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 58643 byte(s)
Diff to previous 11189
From Philippe
The following problems were found while running roottest on MacOS.

rootcint: Insure that the dimensions of
        Int_t (*fArray)[3];
   are properly recorded by the ShowMembers function

TStreamerInfo: Insure that the wrapper template function see
        all modifications to the TStreamerInfo

TTreePlayer:  In Scan insures that the entry number is printed
        as a long long (aka with %lld).

Revision 11189 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Fri Feb 25 19:14:38 2005 UTC (9 years, 10 months ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 58623 byte(s)
Diff to previous 11001
From Philippe:
This patch insure that ReadBufferSTL and WriteBufferSTL are symetrical in
regard to empty collection (the reading was incorrect).  This solves the
problem describe at

http://root.cern.ch/phpBB2/viewtopic.php?t=1437&highlight=&sid=4c28f9c455a5b
48ac9f9175ac838edf41

Revision 11001 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Fri Jan 28 05:45:41 2005 UTC (9 years, 11 months ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 58601 byte(s)
Diff to previous 10958
From Philippe:
This patch solved a problem due to the fact that TObject's fUniqueID can
only hold a 8 bits ProccessID identifier (in addition to storing a 24 bits
object ID).  However we support 65535 distinct ProcsssID identifiers per
file.  Before this patch, for a file containing more than 255 distcint
ProcessID, the
TRef using the later ProcessID would be unable to find their references.

Specifically, fUniqueID can now store the ProcessID indentifier 0 through
254.  When more identifiers
are used, then instead of store the identifier in the 8 higher bit of
fUniqueID we store in a table (TProcessID::fgObjPIDs) linking addresses to
pids.

Revision 10958 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed Jan 19 18:30:58 2005 UTC (10 years ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 58415 byte(s)
Diff to previous 10750
From Philippe:
This patch implement support for bool of various in memory size.  They are
always written using only 1 bytes.  This solves problem on MacOS where
sizeof(bool)==4 instead of 1.

Note that there should still be a problem with the old-style splitted branch
(tested in Event.old.split.root.
A fix for this will come later on.

Revision 10750 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Fri Dec 10 13:32:33 2004 UTC (10 years, 1 month ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 57021 byte(s)
Diff to previous 10746
Removed unused arguments in ReadBufferSkipImp (BrokenTemplates case)

Revision 10746 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Fri Dec 10 09:28:47 2004 UTC (10 years, 1 month ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 57482 byte(s)
Diff to previous 10744
From Sergei Linev
Fixes to run on BrokenTemplates machines

Revision 10744 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Fri Dec 10 07:42:28 2004 UTC (10 years, 1 month ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 57901 byte(s)
Diff to previous 10732
From Sergei Linev
Add a new method TStreamerElement::SetTObjectOffset().
Implement the possibility to skip an array with a counter even
when the counter is also skipped.

Revision 10732 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Thu Dec 9 09:11:02 2004 UTC (10 years, 1 month ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 57936 byte(s)
Diff to previous 10730
Fix a compilation error on machines with "Broken templates"

Revision 10730 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Thu Dec 9 07:49:22 2004 UTC (10 years, 1 month ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 57940 byte(s)
Diff to previous 10553
From Sergei Linev
In TStreamerInfoReadBuffer.cxx I modified SkipCBasicArray(name)
and SkipCBasicPointer(name) macros in view of XML schema evolution.
I create temporary a buffer, read data and delete the buffer.
In SkipCBasicPointer in case of a counter I read in a dummy variable.

Revision 10553 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed Nov 17 20:06:50 2004 UTC (10 years, 2 months ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 59348 byte(s)
Diff to previous 10552
From Philippe
One more portability problem fix

Revision 10552 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed Nov 17 19:48:19 2004 UTC (10 years, 2 months ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 59210 byte(s)
Diff to previous 10549
From Philippe
Fix portability problems on TemplateBroken compilers

Revision 10549 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed Nov 17 17:56:53 2004 UTC (10 years, 2 months ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 59037 byte(s)
Diff to previous 10545
From Philippe,

This patch implements the schema evolution to and from selected containers.
The following cases are currently implemented:

  TClonesArray object -> STL object containing the same type
  TClonesArray pointer -> STL pointer containing the same type
  STL object -> STL object containing the same type
  STL pointer -> STL pointer containing the same type

  STL split branches -> TClonesArray

In addition this patch implement the ability to have schema evolution
between various version of a foreign class when the library is not present.

This patch also support in in TTree::Draw for the schema evolution of simple
type stored in a non-split branch.

Revision 10545 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed Nov 17 08:46:43 2004 UTC (10 years, 2 months ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 58597 byte(s)
Diff to previous 10541
Undo changes from Philippe.
The new version was not able to read previous ROOT files, eg files
containing TGeo objects.

Revision 10541 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed Nov 17 06:02:52 2004 UTC (10 years, 2 months ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 59037 byte(s)
Diff to previous 10485
From Philippe:
This patch implements the schema evolution to and from selected containers.
The following cases are currently implemented:

  TClonesArray object -> STL object containing the same type
  TClonesArray pointer -> STL pointer containing the same type
  STL object -> STL object containing the same type
  STL pointer -> STL pointer containing the same type

  STL split branches -> TClonesArray

In addition this patch implement the ability to have schema evolution
between various version of a foreign class when the library is not present.

This patch also support in in TTree::Draw for the schema evolution of simple
type stored in a non-split branch.

Revision 10485 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Fri Nov 5 14:32:36 2004 UTC (10 years, 2 months ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 58597 byte(s)
Diff to previous 10451
From Markus
I have removed the call
TVirtualCollectionProxy::Streamer()
and
TVirtualCollectionProxy::Resize()

A call to the latter one I thought I have already removed with Rene
some days ago (??) but it did not show up in cvs.

In principle the TVirtualCollectionProxy should now
be sufficiently clean. What may also be questioned are
the calls SetValueClass(), but with this Philippe has
something in mind.

The files
cont/inc/TVectorProxy.h
cont/inc/TEmulatedVectorProxy.h
cont/src/TEmulatedVectorProxy.cxx

should be removed from the cvs head. They are no longer in use.
Their functionality was completely taken over by the
new proxy class(es).

WARNING!!!!
When installing from source, do
  rm -f cont/src/G*
  rm -f cont/src/TEmulatedVectorProxy.*
  make

Revision 10451 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Tue Nov 2 16:21:30 2004 UTC (10 years, 2 months ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 58513 byte(s)
Diff to previous 10350
In TStreamerInfo::ReadBuffer use proxy->Allocate instead of proxy->Resize
in case of STL containers. calling Resize was wrong for associative
containers.

Revision 10350 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Tue Oct 19 11:00:09 2004 UTC (10 years, 3 months ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 58455 byte(s)
Diff to previous 9861
From Philippe:
implements MemberWise streaming for collection with a
TVirtualCollectionProxy and whose content is splittable (i.e. guaranteed
homogeneous).

In this first implementation, objectwise streaming is still the default.
To activate memberwise streaming, call the static function
   TStreamerInfo::SetStreamMemberWise(kTRUE);

Revision 9861 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Wed Sep 1 07:30:26 2004 UTC (10 years, 4 months ago) by rdm
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 56249 byte(s)
Diff to previous 9826
fix compilation problem on MacOS X 10.3 (gcc 3.3) concerning function
templates. Same problem as for VC6 and Alpha.

Revision 9826 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Mon Aug 23 16:42:51 2004 UTC (10 years, 5 months ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 56666 byte(s)
Diff to previous 9825
From Philippe
Fix some compiler warnings about unused variables

Revision 9825 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Mon Aug 23 16:05:43 2004 UTC (10 years, 5 months ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 56873 byte(s)
Diff to previous 9803
From Philippe:
This patch work around the fact that some compiler (MS6 and alpha) does
not properly handle templated member function.  This result in non optimal
run-time performance on those platforms.  Also work around the difficulty
with stl container for void* with CINT on MS7)

Revision 9803 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Fri Aug 20 21:02:10 2004 UTC (10 years, 5 months ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 45736 byte(s)
Diff to previous 9290
From Philippe:
This patch is an important step toward the implementation of the member-wise
saving of stl containers.

Mainly, the code does not require anymore the collection proxy to be able
to provide a C-style array of pointer to its content.  This avoid the
problems of having to iterate twice through some collection and/or to have to
keep in memory a version of this array.  Concretely this also mean that the
I/O routine will now be able to recurse through stl containers.

Technically, this is done by templating TStreamerInfo::ReadBuffer and
TStreamerInfo::WriteBufferAux (as well as the ReadBufferSkip And
ReadBufferConv) so that you can use it directly with a char** or
with a TVirtualCollection (to which we added an operator [] and
removed the method GetPtrArray).

In addition, we added 2 new method to TVirtualCollectionProxy:
PushProxy and PopProxy that will allow to keep some state on
where we are in the iteration for a collection when we recurse.
(This is required for a reasonable implementation of the
TVirtualCollection for std::list).

Also (in an unrelated fix) we update TTreePlayer::Scan to
properly display the columns when they are more expressions
in the request than leaves in the tree.

Revision 9290 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Tue Jun 22 18:47:17 2004 UTC (10 years, 7 months ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 25326 byte(s)
Diff to previous 8882
From Philippe:
TXmlBuffer.cxx:
Update IncrementLevel and DecrementLevel to call their TBuffer
counter-part.

TStreamerInfo.h:
Increase the class version to allow backward compatibility test
(STL containers of pointer to a class not inheriting from TObject
but with a ClassDef.)

TXmlBuffer.cxx TStreamerInfo.cxx
formatting updates

rootcint.cxx TROOT.cxx
Made sure that the version number of a STL continer's TClass is
always the same as TStreamerInfo's class version.
Fix a backward compatibility problem with STL containers of
pointer to a class not inheriting from TObject but with a ClassDef.

Revision 8882 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Tue May 11 15:32:36 2004 UTC (10 years, 8 months ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 25325 byte(s)
Diff to previous 8814
Move the calls to TBuffer::Incrementlevel and TBuffer::DecrementLevel
from TClass::readBuffer/WriteBuffer to TStreamerInfo::ReadBuffer and WriteBuffer.
With this changes the XML I/O works for TClonesArrays.

Revision 8814 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Fri May 7 09:12:16 2004 UTC (10 years, 8 months ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 25272 byte(s)
Diff to previous 8563
Add calls to the new TBuffer function SetStreamerElementNumber in the ReadBuffer and WriteBuffer
functions

Revision 8563 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Mon Apr 12 11:08:26 2004 UTC (10 years, 9 months ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 25222 byte(s)
Diff to previous 8098
From Philippe:
This patch prevents crashes if the file is missing some PIDS or when
the kIsReferenced bit is unexpectedly set (which would result in
requesting a non-existent PID).

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/io/src/TStreamerInfoReadBuffer.cxx
File length: 25183 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/io/src/TStreamerInfoReadBuffer.cxx
File length: 24493 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/io/src/TStreamerInfoReadBuffer.cxx
File length: 25183 byte(s)
Diff to previous 7997
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 7997 - (view) (download) (as text) (annotate) - [select for diffs]
Modified Fri Jan 23 22:00:35 2004 UTC (11 years ago) by brun
Original Path: trunk/io/src/TStreamerInfoReadBuffer.cxx
File length: 24493 byte(s)
Diff to previous 7880
From Philippe:
fix a problem of backward compatibility when inheriting from STL containers.

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/io/src/TStreamerInfoReadBuffer.cxx
File length: 24223 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