Log of /trunk/net/net/src/TMessage.cxx
Parent Directory
Revision
39696 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Mon Jun 13 21:35:34 2011 UTC (3 years, 7 months ago) by
pcanal
File length: 14005 byte(s)
Diff to
previous 37985
From David Dagenhart:
Implement an option to allow ROOT to use the LZMA compression
algorithm to compress data instead of the ZLIB compression algorithm.
LZMA compression typically results in smaller files, but takes more
CPU time to compress data. To use the new feature, the external XZ
package must be installed when ROOT is configured and built:
Download 5.0.3 from here http://tukaani.org/xz/
and make sure to configure with fPIC:
./configure CFLAGS='-fPIC'
Then the client C++ code must call routines to explicitly request LZMA
compression.
ZLIB compression is still the default.
Setting the Compression Level and Algorithm:
There are three equivalent ways to set the compression level and
algorithm. For example, to set the compression to the LZMA algorithm
and compression level 5.
1. TFile f(filename, option, title);
f.SetCompressionSettings(ROOT::CompressionSettings(ROOT::kLZMA, 5));
OR
2. TFile f(filename, option, title, ROOT::CompressionSettings(ROOT::kLZMA, 5));
OR
3. TFile f(filename, option, title);
f.SetCompressionAlgorithm(ROOT::kLZMA);
f.SetCompressionLevel(5);
These methods work for TFile, TBranch, TMessage, TSocket, and TBufferXML.
The compression algorithm and level settings only affect compression of
data after they have been set. TFile passes its settings to its branches
only at the time the branches are created. This can be overidden by
explicitly setting the level and algorithm for the branch. These classes
also have the following methods to access the algorithm and level for
compression.
Int_t GetCompressionAlgorithm() const;
Int_t GetCompressionLevel() const;
Int_t GetCompressionSettings() const;
If the compression level is set to 0, then no compression will be
done. All of the currently supported algorithms allow the level to be
set to any value from 1 to 9. The higher the level, the larger the
compression factors will be (smaller compressed data size). The
tradeoff is that for higher levels more CPU time is used for
compression and possibly more memory. The ZLIB algorithm takes less
CPU time during compression than the LZMA algorithm, but the LZMA
algorithm usually delivers higher compression factors.
The header file core/zip/inc/Compression.h declares the function
"CompressionSettings" and the enumeration for the algorithms.
Currently the following selections can be made for the algorithm:
kZLIB (1), kLZMA (2), kOldCompressionAlgo (3), and kUseGlobalSetting
(0). The last option refers to an older interface used to control the
algorithm that is maintained for backward compatibility. The following
function is defined in core/zip/inc/Bits.h and it set the global
variable.
R__SetZipMode(int algorithm)
If the algorithm is set to kUseGlobalSetting (0), the global variable
controls the algorithm for compression operations. This is the
default and the default value for the global variable is kZLIB.
Note that the LZMA algorithm will only be available if the LZMA
libraries from the XZ package were available when the ROOT executable
being used was configured and built. If you are building ROOT and want
LZMA then you must do something similar to the following if XZ is not
already installed on your system.
Download XZ version 5.0.3 from http://tukaani.org/xz/
unwind the tarball
cd xz-5.0.3
./configure CFLAGS='-fPIC'
make
ROOT was tested with version 5.0.3 of XZ. It might work with earlier
versions and will probably work with later versions of XZ.
Then either use "make install" to put the library and headers into
/usr/local/* so the scripts building ROOT can find them or use
arguments to the ROOT configure script to point to the proper
directories containing the XZ library and headers. These are the
library and the included header (lzma.h includes other headers in the
lzma subdirectory).
src/liblzma/.libs/liblzma.a
src/liblzma/api/lzma.h
WARNING: Data compressed with the LZMA algorithm cannot be read by
ROOT executables that were not built with LZMA support.
Revision
37985 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Fri Feb 4 21:37:55 2011 UTC (3 years, 11 months ago) by
pcanal
File length: 12906 byte(s)
Diff to
previous 35752
From Constantin Loizides:
Explicitly check the validity of the zipped buffer before calling
R__unzip, this allow for better error recovery.
Introduce R__unzip_header which does the check and calculate the length values
Revision
35752 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Sun Sep 26 22:07:36 2010 UTC (4 years, 3 months ago) by
rdm
File length: 12724 byte(s)
Diff to
previous 35314
From Matevz:
attached a patch that allows buffer size to be specified as an
optional argument to TMessage constructor. The minimal size will still be
enforced to 128 bytes in TBuffer constructor, while the default remains 1024.
Revision
35314 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Thu Sep 16 03:22:09 2010 UTC (4 years, 4 months ago) by
pcanal
File length: 12680 byte(s)
Diff to
previous 27915
Migrate the functionality of TStreamerInfo::TagFile to a new interface TBuffer::TagStreamerInfo
so that TMessage can customize the behavior. TMessage now relies on this new interface
instead of TBuffer::IncrementLevel which had the disadvantage of being called not only
during writing but also during reading (where there is no need to keep track of the StreamerInfo used).
[This change will also allow us to keep the calls to IncrementLevel/DecrementLevel only in the
case the buffer is a TBufferXML]
Fix the implementation of TSocket::RecvStreamerInfos to properly handle the case where there are
abstract classes (when GetStreamerInfo() can not be called on an abstract class until it has
been called for one of the concrete derived classes) and the case of STL containers.
Revision
26959 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Tue Dec 16 15:53:31 2008 UTC (6 years, 1 month ago) by
rdm
File length: 12497 byte(s)
Diff to
previous 24432
TMessage must set SetBit(kCannotHandleMemberWiseStreaming) to be able to
automatically handle the correct streaming of TClonesArrays. This fixes
issue #43211.
Revision
24432 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Fri Jun 20 15:43:30 2008 UTC (6 years, 7 months ago) by
rdm
File length: 12347 byte(s)
Diff to
previous 24218
add local fEvolution flag in TMessage. It will be initialized by the value
of fgEvolution at the time of message creation. This to:
1) allow some message to have schema evolution while others not
2) to avoid that the changing of the global fgEvolution during the life-time
of a message to cause problems
Revision
24218 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Wed Jun 11 15:39:32 2008 UTC (6 years, 7 months ago) by
brun
File length: 12077 byte(s)
Diff to
previous 24164
-implement the new function TMessage::ForceWriteInfo. The function adds the TStreamerInfo
objects to the list of streamed TStreamerInfos.
Revision
24164 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Fri Jun 6 12:20:34 2008 UTC (6 years, 7 months ago) by
brun
File length: 11817 byte(s)
Diff to
previous 23961
Protect TF1::ExecuteEvent in case fHistogram is null. This case may happen
in a multi-threaded application when one thread repaints the histogram while the mouse is over a pad containing a TF1.
Revision
23961 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Thu May 22 07:44:09 2008 UTC (6 years, 8 months ago) by
brun
File length: 11250 byte(s)
Diff to
previous 23956
Make the automatic schema evolution optional.
Add a new static function
TMessage::EnableSchemaEvolution(Bool_t enable=kFALSE)
Revision
23956 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Wed May 21 17:05:21 2008 UTC (6 years, 8 months ago) by
brun
File length: 10382 byte(s)
Diff to
previous 23942
In view of the coming TSocket schema evolution support, we extend TMessage with
a new TList* fInfos member that keeps track of all TStreamerInfo objects used when writing the object in the message.
Implement TMessage::WriteObject overloading TBufferFile::WriteObject.
Revision
23091 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Wed Apr 9 15:04:27 2008 UTC (6 years, 9 months ago) by
rdm
File length: 9684 byte(s)
Copied from:
trunk/net/src/TMessage.cxx revision 23090
Diff to
previous 21676
moving the follwing directories to "net":
alien, auth, glite, globusauth, krb5auth, ldap, monalisa, net, netx,
rootd, rpdutils, srputils, xrootd
Revision
17402 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Fri Jan 19 16:48:00 2007 UTC (8 years ago) by
brun
Original Path:
trunk/net/src/TMessage.cxx
File length: 9756 byte(s)
Diff to
previous 8816
CVs been changed into a pure abstract interface.
The concrete implementation is in the new class TBufferFile.
All classes previously deriving from TBuffer derive now from TBufferFile, ie
TBuffer <- TBufferFile <- TMessage
<- TBufferXML
<- TBufferSQL
<- TBufferSQL2
Because there are several problems with C++ operators overloading,
The I/O operators are defined in TBuffer. These are inline functions
calling C++ virtual functions defined in TBuffer and overloaded
by TBufferFile and all other derived classes when necessary.
The previous implementation of TBuffer.h included <vector> and Bytes.h.
The two include statements have been moved to TBufferFile.h. As a result the
compilation of the ROOT system is now slightly faster and a big bonus
is that changes in TBufferFile or Bytes.h will affect only TBufferFile
and will not force the recompilation of the entire system.
This change has some side-effects. If you assumed that include <vector>
was done by TBuffer.h, you may have to specify this include directly
in your class. This was the case for a few ROOT classes.
: ----------------------------------------------------------------------
Revision
8795 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Wed May 5 14:43:34 2004 UTC (10 years, 8 months ago) by
rdm
Original Path:
trunk/net/src/TMessage.cxx
File length: 9722 byte(s)
Diff to
previous 4197
allow TMessages to be compressed before sending them. To have a specific
message compressed use TMessage::SetCompressionLevel(n) where 0 < n <= 9,
like for TFile::SetCompressionLevel(). To have all messages send over
a specific TSocket compressed, use TSocket::SetCompressionLevel().
When a compressed message is received it is automatically uncompressed.
See modified tutorials/hclient.C on how this feature is used.
Revision
1193 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Tue Dec 12 18:20:02 2000 UTC (14 years, 1 month ago) by
rdm
Original Path:
trunk/net/src/TMessage.cxx
File length: 4357 byte(s)
Diff to
previous 516
override TBuffer::WriteObject() and make sure gFile=0 so no streamer info
object will be attached to the currently open file. Also provide definition
of copy and assignment operators, but no implementation, so CINT does not
generate an automatic copy ctor that would call the not implemented TBuffer
copy ctor.
Revision
516 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Mon Aug 21 10:37:30 2000 UTC (14 years, 5 months ago) by
rdm
Original Path:
trunk/net/src/TMessage.cxx
File length: 3990 byte(s)
Diff to
previous 3
added new method TMessage::Forward() which allows a just received message
to be send out (forwarded). It switches the TMessage from read mode to write
mode and resets some internal pointers. Change also required change in way
private TMessage ctor is called by friend TSocket::Recv() method.
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.