Analysis  version 7.0 - august 2014
Data.hh
Go to the documentation of this file.
1 //======================================================================
2 /*! \file Data.hh
3  *
4  * Déclaration des méthodes de la classe Data qui est une classe
5  * générique pour les type de données.
6  */
7 //======================================================================
8 
9 #ifndef DATA_HH
10 #define DATA_HH
11 
12 // contient la définition des types
13 #include "EventCommon.hh"
14 #include "Tools.hh"
15 
16 //----------------------------------------------------------------------
17 // résultat des conversions de données
18 #define DATA_NO_CAST 0x00000000 ///< Bits d'état d'une donnée: pas de conversion
19 #define DATA_VALID_CAST 0x00000001 ///< Bits d'état d'une donnée: conversion acceptée
20 #define DATA_BAD_CAST 0x80000000 ///< Bits d'état d'une donnée: conversion incorrecte
21 #define DATA_BIT_CUT 0x80000001 ///< Bits d'état d'une donnée: troncation de bits utilisés
22 #define DATA_SIGN_FLIP 0x80000002 ///< Bits d'état d'une donnée: changement effectif de signe
23 #define DATA_UNKNOWN 0x80000004 ///< Bits d'état d'une donnée: type de données incorrect
24 #define DATA_INVALID 0x80000008 ///< Bits d'état d'une donnée: donnée loufoque
25 #define DATA_BAD 0x80000000 ///< Bits d'état d'une donnée: donnée inutilisable
26 #define DATA_NO_DATA 0xFFFFFFFF ///< Bits d'état d'une donnée: singleton de DataBad
27 
28 //----------------------------------------------------------------------
29 // bits de définition des types numériques
30 #define DATA_TYPE_REAL 0x00010000 ///< Type d'une donnée: bit 16 = 1: donnée de type réel
31 #define DATA_TYPE_UNSIGNED 0x00001000 ///< Type d'une donnée: bit 12 = 1: donnée de type non signéesP
32 #define DATA_TYPE_16B 0x00000001 ///< Type d'une donnée: bits 0 = 0 et bit 1 = 1: donnée sur 16 bits
33 #define DATA_TYPE_32B 0x00000002 ///< Type d'une donnée: bits 0 = 1 et bit 1 = 0: donnée sur 32 bits
34 #define DATA_TYPE_64B 0x00000003 ///< Type d'une donnée: bits 0 = 1 et bit 1 = 1: donnée sur 64 bits
35 
36 /// Bits de définition des types numériques
38 {
39  dataTypeReal = 0x00010000, // Type d'une donnée: bit 16 = 1: donnée de type réel
40  dataTypeUnsigned = 0x00001000, // Type d'une donnée: bit 12 = 1: donnée de type non signée dataType16b = 0x00000001, // Type d'une donnée: bits 0 = 0 et bit 1 = 1: donnée sur 16 bits dataType32b = 0x00000002, // Type d'une donnée: bits 0 = 1 et bit 1 = 0: donnée sur 32 bits dataType64b = 0x00000003 // Type d'une donnée: bits 0 = 1 et bit 1 = 1: donnée sur 64 bits }; //---------------------------------------------------------------------- #define DATA_TYPE_UNDEFINED 0 ///< bits pour type de donnée inconnu #define DATA_TYPE_U_INT2 (DATA_TYPE_UNSIGNED | DATA_TYPE_16B) ///< bits spécifiant le type de donnée #define DATA_TYPE_U_INT4 (DATA_TYPE_UNSIGNED | DATA_TYPE_32B) ///< bits spécifiant le type de donnée #define DATA_TYPE_U_INT8 (DATA_TYPE_UNSIGNED | DATA_TYPE_64B) ///< bits spécifiant le type de donnée #define DATA_TYPE_INT2 (DATA_TYPE_16B) ///< bits spécifiant le type de donnée #define DATA_TYPE_INT4 (DATA_TYPE_32B) ///< bits spécifiant le type de donnée #define DATA_TYPE_INT8 (DATA_TYPE_64B) ///< bits spécifiant le type de donnée #define DATA_TYPE_REAL4 (DATA_TYPE_REAL | DATA_TYPE_32B) ///< bits spécifiant le type de donnée #define DATA_TYPE_REAL8 (DATA_TYPE_REAL | DATA_TYPE_64B) ///< bits spécifiant le type de donnée /// Définition des types numériques enum ParamDataTypes { dataTypeUndefined = 0, // bits pour type de donnée inconnu dataTypeUInt2 = (dataTypeUnsigned | dataType16b), // bits spécifiant le type de donnée dataTypeUInt4 = (dataTypeUnsigned | dataType32b), // bits spécifiant le type de donnée dataTypeUInt8 = (dataTypeUnsigned | dataType64b), // bits spécifiant le type de donnée dataTypeInt2 = (dataType16b), // bits spécifiant le type de donnée dataTypeInt4 = (dataType32b), // bits spécifiant le type de donnée dataTypeInt8 = (dataType64b), // bits spécifiant le type de donnée dataTypeReal4 = (dataTypeReal | dataType32b), // bits spécifiant le type de donnée dataTypeReal8 = (dataTypeReal | dataType64b) // bits spécifiant le type de donnée }; //---------------------------------------------------------------------- #define DATA_TYPE_TXT_UNDEFINED "???" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT2 "U*2" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT4 "U*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT8 "U*8" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT2 "I*2" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT4 "I*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT8 "I*8" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_REAL4 "R*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_REAL8 "R*8" ///< identifiant texte du type de donnée //---------------------------------------------------------------------- const U_Int2 DATA_UI2_MAX = 0xFFFF; ///< valeur maxi pour conversion d'un entier const Int2 DATA_I2_MIN = -32768; ///< valeur mini pour conversion d'un entier const Int2 DATA_I2_MAX = 32767; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI2_RMAX = 65535.; ///< valeur mini pour conversion d'un entier const Real8 DATA_I2_RMIN = -32768.; ///< valeur mini pour conversion d'un réel const Real8 DATA_I2_RMAX = 32767.; ///< valeur maxi pour conversion d'un réel const U_Int2 DATA_UI2_SIGN = (DATA_UI2_MAX-DATA_I2_MAX); ///< Bit de signe 16 bits //---------------------------------------------------------------------- const U_Int4 DATA_UI4_MAX = 0xFFFFFFFF; ///< valeur maxi pour conversion d'un entier const Int4 DATA_I4_MIN = 0x80000000; ///< valeur mini pour conversion d'un entier const Int4 DATA_I4_MAX = 0x7FFFFFFF; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI4_RMAX = 4294967295.; ///< valeur mini pour conversion d'un entier const Real8 DATA_I4_RMIN = -2147483648.; ///< valeur mini pour conversion d'un réel const Real8 DATA_I4_RMAX = 2147483647.; ///< valeur maxi pour conversion d'un réel const U_Int4 DATA_UI4_SIGN = (DATA_UI4_MAX-DATA_I4_MAX); ///< Bit de signe 32 bits const U_Int4 DATA_UI4_HI16 = (DATA_UI4_MAX-DATA_UI2_MAX); ///< Masque binaire 16 bits forts sur 32 bits //---------------------------------------------------------------------- // récupéré dans les includes de root #ifndef __MAKECINT__ const U_Int8 DATA_UI8_MAX = kMaxULong64; ///< valeur maxi pour conversion d'un entier const Int8 DATA_I8_MAX = kMaxLong64; ///< valeur mini pour conversion d'un entier const Int8 DATA_I8_MIN = kMinLong64; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI8_RMAX = Double_t(DATA_UI8_MAX); ///< valeur mini pour conversion d'un entier const Real8 DATA_I8_RMAX = Double_t(DATA_I8_MAX); ///< valeur mini pour conversion d'un réel const Real8 DATA_I8_RMIN = Double_t(DATA_I8_MIN); ///< valeur maxi pour conversion d'un réel const U_Int8 DATA_UI8_SIGN = (DATA_UI8_MAX-DATA_I8_MAX); ///< Bit de signe 64 bits const U_Int8 DATA_UI8_HI16 = (DATA_UI8_MAX-DATA_UI4_MAX); ///< Masque binaire 16 bits forts sur 32 bits const U_Int8 DATA_UI8_HI24 = (DATA_UI8_MAX-DATA_UI2_MAX); ///< Masque binaire 24 bits forts sur 32 bits #endif /* NON IMPLEMENTE !!! #define DATA_I8_RMIN -9223372036854775808. #define DATA_I8_RMAX 9223372036854775807. #define DATA_I8_MIN -9223372036854775808 #define DATA_I8_MAX 9223372036854775807 #define DATA_UI8_RMAX 18446744065119617025. #define DATA_UI8_MAX 18446744065119617025 */ //class Param; //====================================================================== /*! \class Data * * Classe générique (abstraite) pour les types de données. * Ce sont les classes dérivées qui peuvent être instanciées: elles * ont un type de données spécifique, qui ne peut pas être modifié ! * \note: * - Les opérateurs d'affectation de valeurs numériques sont virtuels. * - Pour les comparaison, il faut effectuer un cast. * - Les objets dérivés de la classe Data n'ont pas vocation à * être déclarés constant, parce qu'ils peuvent être modifiés * (mot d'état) lorsqu'ils sont copiés ou affectés. * - Les méthodes de cast vers les types numériques sont définis * une fois pour toutes par une méthode patron de la classe de * base Data, par un appel aux méthodes virtuelles GetValue. * - Les méthodes GetValue, SetValue et l'opérateur d'affection * doivent être définis dans les classes dérivées pour l'ensemble * des types de valeurs considérés. * * Les objets de la classe Data (et de ses dérivées) gèrent automatiquement * les changements de type. Dans ce cas, le mot d'état (status) rend * compte des difficultés ou impossibilités de conversions. * */ class Data { //---------------------------------------------------------------------- /*! \object_doc */ GObjectV(Data); //---------------------------------------------------------------------- protected: static u_int len; ///< Longueur d'affichage static u_int prec; ///< Précision d'affichage static char fill; ///< Caractère de remplissage static string undef; ///< Chaîne pour l'écriture de donnée non valide int status; ///< Indicateur de l'état des conversions de types public: //---------------------------------------------------------------------- // CONSTRUCTEUR / AFFECTATION / DESTRUCTEUR //---------------------------------------------------------------------- // Constructeur Data ( ); // Constructeur de recopie Data ( const Data &d ); // Destructeur virtual ~Data ( ); //---------------------------------------------------------------------- public: /*! Méthode qui fixe la longueur d'écriture en format texte. * \param l longueur du format */ static inline void SetLen ( u_int l ) { len = l; if (undef.length() < len) undef = string(len-undef.length(),' ') + undef; } /*! Méthode qui fixe la précision d'écriture en format texte. * \param p précision du format */ static inline void SetPrec ( u_int p ) { prec = p; } /*! Méthode qui fixe le caractère de remplissage en format texte. * \param c caractère de remplissage */ static inline void SetFill ( char c ) { fill = c; } /*! Méthode qui fixe la chaîne de caractères pour l'écriture * d'une donnée non valide. * \param str chaîne à écrire */ static inline void SetFill ( const string &str ) { undef = str; } // retourne une donnée non valide static Data & Bad(); //---------------------------------------------------------------------- /*! Opérateur d'affectation d'une autre donnée. * \param d donnée à affecter */ virtual Data & operator = ( const Data & d ) { return (*this); } /*! Opérateur d'affectation d'une valeur de type entier 16 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int2 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 16 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int2 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 32 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 64 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real8 & d ) = 0; //---------------------------------------------------------------------- /*! Méthode virtuelle pure qui renvoit un identificateur de type * de données. */ virtual u_int TypeId ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant le type * de données. */ virtual string Type ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant la valeur. */ virtual string String ( ) const = 0; /*! Méthode qui renvoit une chaîne indiquant le type * de données et la valeur. */ inline virtual string Text ( ) const { return (string("(") + Type() + ") " + String()); } /*! Méthode qui renvoit une chaîne indiquant le type * de données, la valeur et le mot d'état. */ inline virtual string FullText ( ) const { return (Text() + " status = 0x" + GGetStringHexa((U_Int4) status)); } //---------------------------------------------------------------------- // OPERATEURS DE CAST //---------------------------------------------------------------------- /*! Patron pour opérateur de cast vers différents types de * données. */ template < class T > operator T (void) const { T result; GetValue (result); return (result); } //---------------------------------------------------------------------- /*! Mise à valeur à l'aide d'un entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real4 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real8 &val ) = 0; //---------------------------------------------------------------------- /*! Affectation d'une variable de type entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
41  dataType16b = 0x00000001, // Type d'une donnée: bits 0 = 0 et bit 1 = 1: donnée sur 16 bits
42  dataType32b = 0x00000002, // Type d'une donnée: bits 0 = 1 et bit 1 = 0: donnée sur 32 bits
43  dataType64b = 0x00000003 // Type d'une donnée: bits 0 = 1 et bit 1 = 1: donnée sur 64 bits
44 };
45 
46 //----------------------------------------------------------------------
47 #define DATA_TYPE_UNDEFINED 0 ///< bits pour type de donnée inconnu
48 #define DATA_TYPE_U_INT2 (DATA_TYPE_UNSIGNED | DATA_TYPE_16B) ///< bits spécifiant le type de donnée]*
49 #define DATA_TYPE_U_INT4 (DATA_TYPE_UNSIGNED | DATA_TYPE_32B) ///< bits spécifiant le type de donnée4
50 #define DATA_TYPE_U_INT8 (DATA_TYPE_UNSIGNED | DATA_TYPE_64B) ///< bits spécifiant le type de donnée]*
51 #define DATA_TYPE_INT2 (DATA_TYPE_16B) ///< bits spécifiant le type de donnée]*
52 #define DATA_TYPE_INT4 (DATA_TYPE_32B) ///< bits spécifiant le type de donnéead5852d9e@
53 #define DATA_TYPE_INT8 (DATA_TYPE_64B) ///< bits spécifiant le type de donnée]*
54 #define DATA_TYPE_REAL4 (DATA_TYPE_REAL | DATA_TYPE_32B) ///< bits spécifiant le type de donnée]*
55 #define DATA_TYPE_REAL8 (DATA_TYPE_REAL | DATA_TYPE_64B) ///< bits spécifiant le type de donnée4
56 
57 /// Définition des types numériques
59 {
60  dataTypeUndefined = 0, // bits pour type de donnée inconnu
61  dataTypeUInt2 = (dataTypeUnsigned | dataType16b), // bits spécifiant le type de donnée dataTypeUInt4 = (dataTypeUnsigned | dataType32b), // bits spécifiant le type de donnée dataTypeUInt8 = (dataTypeUnsigned | dataType64b), // bits spécifiant le type de donnée dataTypeInt2 = (dataType16b), // bits spécifiant le type de donnée dataTypeInt4 = (dataType32b), // bits spécifiant le type de donnée dataTypeInt8 = (dataType64b), // bits spécifiant le type de donnée dataTypeReal4 = (dataTypeReal | dataType32b), // bits spécifiant le type de donnée dataTypeReal8 = (dataTypeReal | dataType64b) // bits spécifiant le type de donnée }; //---------------------------------------------------------------------- #define DATA_TYPE_TXT_UNDEFINED "???" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT2 "U*2" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT4 "U*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT8 "U*8" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT2 "I*2" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT4 "I*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT8 "I*8" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_REAL4 "R*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_REAL8 "R*8" ///< identifiant texte du type de donnée //---------------------------------------------------------------------- const U_Int2 DATA_UI2_MAX = 0xFFFF; ///< valeur maxi pour conversion d'un entier const Int2 DATA_I2_MIN = -32768; ///< valeur mini pour conversion d'un entier const Int2 DATA_I2_MAX = 32767; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI2_RMAX = 65535.; ///< valeur mini pour conversion d'un entier const Real8 DATA_I2_RMIN = -32768.; ///< valeur mini pour conversion d'un réel const Real8 DATA_I2_RMAX = 32767.; ///< valeur maxi pour conversion d'un réel const U_Int2 DATA_UI2_SIGN = (DATA_UI2_MAX-DATA_I2_MAX); ///< Bit de signe 16 bits //---------------------------------------------------------------------- const U_Int4 DATA_UI4_MAX = 0xFFFFFFFF; ///< valeur maxi pour conversion d'un entier const Int4 DATA_I4_MIN = 0x80000000; ///< valeur mini pour conversion d'un entier const Int4 DATA_I4_MAX = 0x7FFFFFFF; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI4_RMAX = 4294967295.; ///< valeur mini pour conversion d'un entier const Real8 DATA_I4_RMIN = -2147483648.; ///< valeur mini pour conversion d'un réel const Real8 DATA_I4_RMAX = 2147483647.; ///< valeur maxi pour conversion d'un réel const U_Int4 DATA_UI4_SIGN = (DATA_UI4_MAX-DATA_I4_MAX); ///< Bit de signe 32 bits const U_Int4 DATA_UI4_HI16 = (DATA_UI4_MAX-DATA_UI2_MAX); ///< Masque binaire 16 bits forts sur 32 bits //---------------------------------------------------------------------- // récupéré dans les includes de root #ifndef __MAKECINT__ const U_Int8 DATA_UI8_MAX = kMaxULong64; ///< valeur maxi pour conversion d'un entier const Int8 DATA_I8_MAX = kMaxLong64; ///< valeur mini pour conversion d'un entier const Int8 DATA_I8_MIN = kMinLong64; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI8_RMAX = Double_t(DATA_UI8_MAX); ///< valeur mini pour conversion d'un entier const Real8 DATA_I8_RMAX = Double_t(DATA_I8_MAX); ///< valeur mini pour conversion d'un réel const Real8 DATA_I8_RMIN = Double_t(DATA_I8_MIN); ///< valeur maxi pour conversion d'un réel const U_Int8 DATA_UI8_SIGN = (DATA_UI8_MAX-DATA_I8_MAX); ///< Bit de signe 64 bits const U_Int8 DATA_UI8_HI16 = (DATA_UI8_MAX-DATA_UI4_MAX); ///< Masque binaire 16 bits forts sur 32 bits const U_Int8 DATA_UI8_HI24 = (DATA_UI8_MAX-DATA_UI2_MAX); ///< Masque binaire 24 bits forts sur 32 bits #endif /* NON IMPLEMENTE !!! #define DATA_I8_RMIN -9223372036854775808. #define DATA_I8_RMAX 9223372036854775807. #define DATA_I8_MIN -9223372036854775808 #define DATA_I8_MAX 9223372036854775807 #define DATA_UI8_RMAX 18446744065119617025. #define DATA_UI8_MAX 18446744065119617025 */ //class Param; //====================================================================== /*! \class Data * * Classe générique (abstraite) pour les types de données. * Ce sont les classes dérivées qui peuvent être instanciées: elles * ont un type de données spécifique, qui ne peut pas être modifié ! * \note: * - Les opérateurs d'affectation de valeurs numériques sont virtuels. * - Pour les comparaison, il faut effectuer un cast. * - Les objets dérivés de la classe Data n'ont pas vocation à * être déclarés constant, parce qu'ils peuvent être modifiés * (mot d'état) lorsqu'ils sont copiés ou affectés. * - Les méthodes de cast vers les types numériques sont définis * une fois pour toutes par une méthode patron de la classe de * base Data, par un appel aux méthodes virtuelles GetValue. * - Les méthodes GetValue, SetValue et l'opérateur d'affection * doivent être définis dans les classes dérivées pour l'ensemble * des types de valeurs considérés. * * Les objets de la classe Data (et de ses dérivées) gèrent automatiquement * les changements de type. Dans ce cas, le mot d'état (status) rend * compte des difficultés ou impossibilités de conversions. * */ class Data { //---------------------------------------------------------------------- /*! \object_doc */ GObjectV(Data); //---------------------------------------------------------------------- protected: static u_int len; ///< Longueur d'affichage static u_int prec; ///< Précision d'affichage static char fill; ///< Caractère de remplissage static string undef; ///< Chaîne pour l'écriture de donnée non valide int status; ///< Indicateur de l'état des conversions de types public: //---------------------------------------------------------------------- // CONSTRUCTEUR / AFFECTATION / DESTRUCTEUR //---------------------------------------------------------------------- // Constructeur Data ( ); // Constructeur de recopie Data ( const Data &d ); // Destructeur virtual ~Data ( ); //---------------------------------------------------------------------- public: /*! Méthode qui fixe la longueur d'écriture en format texte. * \param l longueur du format */ static inline void SetLen ( u_int l ) { len = l; if (undef.length() < len) undef = string(len-undef.length(),' ') + undef; } /*! Méthode qui fixe la précision d'écriture en format texte. * \param p précision du format */ static inline void SetPrec ( u_int p ) { prec = p; } /*! Méthode qui fixe le caractère de remplissage en format texte. * \param c caractère de remplissage */ static inline void SetFill ( char c ) { fill = c; } /*! Méthode qui fixe la chaîne de caractères pour l'écriture * d'une donnée non valide. * \param str chaîne à écrire */ static inline void SetFill ( const string &str ) { undef = str; } // retourne une donnée non valide static Data & Bad(); //---------------------------------------------------------------------- /*! Opérateur d'affectation d'une autre donnée. * \param d donnée à affecter */ virtual Data & operator = ( const Data & d ) { return (*this); } /*! Opérateur d'affectation d'une valeur de type entier 16 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int2 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 16 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int2 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 32 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 64 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real8 & d ) = 0; //---------------------------------------------------------------------- /*! Méthode virtuelle pure qui renvoit un identificateur de type * de données. */ virtual u_int TypeId ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant le type * de données. */ virtual string Type ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant la valeur. */ virtual string String ( ) const = 0; /*! Méthode qui renvoit une chaîne indiquant le type * de données et la valeur. */ inline virtual string Text ( ) const { return (string("(") + Type() + ") " + String()); } /*! Méthode qui renvoit une chaîne indiquant le type * de données, la valeur et le mot d'état. */ inline virtual string FullText ( ) const { return (Text() + " status = 0x" + GGetStringHexa((U_Int4) status)); } //---------------------------------------------------------------------- // OPERATEURS DE CAST //---------------------------------------------------------------------- /*! Patron pour opérateur de cast vers différents types de * données. */ template < class T > operator T (void) const { T result; GetValue (result); return (result); } //---------------------------------------------------------------------- /*! Mise à valeur à l'aide d'un entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real4 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real8 &val ) = 0; //---------------------------------------------------------------------- /*! Affectation d'une variable de type entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
62  dataTypeUInt4 = (dataTypeUnsigned | dataType32b), // bits spécifiant le type de donnée dataTypeUInt8 = (dataTypeUnsigned | dataType64b), // bits spécifiant le type de donnée dataTypeInt2 = (dataType16b), // bits spécifiant le type de donnée dataTypeInt4 = (dataType32b), // bits spécifiant le type de donnée dataTypeInt8 = (dataType64b), // bits spécifiant le type de donnée dataTypeReal4 = (dataTypeReal | dataType32b), // bits spécifiant le type de donnée dataTypeReal8 = (dataTypeReal | dataType64b) // bits spécifiant le type de donnée }; //---------------------------------------------------------------------- #define DATA_TYPE_TXT_UNDEFINED "???" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT2 "U*2" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT4 "U*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT8 "U*8" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT2 "I*2" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT4 "I*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT8 "I*8" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_REAL4 "R*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_REAL8 "R*8" ///< identifiant texte du type de donnée //---------------------------------------------------------------------- const U_Int2 DATA_UI2_MAX = 0xFFFF; ///< valeur maxi pour conversion d'un entier const Int2 DATA_I2_MIN = -32768; ///< valeur mini pour conversion d'un entier const Int2 DATA_I2_MAX = 32767; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI2_RMAX = 65535.; ///< valeur mini pour conversion d'un entier const Real8 DATA_I2_RMIN = -32768.; ///< valeur mini pour conversion d'un réel const Real8 DATA_I2_RMAX = 32767.; ///< valeur maxi pour conversion d'un réel const U_Int2 DATA_UI2_SIGN = (DATA_UI2_MAX-DATA_I2_MAX); ///< Bit de signe 16 bits //---------------------------------------------------------------------- const U_Int4 DATA_UI4_MAX = 0xFFFFFFFF; ///< valeur maxi pour conversion d'un entier const Int4 DATA_I4_MIN = 0x80000000; ///< valeur mini pour conversion d'un entier const Int4 DATA_I4_MAX = 0x7FFFFFFF; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI4_RMAX = 4294967295.; ///< valeur mini pour conversion d'un entier const Real8 DATA_I4_RMIN = -2147483648.; ///< valeur mini pour conversion d'un réel const Real8 DATA_I4_RMAX = 2147483647.; ///< valeur maxi pour conversion d'un réel const U_Int4 DATA_UI4_SIGN = (DATA_UI4_MAX-DATA_I4_MAX); ///< Bit de signe 32 bits const U_Int4 DATA_UI4_HI16 = (DATA_UI4_MAX-DATA_UI2_MAX); ///< Masque binaire 16 bits forts sur 32 bits //---------------------------------------------------------------------- // récupéré dans les includes de root #ifndef __MAKECINT__ const U_Int8 DATA_UI8_MAX = kMaxULong64; ///< valeur maxi pour conversion d'un entier const Int8 DATA_I8_MAX = kMaxLong64; ///< valeur mini pour conversion d'un entier const Int8 DATA_I8_MIN = kMinLong64; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI8_RMAX = Double_t(DATA_UI8_MAX); ///< valeur mini pour conversion d'un entier const Real8 DATA_I8_RMAX = Double_t(DATA_I8_MAX); ///< valeur mini pour conversion d'un réel const Real8 DATA_I8_RMIN = Double_t(DATA_I8_MIN); ///< valeur maxi pour conversion d'un réel const U_Int8 DATA_UI8_SIGN = (DATA_UI8_MAX-DATA_I8_MAX); ///< Bit de signe 64 bits const U_Int8 DATA_UI8_HI16 = (DATA_UI8_MAX-DATA_UI4_MAX); ///< Masque binaire 16 bits forts sur 32 bits const U_Int8 DATA_UI8_HI24 = (DATA_UI8_MAX-DATA_UI2_MAX); ///< Masque binaire 24 bits forts sur 32 bits #endif /* NON IMPLEMENTE !!! #define DATA_I8_RMIN -9223372036854775808. #define DATA_I8_RMAX 9223372036854775807. #define DATA_I8_MIN -9223372036854775808 #define DATA_I8_MAX 9223372036854775807 #define DATA_UI8_RMAX 18446744065119617025. #define DATA_UI8_MAX 18446744065119617025 */ //class Param; //====================================================================== /*! \class Data * * Classe générique (abstraite) pour les types de données. * Ce sont les classes dérivées qui peuvent être instanciées: elles * ont un type de données spécifique, qui ne peut pas être modifié ! * \note: * - Les opérateurs d'affectation de valeurs numériques sont virtuels. * - Pour les comparaison, il faut effectuer un cast. * - Les objets dérivés de la classe Data n'ont pas vocation à * être déclarés constant, parce qu'ils peuvent être modifiés * (mot d'état) lorsqu'ils sont copiés ou affectés. * - Les méthodes de cast vers les types numériques sont définis * une fois pour toutes par une méthode patron de la classe de * base Data, par un appel aux méthodes virtuelles GetValue. * - Les méthodes GetValue, SetValue et l'opérateur d'affection * doivent être définis dans les classes dérivées pour l'ensemble * des types de valeurs considérés. * * Les objets de la classe Data (et de ses dérivées) gèrent automatiquement * les changements de type. Dans ce cas, le mot d'état (status) rend * compte des difficultés ou impossibilités de conversions. * */ class Data { //---------------------------------------------------------------------- /*! \object_doc */ GObjectV(Data); //---------------------------------------------------------------------- protected: static u_int len; ///< Longueur d'affichage static u_int prec; ///< Précision d'affichage static char fill; ///< Caractère de remplissage static string undef; ///< Chaîne pour l'écriture de donnée non valide int status; ///< Indicateur de l'état des conversions de types public: //---------------------------------------------------------------------- // CONSTRUCTEUR / AFFECTATION / DESTRUCTEUR //---------------------------------------------------------------------- // Constructeur Data ( ); // Constructeur de recopie Data ( const Data &d ); // Destructeur virtual ~Data ( ); //---------------------------------------------------------------------- public: /*! Méthode qui fixe la longueur d'écriture en format texte. * \param l longueur du format */ static inline void SetLen ( u_int l ) { len = l; if (undef.length() < len) undef = string(len-undef.length(),' ') + undef; } /*! Méthode qui fixe la précision d'écriture en format texte. * \param p précision du format */ static inline void SetPrec ( u_int p ) { prec = p; } /*! Méthode qui fixe le caractère de remplissage en format texte. * \param c caractère de remplissage */ static inline void SetFill ( char c ) { fill = c; } /*! Méthode qui fixe la chaîne de caractères pour l'écriture * d'une donnée non valide. * \param str chaîne à écrire */ static inline void SetFill ( const string &str ) { undef = str; } // retourne une donnée non valide static Data & Bad(); //---------------------------------------------------------------------- /*! Opérateur d'affectation d'une autre donnée. * \param d donnée à affecter */ virtual Data & operator = ( const Data & d ) { return (*this); } /*! Opérateur d'affectation d'une valeur de type entier 16 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int2 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 16 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int2 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 32 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 64 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real8 & d ) = 0; //---------------------------------------------------------------------- /*! Méthode virtuelle pure qui renvoit un identificateur de type * de données. */ virtual u_int TypeId ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant le type * de données. */ virtual string Type ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant la valeur. */ virtual string String ( ) const = 0; /*! Méthode qui renvoit une chaîne indiquant le type * de données et la valeur. */ inline virtual string Text ( ) const { return (string("(") + Type() + ") " + String()); } /*! Méthode qui renvoit une chaîne indiquant le type * de données, la valeur et le mot d'état. */ inline virtual string FullText ( ) const { return (Text() + " status = 0x" + GGetStringHexa((U_Int4) status)); } //---------------------------------------------------------------------- // OPERATEURS DE CAST //---------------------------------------------------------------------- /*! Patron pour opérateur de cast vers différents types de * données. */ template < class T > operator T (void) const { T result; GetValue (result); return (result); } //---------------------------------------------------------------------- /*! Mise à valeur à l'aide d'un entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real4 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real8 &val ) = 0; //---------------------------------------------------------------------- /*! Affectation d'une variable de type entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
63  dataTypeUInt8 = (dataTypeUnsigned | dataType64b), // bits spécifiant le type de donnée dataTypeInt2 = (dataType16b), // bits spécifiant le type de donnée dataTypeInt4 = (dataType32b), // bits spécifiant le type de donnée dataTypeInt8 = (dataType64b), // bits spécifiant le type de donnée dataTypeReal4 = (dataTypeReal | dataType32b), // bits spécifiant le type de donnée dataTypeReal8 = (dataTypeReal | dataType64b) // bits spécifiant le type de donnée }; //---------------------------------------------------------------------- #define DATA_TYPE_TXT_UNDEFINED "???" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT2 "U*2" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT4 "U*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT8 "U*8" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT2 "I*2" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT4 "I*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT8 "I*8" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_REAL4 "R*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_REAL8 "R*8" ///< identifiant texte du type de donnée //---------------------------------------------------------------------- const U_Int2 DATA_UI2_MAX = 0xFFFF; ///< valeur maxi pour conversion d'un entier const Int2 DATA_I2_MIN = -32768; ///< valeur mini pour conversion d'un entier const Int2 DATA_I2_MAX = 32767; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI2_RMAX = 65535.; ///< valeur mini pour conversion d'un entier const Real8 DATA_I2_RMIN = -32768.; ///< valeur mini pour conversion d'un réel const Real8 DATA_I2_RMAX = 32767.; ///< valeur maxi pour conversion d'un réel const U_Int2 DATA_UI2_SIGN = (DATA_UI2_MAX-DATA_I2_MAX); ///< Bit de signe 16 bits //---------------------------------------------------------------------- const U_Int4 DATA_UI4_MAX = 0xFFFFFFFF; ///< valeur maxi pour conversion d'un entier const Int4 DATA_I4_MIN = 0x80000000; ///< valeur mini pour conversion d'un entier const Int4 DATA_I4_MAX = 0x7FFFFFFF; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI4_RMAX = 4294967295.; ///< valeur mini pour conversion d'un entier const Real8 DATA_I4_RMIN = -2147483648.; ///< valeur mini pour conversion d'un réel const Real8 DATA_I4_RMAX = 2147483647.; ///< valeur maxi pour conversion d'un réel const U_Int4 DATA_UI4_SIGN = (DATA_UI4_MAX-DATA_I4_MAX); ///< Bit de signe 32 bits const U_Int4 DATA_UI4_HI16 = (DATA_UI4_MAX-DATA_UI2_MAX); ///< Masque binaire 16 bits forts sur 32 bits //---------------------------------------------------------------------- // récupéré dans les includes de root #ifndef __MAKECINT__ const U_Int8 DATA_UI8_MAX = kMaxULong64; ///< valeur maxi pour conversion d'un entier const Int8 DATA_I8_MAX = kMaxLong64; ///< valeur mini pour conversion d'un entier const Int8 DATA_I8_MIN = kMinLong64; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI8_RMAX = Double_t(DATA_UI8_MAX); ///< valeur mini pour conversion d'un entier const Real8 DATA_I8_RMAX = Double_t(DATA_I8_MAX); ///< valeur mini pour conversion d'un réel const Real8 DATA_I8_RMIN = Double_t(DATA_I8_MIN); ///< valeur maxi pour conversion d'un réel const U_Int8 DATA_UI8_SIGN = (DATA_UI8_MAX-DATA_I8_MAX); ///< Bit de signe 64 bits const U_Int8 DATA_UI8_HI16 = (DATA_UI8_MAX-DATA_UI4_MAX); ///< Masque binaire 16 bits forts sur 32 bits const U_Int8 DATA_UI8_HI24 = (DATA_UI8_MAX-DATA_UI2_MAX); ///< Masque binaire 24 bits forts sur 32 bits #endif /* NON IMPLEMENTE !!! #define DATA_I8_RMIN -9223372036854775808. #define DATA_I8_RMAX 9223372036854775807. #define DATA_I8_MIN -9223372036854775808 #define DATA_I8_MAX 9223372036854775807 #define DATA_UI8_RMAX 18446744065119617025. #define DATA_UI8_MAX 18446744065119617025 */ //class Param; //====================================================================== /*! \class Data * * Classe générique (abstraite) pour les types de données. * Ce sont les classes dérivées qui peuvent être instanciées: elles * ont un type de données spécifique, qui ne peut pas être modifié ! * \note: * - Les opérateurs d'affectation de valeurs numériques sont virtuels. * - Pour les comparaison, il faut effectuer un cast. * - Les objets dérivés de la classe Data n'ont pas vocation à * être déclarés constant, parce qu'ils peuvent être modifiés * (mot d'état) lorsqu'ils sont copiés ou affectés. * - Les méthodes de cast vers les types numériques sont définis * une fois pour toutes par une méthode patron de la classe de * base Data, par un appel aux méthodes virtuelles GetValue. * - Les méthodes GetValue, SetValue et l'opérateur d'affection * doivent être définis dans les classes dérivées pour l'ensemble * des types de valeurs considérés. * * Les objets de la classe Data (et de ses dérivées) gèrent automatiquement * les changements de type. Dans ce cas, le mot d'état (status) rend * compte des difficultés ou impossibilités de conversions. * */ class Data { //---------------------------------------------------------------------- /*! \object_doc */ GObjectV(Data); //---------------------------------------------------------------------- protected: static u_int len; ///< Longueur d'affichage static u_int prec; ///< Précision d'affichage static char fill; ///< Caractère de remplissage static string undef; ///< Chaîne pour l'écriture de donnée non valide int status; ///< Indicateur de l'état des conversions de types public: //---------------------------------------------------------------------- // CONSTRUCTEUR / AFFECTATION / DESTRUCTEUR //---------------------------------------------------------------------- // Constructeur Data ( ); // Constructeur de recopie Data ( const Data &d ); // Destructeur virtual ~Data ( ); //---------------------------------------------------------------------- public: /*! Méthode qui fixe la longueur d'écriture en format texte. * \param l longueur du format */ static inline void SetLen ( u_int l ) { len = l; if (undef.length() < len) undef = string(len-undef.length(),' ') + undef; } /*! Méthode qui fixe la précision d'écriture en format texte. * \param p précision du format */ static inline void SetPrec ( u_int p ) { prec = p; } /*! Méthode qui fixe le caractère de remplissage en format texte. * \param c caractère de remplissage */ static inline void SetFill ( char c ) { fill = c; } /*! Méthode qui fixe la chaîne de caractères pour l'écriture * d'une donnée non valide. * \param str chaîne à écrire */ static inline void SetFill ( const string &str ) { undef = str; } // retourne une donnée non valide static Data & Bad(); //---------------------------------------------------------------------- /*! Opérateur d'affectation d'une autre donnée. * \param d donnée à affecter */ virtual Data & operator = ( const Data & d ) { return (*this); } /*! Opérateur d'affectation d'une valeur de type entier 16 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int2 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 16 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int2 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 32 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 64 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real8 & d ) = 0; //---------------------------------------------------------------------- /*! Méthode virtuelle pure qui renvoit un identificateur de type * de données. */ virtual u_int TypeId ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant le type * de données. */ virtual string Type ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant la valeur. */ virtual string String ( ) const = 0; /*! Méthode qui renvoit une chaîne indiquant le type * de données et la valeur. */ inline virtual string Text ( ) const { return (string("(") + Type() + ") " + String()); } /*! Méthode qui renvoit une chaîne indiquant le type * de données, la valeur et le mot d'état. */ inline virtual string FullText ( ) const { return (Text() + " status = 0x" + GGetStringHexa((U_Int4) status)); } //---------------------------------------------------------------------- // OPERATEURS DE CAST //---------------------------------------------------------------------- /*! Patron pour opérateur de cast vers différents types de * données. */ template < class T > operator T (void) const { T result; GetValue (result); return (result); } //---------------------------------------------------------------------- /*! Mise à valeur à l'aide d'un entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real4 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real8 &val ) = 0; //---------------------------------------------------------------------- /*! Affectation d'une variable de type entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
64  dataTypeInt2 = (dataType16b), // bits spécifiant le type de donnée dataTypeInt4 = (dataType32b), // bits spécifiant le type de donnée dataTypeInt8 = (dataType64b), // bits spécifiant le type de donnée dataTypeReal4 = (dataTypeReal | dataType32b), // bits spécifiant le type de donnée dataTypeReal8 = (dataTypeReal | dataType64b) // bits spécifiant le type de donnée }; //---------------------------------------------------------------------- #define DATA_TYPE_TXT_UNDEFINED "???" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT2 "U*2" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT4 "U*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT8 "U*8" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT2 "I*2" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT4 "I*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT8 "I*8" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_REAL4 "R*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_REAL8 "R*8" ///< identifiant texte du type de donnée //---------------------------------------------------------------------- const U_Int2 DATA_UI2_MAX = 0xFFFF; ///< valeur maxi pour conversion d'un entier const Int2 DATA_I2_MIN = -32768; ///< valeur mini pour conversion d'un entier const Int2 DATA_I2_MAX = 32767; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI2_RMAX = 65535.; ///< valeur mini pour conversion d'un entier const Real8 DATA_I2_RMIN = -32768.; ///< valeur mini pour conversion d'un réel const Real8 DATA_I2_RMAX = 32767.; ///< valeur maxi pour conversion d'un réel const U_Int2 DATA_UI2_SIGN = (DATA_UI2_MAX-DATA_I2_MAX); ///< Bit de signe 16 bits //---------------------------------------------------------------------- const U_Int4 DATA_UI4_MAX = 0xFFFFFFFF; ///< valeur maxi pour conversion d'un entier const Int4 DATA_I4_MIN = 0x80000000; ///< valeur mini pour conversion d'un entier const Int4 DATA_I4_MAX = 0x7FFFFFFF; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI4_RMAX = 4294967295.; ///< valeur mini pour conversion d'un entier const Real8 DATA_I4_RMIN = -2147483648.; ///< valeur mini pour conversion d'un réel const Real8 DATA_I4_RMAX = 2147483647.; ///< valeur maxi pour conversion d'un réel const U_Int4 DATA_UI4_SIGN = (DATA_UI4_MAX-DATA_I4_MAX); ///< Bit de signe 32 bits const U_Int4 DATA_UI4_HI16 = (DATA_UI4_MAX-DATA_UI2_MAX); ///< Masque binaire 16 bits forts sur 32 bits //---------------------------------------------------------------------- // récupéré dans les includes de root #ifndef __MAKECINT__ const U_Int8 DATA_UI8_MAX = kMaxULong64; ///< valeur maxi pour conversion d'un entier const Int8 DATA_I8_MAX = kMaxLong64; ///< valeur mini pour conversion d'un entier const Int8 DATA_I8_MIN = kMinLong64; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI8_RMAX = Double_t(DATA_UI8_MAX); ///< valeur mini pour conversion d'un entier const Real8 DATA_I8_RMAX = Double_t(DATA_I8_MAX); ///< valeur mini pour conversion d'un réel const Real8 DATA_I8_RMIN = Double_t(DATA_I8_MIN); ///< valeur maxi pour conversion d'un réel const U_Int8 DATA_UI8_SIGN = (DATA_UI8_MAX-DATA_I8_MAX); ///< Bit de signe 64 bits const U_Int8 DATA_UI8_HI16 = (DATA_UI8_MAX-DATA_UI4_MAX); ///< Masque binaire 16 bits forts sur 32 bits const U_Int8 DATA_UI8_HI24 = (DATA_UI8_MAX-DATA_UI2_MAX); ///< Masque binaire 24 bits forts sur 32 bits #endif /* NON IMPLEMENTE !!! #define DATA_I8_RMIN -9223372036854775808. #define DATA_I8_RMAX 9223372036854775807. #define DATA_I8_MIN -9223372036854775808 #define DATA_I8_MAX 9223372036854775807 #define DATA_UI8_RMAX 18446744065119617025. #define DATA_UI8_MAX 18446744065119617025 */ //class Param; //====================================================================== /*! \class Data * * Classe générique (abstraite) pour les types de données. * Ce sont les classes dérivées qui peuvent être instanciées: elles * ont un type de données spécifique, qui ne peut pas être modifié ! * \note: * - Les opérateurs d'affectation de valeurs numériques sont virtuels. * - Pour les comparaison, il faut effectuer un cast. * - Les objets dérivés de la classe Data n'ont pas vocation à * être déclarés constant, parce qu'ils peuvent être modifiés * (mot d'état) lorsqu'ils sont copiés ou affectés. * - Les méthodes de cast vers les types numériques sont définis * une fois pour toutes par une méthode patron de la classe de * base Data, par un appel aux méthodes virtuelles GetValue. * - Les méthodes GetValue, SetValue et l'opérateur d'affection * doivent être définis dans les classes dérivées pour l'ensemble * des types de valeurs considérés. * * Les objets de la classe Data (et de ses dérivées) gèrent automatiquement * les changements de type. Dans ce cas, le mot d'état (status) rend * compte des difficultés ou impossibilités de conversions. * */ class Data { //---------------------------------------------------------------------- /*! \object_doc */ GObjectV(Data); //---------------------------------------------------------------------- protected: static u_int len; ///< Longueur d'affichage static u_int prec; ///< Précision d'affichage static char fill; ///< Caractère de remplissage static string undef; ///< Chaîne pour l'écriture de donnée non valide int status; ///< Indicateur de l'état des conversions de types public: //---------------------------------------------------------------------- // CONSTRUCTEUR / AFFECTATION / DESTRUCTEUR //---------------------------------------------------------------------- // Constructeur Data ( ); // Constructeur de recopie Data ( const Data &d ); // Destructeur virtual ~Data ( ); //---------------------------------------------------------------------- public: /*! Méthode qui fixe la longueur d'écriture en format texte. * \param l longueur du format */ static inline void SetLen ( u_int l ) { len = l; if (undef.length() < len) undef = string(len-undef.length(),' ') + undef; } /*! Méthode qui fixe la précision d'écriture en format texte. * \param p précision du format */ static inline void SetPrec ( u_int p ) { prec = p; } /*! Méthode qui fixe le caractère de remplissage en format texte. * \param c caractère de remplissage */ static inline void SetFill ( char c ) { fill = c; } /*! Méthode qui fixe la chaîne de caractères pour l'écriture * d'une donnée non valide. * \param str chaîne à écrire */ static inline void SetFill ( const string &str ) { undef = str; } // retourne une donnée non valide static Data & Bad(); //---------------------------------------------------------------------- /*! Opérateur d'affectation d'une autre donnée. * \param d donnée à affecter */ virtual Data & operator = ( const Data & d ) { return (*this); } /*! Opérateur d'affectation d'une valeur de type entier 16 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int2 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 16 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int2 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 32 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 64 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real8 & d ) = 0; //---------------------------------------------------------------------- /*! Méthode virtuelle pure qui renvoit un identificateur de type * de données. */ virtual u_int TypeId ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant le type * de données. */ virtual string Type ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant la valeur. */ virtual string String ( ) const = 0; /*! Méthode qui renvoit une chaîne indiquant le type * de données et la valeur. */ inline virtual string Text ( ) const { return (string("(") + Type() + ") " + String()); } /*! Méthode qui renvoit une chaîne indiquant le type * de données, la valeur et le mot d'état. */ inline virtual string FullText ( ) const { return (Text() + " status = 0x" + GGetStringHexa((U_Int4) status)); } //---------------------------------------------------------------------- // OPERATEURS DE CAST //---------------------------------------------------------------------- /*! Patron pour opérateur de cast vers différents types de * données. */ template < class T > operator T (void) const { T result; GetValue (result); return (result); } //---------------------------------------------------------------------- /*! Mise à valeur à l'aide d'un entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real4 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real8 &val ) = 0; //---------------------------------------------------------------------- /*! Affectation d'une variable de type entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
65  dataTypeInt4 = (dataType32b), // bits spécifiant le type de donnée dataTypeInt8 = (dataType64b), // bits spécifiant le type de donnée dataTypeReal4 = (dataTypeReal | dataType32b), // bits spécifiant le type de donnée dataTypeReal8 = (dataTypeReal | dataType64b) // bits spécifiant le type de donnée }; //---------------------------------------------------------------------- #define DATA_TYPE_TXT_UNDEFINED "???" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT2 "U*2" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT4 "U*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT8 "U*8" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT2 "I*2" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT4 "I*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT8 "I*8" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_REAL4 "R*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_REAL8 "R*8" ///< identifiant texte du type de donnée //---------------------------------------------------------------------- const U_Int2 DATA_UI2_MAX = 0xFFFF; ///< valeur maxi pour conversion d'un entier const Int2 DATA_I2_MIN = -32768; ///< valeur mini pour conversion d'un entier const Int2 DATA_I2_MAX = 32767; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI2_RMAX = 65535.; ///< valeur mini pour conversion d'un entier const Real8 DATA_I2_RMIN = -32768.; ///< valeur mini pour conversion d'un réel const Real8 DATA_I2_RMAX = 32767.; ///< valeur maxi pour conversion d'un réel const U_Int2 DATA_UI2_SIGN = (DATA_UI2_MAX-DATA_I2_MAX); ///< Bit de signe 16 bits //---------------------------------------------------------------------- const U_Int4 DATA_UI4_MAX = 0xFFFFFFFF; ///< valeur maxi pour conversion d'un entier const Int4 DATA_I4_MIN = 0x80000000; ///< valeur mini pour conversion d'un entier const Int4 DATA_I4_MAX = 0x7FFFFFFF; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI4_RMAX = 4294967295.; ///< valeur mini pour conversion d'un entier const Real8 DATA_I4_RMIN = -2147483648.; ///< valeur mini pour conversion d'un réel const Real8 DATA_I4_RMAX = 2147483647.; ///< valeur maxi pour conversion d'un réel const U_Int4 DATA_UI4_SIGN = (DATA_UI4_MAX-DATA_I4_MAX); ///< Bit de signe 32 bits const U_Int4 DATA_UI4_HI16 = (DATA_UI4_MAX-DATA_UI2_MAX); ///< Masque binaire 16 bits forts sur 32 bits //---------------------------------------------------------------------- // récupéré dans les includes de root #ifndef __MAKECINT__ const U_Int8 DATA_UI8_MAX = kMaxULong64; ///< valeur maxi pour conversion d'un entier const Int8 DATA_I8_MAX = kMaxLong64; ///< valeur mini pour conversion d'un entier const Int8 DATA_I8_MIN = kMinLong64; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI8_RMAX = Double_t(DATA_UI8_MAX); ///< valeur mini pour conversion d'un entier const Real8 DATA_I8_RMAX = Double_t(DATA_I8_MAX); ///< valeur mini pour conversion d'un réel const Real8 DATA_I8_RMIN = Double_t(DATA_I8_MIN); ///< valeur maxi pour conversion d'un réel const U_Int8 DATA_UI8_SIGN = (DATA_UI8_MAX-DATA_I8_MAX); ///< Bit de signe 64 bits const U_Int8 DATA_UI8_HI16 = (DATA_UI8_MAX-DATA_UI4_MAX); ///< Masque binaire 16 bits forts sur 32 bits const U_Int8 DATA_UI8_HI24 = (DATA_UI8_MAX-DATA_UI2_MAX); ///< Masque binaire 24 bits forts sur 32 bits #endif /* NON IMPLEMENTE !!! #define DATA_I8_RMIN -9223372036854775808. #define DATA_I8_RMAX 9223372036854775807. #define DATA_I8_MIN -9223372036854775808 #define DATA_I8_MAX 9223372036854775807 #define DATA_UI8_RMAX 18446744065119617025. #define DATA_UI8_MAX 18446744065119617025 */ //class Param; //====================================================================== /*! \class Data * * Classe générique (abstraite) pour les types de données. * Ce sont les classes dérivées qui peuvent être instanciées: elles * ont un type de données spécifique, qui ne peut pas être modifié ! * \note: * - Les opérateurs d'affectation de valeurs numériques sont virtuels. * - Pour les comparaison, il faut effectuer un cast. * - Les objets dérivés de la classe Data n'ont pas vocation à * être déclarés constant, parce qu'ils peuvent être modifiés * (mot d'état) lorsqu'ils sont copiés ou affectés. * - Les méthodes de cast vers les types numériques sont définis * une fois pour toutes par une méthode patron de la classe de * base Data, par un appel aux méthodes virtuelles GetValue. * - Les méthodes GetValue, SetValue et l'opérateur d'affection * doivent être définis dans les classes dérivées pour l'ensemble * des types de valeurs considérés. * * Les objets de la classe Data (et de ses dérivées) gèrent automatiquement * les changements de type. Dans ce cas, le mot d'état (status) rend * compte des difficultés ou impossibilités de conversions. * */ class Data { //---------------------------------------------------------------------- /*! \object_doc */ GObjectV(Data); //---------------------------------------------------------------------- protected: static u_int len; ///< Longueur d'affichage static u_int prec; ///< Précision d'affichage static char fill; ///< Caractère de remplissage static string undef; ///< Chaîne pour l'écriture de donnée non valide int status; ///< Indicateur de l'état des conversions de types public: //---------------------------------------------------------------------- // CONSTRUCTEUR / AFFECTATION / DESTRUCTEUR //---------------------------------------------------------------------- // Constructeur Data ( ); // Constructeur de recopie Data ( const Data &d ); // Destructeur virtual ~Data ( ); //---------------------------------------------------------------------- public: /*! Méthode qui fixe la longueur d'écriture en format texte. * \param l longueur du format */ static inline void SetLen ( u_int l ) { len = l; if (undef.length() < len) undef = string(len-undef.length(),' ') + undef; } /*! Méthode qui fixe la précision d'écriture en format texte. * \param p précision du format */ static inline void SetPrec ( u_int p ) { prec = p; } /*! Méthode qui fixe le caractère de remplissage en format texte. * \param c caractère de remplissage */ static inline void SetFill ( char c ) { fill = c; } /*! Méthode qui fixe la chaîne de caractères pour l'écriture * d'une donnée non valide. * \param str chaîne à écrire */ static inline void SetFill ( const string &str ) { undef = str; } // retourne une donnée non valide static Data & Bad(); //---------------------------------------------------------------------- /*! Opérateur d'affectation d'une autre donnée. * \param d donnée à affecter */ virtual Data & operator = ( const Data & d ) { return (*this); } /*! Opérateur d'affectation d'une valeur de type entier 16 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int2 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 16 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int2 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 32 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 64 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real8 & d ) = 0; //---------------------------------------------------------------------- /*! Méthode virtuelle pure qui renvoit un identificateur de type * de données. */ virtual u_int TypeId ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant le type * de données. */ virtual string Type ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant la valeur. */ virtual string String ( ) const = 0; /*! Méthode qui renvoit une chaîne indiquant le type * de données et la valeur. */ inline virtual string Text ( ) const { return (string("(") + Type() + ") " + String()); } /*! Méthode qui renvoit une chaîne indiquant le type * de données, la valeur et le mot d'état. */ inline virtual string FullText ( ) const { return (Text() + " status = 0x" + GGetStringHexa((U_Int4) status)); } //---------------------------------------------------------------------- // OPERATEURS DE CAST //---------------------------------------------------------------------- /*! Patron pour opérateur de cast vers différents types de * données. */ template < class T > operator T (void) const { T result; GetValue (result); return (result); } //---------------------------------------------------------------------- /*! Mise à valeur à l'aide d'un entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real4 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real8 &val ) = 0; //---------------------------------------------------------------------- /*! Affectation d'une variable de type entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
66  dataTypeInt8 = (dataType64b), // bits spécifiant le type de donnée dataTypeReal4 = (dataTypeReal | dataType32b), // bits spécifiant le type de donnée dataTypeReal8 = (dataTypeReal | dataType64b) // bits spécifiant le type de donnée }; //---------------------------------------------------------------------- #define DATA_TYPE_TXT_UNDEFINED "???" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT2 "U*2" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT4 "U*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT8 "U*8" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT2 "I*2" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT4 "I*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT8 "I*8" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_REAL4 "R*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_REAL8 "R*8" ///< identifiant texte du type de donnée //---------------------------------------------------------------------- const U_Int2 DATA_UI2_MAX = 0xFFFF; ///< valeur maxi pour conversion d'un entier const Int2 DATA_I2_MIN = -32768; ///< valeur mini pour conversion d'un entier const Int2 DATA_I2_MAX = 32767; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI2_RMAX = 65535.; ///< valeur mini pour conversion d'un entier const Real8 DATA_I2_RMIN = -32768.; ///< valeur mini pour conversion d'un réel const Real8 DATA_I2_RMAX = 32767.; ///< valeur maxi pour conversion d'un réel const U_Int2 DATA_UI2_SIGN = (DATA_UI2_MAX-DATA_I2_MAX); ///< Bit de signe 16 bits //---------------------------------------------------------------------- const U_Int4 DATA_UI4_MAX = 0xFFFFFFFF; ///< valeur maxi pour conversion d'un entier const Int4 DATA_I4_MIN = 0x80000000; ///< valeur mini pour conversion d'un entier const Int4 DATA_I4_MAX = 0x7FFFFFFF; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI4_RMAX = 4294967295.; ///< valeur mini pour conversion d'un entier const Real8 DATA_I4_RMIN = -2147483648.; ///< valeur mini pour conversion d'un réel const Real8 DATA_I4_RMAX = 2147483647.; ///< valeur maxi pour conversion d'un réel const U_Int4 DATA_UI4_SIGN = (DATA_UI4_MAX-DATA_I4_MAX); ///< Bit de signe 32 bits const U_Int4 DATA_UI4_HI16 = (DATA_UI4_MAX-DATA_UI2_MAX); ///< Masque binaire 16 bits forts sur 32 bits //---------------------------------------------------------------------- // récupéré dans les includes de root #ifndef __MAKECINT__ const U_Int8 DATA_UI8_MAX = kMaxULong64; ///< valeur maxi pour conversion d'un entier const Int8 DATA_I8_MAX = kMaxLong64; ///< valeur mini pour conversion d'un entier const Int8 DATA_I8_MIN = kMinLong64; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI8_RMAX = Double_t(DATA_UI8_MAX); ///< valeur mini pour conversion d'un entier const Real8 DATA_I8_RMAX = Double_t(DATA_I8_MAX); ///< valeur mini pour conversion d'un réel const Real8 DATA_I8_RMIN = Double_t(DATA_I8_MIN); ///< valeur maxi pour conversion d'un réel const U_Int8 DATA_UI8_SIGN = (DATA_UI8_MAX-DATA_I8_MAX); ///< Bit de signe 64 bits const U_Int8 DATA_UI8_HI16 = (DATA_UI8_MAX-DATA_UI4_MAX); ///< Masque binaire 16 bits forts sur 32 bits const U_Int8 DATA_UI8_HI24 = (DATA_UI8_MAX-DATA_UI2_MAX); ///< Masque binaire 24 bits forts sur 32 bits #endif /* NON IMPLEMENTE !!! #define DATA_I8_RMIN -9223372036854775808. #define DATA_I8_RMAX 9223372036854775807. #define DATA_I8_MIN -9223372036854775808 #define DATA_I8_MAX 9223372036854775807 #define DATA_UI8_RMAX 18446744065119617025. #define DATA_UI8_MAX 18446744065119617025 */ //class Param; //====================================================================== /*! \class Data * * Classe générique (abstraite) pour les types de données. * Ce sont les classes dérivées qui peuvent être instanciées: elles * ont un type de données spécifique, qui ne peut pas être modifié ! * \note: * - Les opérateurs d'affectation de valeurs numériques sont virtuels. * - Pour les comparaison, il faut effectuer un cast. * - Les objets dérivés de la classe Data n'ont pas vocation à * être déclarés constant, parce qu'ils peuvent être modifiés * (mot d'état) lorsqu'ils sont copiés ou affectés. * - Les méthodes de cast vers les types numériques sont définis * une fois pour toutes par une méthode patron de la classe de * base Data, par un appel aux méthodes virtuelles GetValue. * - Les méthodes GetValue, SetValue et l'opérateur d'affection * doivent être définis dans les classes dérivées pour l'ensemble * des types de valeurs considérés. * * Les objets de la classe Data (et de ses dérivées) gèrent automatiquement * les changements de type. Dans ce cas, le mot d'état (status) rend * compte des difficultés ou impossibilités de conversions. * */ class Data { //---------------------------------------------------------------------- /*! \object_doc */ GObjectV(Data); //---------------------------------------------------------------------- protected: static u_int len; ///< Longueur d'affichage static u_int prec; ///< Précision d'affichage static char fill; ///< Caractère de remplissage static string undef; ///< Chaîne pour l'écriture de donnée non valide int status; ///< Indicateur de l'état des conversions de types public: //---------------------------------------------------------------------- // CONSTRUCTEUR / AFFECTATION / DESTRUCTEUR //---------------------------------------------------------------------- // Constructeur Data ( ); // Constructeur de recopie Data ( const Data &d ); // Destructeur virtual ~Data ( ); //---------------------------------------------------------------------- public: /*! Méthode qui fixe la longueur d'écriture en format texte. * \param l longueur du format */ static inline void SetLen ( u_int l ) { len = l; if (undef.length() < len) undef = string(len-undef.length(),' ') + undef; } /*! Méthode qui fixe la précision d'écriture en format texte. * \param p précision du format */ static inline void SetPrec ( u_int p ) { prec = p; } /*! Méthode qui fixe le caractère de remplissage en format texte. * \param c caractère de remplissage */ static inline void SetFill ( char c ) { fill = c; } /*! Méthode qui fixe la chaîne de caractères pour l'écriture * d'une donnée non valide. * \param str chaîne à écrire */ static inline void SetFill ( const string &str ) { undef = str; } // retourne une donnée non valide static Data & Bad(); //---------------------------------------------------------------------- /*! Opérateur d'affectation d'une autre donnée. * \param d donnée à affecter */ virtual Data & operator = ( const Data & d ) { return (*this); } /*! Opérateur d'affectation d'une valeur de type entier 16 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int2 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 16 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int2 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 32 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 64 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real8 & d ) = 0; //---------------------------------------------------------------------- /*! Méthode virtuelle pure qui renvoit un identificateur de type * de données. */ virtual u_int TypeId ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant le type * de données. */ virtual string Type ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant la valeur. */ virtual string String ( ) const = 0; /*! Méthode qui renvoit une chaîne indiquant le type * de données et la valeur. */ inline virtual string Text ( ) const { return (string("(") + Type() + ") " + String()); } /*! Méthode qui renvoit une chaîne indiquant le type * de données, la valeur et le mot d'état. */ inline virtual string FullText ( ) const { return (Text() + " status = 0x" + GGetStringHexa((U_Int4) status)); } //---------------------------------------------------------------------- // OPERATEURS DE CAST //---------------------------------------------------------------------- /*! Patron pour opérateur de cast vers différents types de * données. */ template < class T > operator T (void) const { T result; GetValue (result); return (result); } //---------------------------------------------------------------------- /*! Mise à valeur à l'aide d'un entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real4 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real8 &val ) = 0; //---------------------------------------------------------------------- /*! Affectation d'une variable de type entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
67  dataTypeReal4 = (dataTypeReal | dataType32b), // bits spécifiant le type de donnée dataTypeReal8 = (dataTypeReal | dataType64b) // bits spécifiant le type de donnée }; //---------------------------------------------------------------------- #define DATA_TYPE_TXT_UNDEFINED "???" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT2 "U*2" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT4 "U*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT8 "U*8" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT2 "I*2" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT4 "I*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT8 "I*8" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_REAL4 "R*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_REAL8 "R*8" ///< identifiant texte du type de donnée //---------------------------------------------------------------------- const U_Int2 DATA_UI2_MAX = 0xFFFF; ///< valeur maxi pour conversion d'un entier const Int2 DATA_I2_MIN = -32768; ///< valeur mini pour conversion d'un entier const Int2 DATA_I2_MAX = 32767; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI2_RMAX = 65535.; ///< valeur mini pour conversion d'un entier const Real8 DATA_I2_RMIN = -32768.; ///< valeur mini pour conversion d'un réel const Real8 DATA_I2_RMAX = 32767.; ///< valeur maxi pour conversion d'un réel const U_Int2 DATA_UI2_SIGN = (DATA_UI2_MAX-DATA_I2_MAX); ///< Bit de signe 16 bits //---------------------------------------------------------------------- const U_Int4 DATA_UI4_MAX = 0xFFFFFFFF; ///< valeur maxi pour conversion d'un entier const Int4 DATA_I4_MIN = 0x80000000; ///< valeur mini pour conversion d'un entier const Int4 DATA_I4_MAX = 0x7FFFFFFF; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI4_RMAX = 4294967295.; ///< valeur mini pour conversion d'un entier const Real8 DATA_I4_RMIN = -2147483648.; ///< valeur mini pour conversion d'un réel const Real8 DATA_I4_RMAX = 2147483647.; ///< valeur maxi pour conversion d'un réel const U_Int4 DATA_UI4_SIGN = (DATA_UI4_MAX-DATA_I4_MAX); ///< Bit de signe 32 bits const U_Int4 DATA_UI4_HI16 = (DATA_UI4_MAX-DATA_UI2_MAX); ///< Masque binaire 16 bits forts sur 32 bits //---------------------------------------------------------------------- // récupéré dans les includes de root #ifndef __MAKECINT__ const U_Int8 DATA_UI8_MAX = kMaxULong64; ///< valeur maxi pour conversion d'un entier const Int8 DATA_I8_MAX = kMaxLong64; ///< valeur mini pour conversion d'un entier const Int8 DATA_I8_MIN = kMinLong64; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI8_RMAX = Double_t(DATA_UI8_MAX); ///< valeur mini pour conversion d'un entier const Real8 DATA_I8_RMAX = Double_t(DATA_I8_MAX); ///< valeur mini pour conversion d'un réel const Real8 DATA_I8_RMIN = Double_t(DATA_I8_MIN); ///< valeur maxi pour conversion d'un réel const U_Int8 DATA_UI8_SIGN = (DATA_UI8_MAX-DATA_I8_MAX); ///< Bit de signe 64 bits const U_Int8 DATA_UI8_HI16 = (DATA_UI8_MAX-DATA_UI4_MAX); ///< Masque binaire 16 bits forts sur 32 bits const U_Int8 DATA_UI8_HI24 = (DATA_UI8_MAX-DATA_UI2_MAX); ///< Masque binaire 24 bits forts sur 32 bits #endif /* NON IMPLEMENTE !!! #define DATA_I8_RMIN -9223372036854775808. #define DATA_I8_RMAX 9223372036854775807. #define DATA_I8_MIN -9223372036854775808 #define DATA_I8_MAX 9223372036854775807 #define DATA_UI8_RMAX 18446744065119617025. #define DATA_UI8_MAX 18446744065119617025 */ //class Param; //====================================================================== /*! \class Data * * Classe générique (abstraite) pour les types de données. * Ce sont les classes dérivées qui peuvent être instanciées: elles * ont un type de données spécifique, qui ne peut pas être modifié ! * \note: * - Les opérateurs d'affectation de valeurs numériques sont virtuels. * - Pour les comparaison, il faut effectuer un cast. * - Les objets dérivés de la classe Data n'ont pas vocation à * être déclarés constant, parce qu'ils peuvent être modifiés * (mot d'état) lorsqu'ils sont copiés ou affectés. * - Les méthodes de cast vers les types numériques sont définis * une fois pour toutes par une méthode patron de la classe de * base Data, par un appel aux méthodes virtuelles GetValue. * - Les méthodes GetValue, SetValue et l'opérateur d'affection * doivent être définis dans les classes dérivées pour l'ensemble * des types de valeurs considérés. * * Les objets de la classe Data (et de ses dérivées) gèrent automatiquement * les changements de type. Dans ce cas, le mot d'état (status) rend * compte des difficultés ou impossibilités de conversions. * */ class Data { //---------------------------------------------------------------------- /*! \object_doc */ GObjectV(Data); //---------------------------------------------------------------------- protected: static u_int len; ///< Longueur d'affichage static u_int prec; ///< Précision d'affichage static char fill; ///< Caractère de remplissage static string undef; ///< Chaîne pour l'écriture de donnée non valide int status; ///< Indicateur de l'état des conversions de types public: //---------------------------------------------------------------------- // CONSTRUCTEUR / AFFECTATION / DESTRUCTEUR //---------------------------------------------------------------------- // Constructeur Data ( ); // Constructeur de recopie Data ( const Data &d ); // Destructeur virtual ~Data ( ); //---------------------------------------------------------------------- public: /*! Méthode qui fixe la longueur d'écriture en format texte. * \param l longueur du format */ static inline void SetLen ( u_int l ) { len = l; if (undef.length() < len) undef = string(len-undef.length(),' ') + undef; } /*! Méthode qui fixe la précision d'écriture en format texte. * \param p précision du format */ static inline void SetPrec ( u_int p ) { prec = p; } /*! Méthode qui fixe le caractère de remplissage en format texte. * \param c caractère de remplissage */ static inline void SetFill ( char c ) { fill = c; } /*! Méthode qui fixe la chaîne de caractères pour l'écriture * d'une donnée non valide. * \param str chaîne à écrire */ static inline void SetFill ( const string &str ) { undef = str; } // retourne une donnée non valide static Data & Bad(); //---------------------------------------------------------------------- /*! Opérateur d'affectation d'une autre donnée. * \param d donnée à affecter */ virtual Data & operator = ( const Data & d ) { return (*this); } /*! Opérateur d'affectation d'une valeur de type entier 16 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int2 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 16 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int2 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 32 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 64 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real8 & d ) = 0; //---------------------------------------------------------------------- /*! Méthode virtuelle pure qui renvoit un identificateur de type * de données. */ virtual u_int TypeId ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant le type * de données. */ virtual string Type ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant la valeur. */ virtual string String ( ) const = 0; /*! Méthode qui renvoit une chaîne indiquant le type * de données et la valeur. */ inline virtual string Text ( ) const { return (string("(") + Type() + ") " + String()); } /*! Méthode qui renvoit une chaîne indiquant le type * de données, la valeur et le mot d'état. */ inline virtual string FullText ( ) const { return (Text() + " status = 0x" + GGetStringHexa((U_Int4) status)); } //---------------------------------------------------------------------- // OPERATEURS DE CAST //---------------------------------------------------------------------- /*! Patron pour opérateur de cast vers différents types de * données. */ template < class T > operator T (void) const { T result; GetValue (result); return (result); } //---------------------------------------------------------------------- /*! Mise à valeur à l'aide d'un entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real4 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real8 &val ) = 0; //---------------------------------------------------------------------- /*! Affectation d'une variable de type entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
68  dataTypeReal8 = (dataTypeReal | dataType64b) // bits spécifiant le type de donnée}; //---------------------------------------------------------------------- #define DATA_TYPE_TXT_UNDEFINED "???" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT2 "U*2" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT4 "U*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_U_INT8 "U*8" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT2 "I*2" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT4 "I*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_INT8 "I*8" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_REAL4 "R*4" ///< identifiant texte du type de donnée #define DATA_TYPE_TXT_REAL8 "R*8" ///< identifiant texte du type de donnée //---------------------------------------------------------------------- const U_Int2 DATA_UI2_MAX = 0xFFFF; ///< valeur maxi pour conversion d'un entier const Int2 DATA_I2_MIN = -32768; ///< valeur mini pour conversion d'un entier const Int2 DATA_I2_MAX = 32767; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI2_RMAX = 65535.; ///< valeur mini pour conversion d'un entier const Real8 DATA_I2_RMIN = -32768.; ///< valeur mini pour conversion d'un réel const Real8 DATA_I2_RMAX = 32767.; ///< valeur maxi pour conversion d'un réel const U_Int2 DATA_UI2_SIGN = (DATA_UI2_MAX-DATA_I2_MAX); ///< Bit de signe 16 bits //---------------------------------------------------------------------- const U_Int4 DATA_UI4_MAX = 0xFFFFFFFF; ///< valeur maxi pour conversion d'un entier const Int4 DATA_I4_MIN = 0x80000000; ///< valeur mini pour conversion d'un entier const Int4 DATA_I4_MAX = 0x7FFFFFFF; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI4_RMAX = 4294967295.; ///< valeur mini pour conversion d'un entier const Real8 DATA_I4_RMIN = -2147483648.; ///< valeur mini pour conversion d'un réel const Real8 DATA_I4_RMAX = 2147483647.; ///< valeur maxi pour conversion d'un réel const U_Int4 DATA_UI4_SIGN = (DATA_UI4_MAX-DATA_I4_MAX); ///< Bit de signe 32 bits const U_Int4 DATA_UI4_HI16 = (DATA_UI4_MAX-DATA_UI2_MAX); ///< Masque binaire 16 bits forts sur 32 bits //---------------------------------------------------------------------- // récupéré dans les includes de root #ifndef __MAKECINT__ const U_Int8 DATA_UI8_MAX = kMaxULong64; ///< valeur maxi pour conversion d'un entier const Int8 DATA_I8_MAX = kMaxLong64; ///< valeur mini pour conversion d'un entier const Int8 DATA_I8_MIN = kMinLong64; ///< valeur maxi pour conversion d'un entier const Real8 DATA_UI8_RMAX = Double_t(DATA_UI8_MAX); ///< valeur mini pour conversion d'un entier const Real8 DATA_I8_RMAX = Double_t(DATA_I8_MAX); ///< valeur mini pour conversion d'un réel const Real8 DATA_I8_RMIN = Double_t(DATA_I8_MIN); ///< valeur maxi pour conversion d'un réel const U_Int8 DATA_UI8_SIGN = (DATA_UI8_MAX-DATA_I8_MAX); ///< Bit de signe 64 bits const U_Int8 DATA_UI8_HI16 = (DATA_UI8_MAX-DATA_UI4_MAX); ///< Masque binaire 16 bits forts sur 32 bits const U_Int8 DATA_UI8_HI24 = (DATA_UI8_MAX-DATA_UI2_MAX); ///< Masque binaire 24 bits forts sur 32 bits #endif /* NON IMPLEMENTE !!! #define DATA_I8_RMIN -9223372036854775808. #define DATA_I8_RMAX 9223372036854775807. #define DATA_I8_MIN -9223372036854775808 #define DATA_I8_MAX 9223372036854775807 #define DATA_UI8_RMAX 18446744065119617025. #define DATA_UI8_MAX 18446744065119617025 */ //class Param; //====================================================================== /*! \class Data * * Classe générique (abstraite) pour les types de données. * Ce sont les classes dérivées qui peuvent être instanciées: elles * ont un type de données spécifique, qui ne peut pas être modifié ! * \note: * - Les opérateurs d'affectation de valeurs numériques sont virtuels. * - Pour les comparaison, il faut effectuer un cast. * - Les objets dérivés de la classe Data n'ont pas vocation à * être déclarés constant, parce qu'ils peuvent être modifiés * (mot d'état) lorsqu'ils sont copiés ou affectés. * - Les méthodes de cast vers les types numériques sont définis * une fois pour toutes par une méthode patron de la classe de * base Data, par un appel aux méthodes virtuelles GetValue. * - Les méthodes GetValue, SetValue et l'opérateur d'affection * doivent être définis dans les classes dérivées pour l'ensemble * des types de valeurs considérés. * * Les objets de la classe Data (et de ses dérivées) gèrent automatiquement * les changements de type. Dans ce cas, le mot d'état (status) rend * compte des difficultés ou impossibilités de conversions. * */ class Data { //---------------------------------------------------------------------- /*! \object_doc */ GObjectV(Data); //---------------------------------------------------------------------- protected: static u_int len; ///< Longueur d'affichage static u_int prec; ///< Précision d'affichage static char fill; ///< Caractère de remplissage static string undef; ///< Chaîne pour l'écriture de donnée non valide int status; ///< Indicateur de l'état des conversions de types public: //---------------------------------------------------------------------- // CONSTRUCTEUR / AFFECTATION / DESTRUCTEUR //---------------------------------------------------------------------- // Constructeur Data ( ); // Constructeur de recopie Data ( const Data &d ); // Destructeur virtual ~Data ( ); //---------------------------------------------------------------------- public: /*! Méthode qui fixe la longueur d'écriture en format texte. * \param l longueur du format */ static inline void SetLen ( u_int l ) { len = l; if (undef.length() < len) undef = string(len-undef.length(),' ') + undef; } /*! Méthode qui fixe la précision d'écriture en format texte. * \param p précision du format */ static inline void SetPrec ( u_int p ) { prec = p; } /*! Méthode qui fixe le caractère de remplissage en format texte. * \param c caractère de remplissage */ static inline void SetFill ( char c ) { fill = c; } /*! Méthode qui fixe la chaîne de caractères pour l'écriture * d'une donnée non valide. * \param str chaîne à écrire */ static inline void SetFill ( const string &str ) { undef = str; } // retourne une donnée non valide static Data & Bad(); //---------------------------------------------------------------------- /*! Opérateur d'affectation d'une autre donnée. * \param d donnée à affecter */ virtual Data & operator = ( const Data & d ) { return (*this); } /*! Opérateur d'affectation d'une valeur de type entier 16 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int2 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 16 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int2 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 32 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 64 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real8 & d ) = 0; //---------------------------------------------------------------------- /*! Méthode virtuelle pure qui renvoit un identificateur de type * de données. */ virtual u_int TypeId ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant le type * de données. */ virtual string Type ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant la valeur. */ virtual string String ( ) const = 0; /*! Méthode qui renvoit une chaîne indiquant le type * de données et la valeur. */ inline virtual string Text ( ) const { return (string("(") + Type() + ") " + String()); } /*! Méthode qui renvoit une chaîne indiquant le type * de données, la valeur et le mot d'état. */ inline virtual string FullText ( ) const { return (Text() + " status = 0x" + GGetStringHexa((U_Int4) status)); } //---------------------------------------------------------------------- // OPERATEURS DE CAST //---------------------------------------------------------------------- /*! Patron pour opérateur de cast vers différents types de * données. */ template < class T > operator T (void) const { T result; GetValue (result); return (result); } //---------------------------------------------------------------------- /*! Mise à valeur à l'aide d'un entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real4 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real8 &val ) = 0; //---------------------------------------------------------------------- /*! Affectation d'une variable de type entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
69 };
70 
71 //----------------------------------------------------------------------
72 #define DATA_TYPE_TXT_UNDEFINED "???" ///< identifiant texte du type de donnée
73 #define DATA_TYPE_TXT_U_INT2 "U*2" ///< identifiant texte du type de donnée5„
74 #define DATA_TYPE_TXT_U_INT4 "U*4" ///< identifiant texte du type de donnée5„
75 #define DATA_TYPE_TXT_U_INT8 "U*8" ///< identifiant texte du type de donnée5„
76 #define DATA_TYPE_TXT_INT2 "I*2" ///< identifiant texte du type de donnée5„
77 #define DATA_TYPE_TXT_INT4 "I*4" ///< identifiant texte du type de donnée5„
78 #define DATA_TYPE_TXT_INT8 "I*8" ///< identifiant texte du type de donnée5„
79 #define DATA_TYPE_TXT_REAL4 "R*4" ///< identifiant texte du type de donnée5„
80 #define DATA_TYPE_TXT_REAL8 "R*8" ///< identifiant texte du type de donnée5„
81 
82 //----------------------------------------------------------------------
83 const U_Int2 DATA_UI2_MAX = 0xFFFF; ///< valeur maxi pour conversion d'un entier
84 const Int2 DATA_I2_MIN = -32768; ///< valeur mini pour conversion d'un entier
85 const Int2 DATA_I2_MAX = 32767; ///< valeur maxi pour conversion d'un entier
86 const Real8 DATA_UI2_RMAX = 65535.; ///< valeur mini pour conversion d'un entier
87 const Real8 DATA_I2_RMIN = -32768.; ///< valeur mini pour conversion d'un réel
88 const Real8 DATA_I2_RMAX = 32767.; ///< valeur maxi pour conversion d'un réel
89 
90 const U_Int2 DATA_UI2_SIGN = (DATA_UI2_MAX-DATA_I2_MAX); ///< Bit de signe 16 bits
91 
92 //----------------------------------------------------------------------
93 const U_Int4 DATA_UI4_MAX = 0xFFFFFFFF; ///< valeur maxi pour conversion d'un entier
94 const Int4 DATA_I4_MIN = 0x80000000; ///< valeur mini pour conversion d'un entier
95 const Int4 DATA_I4_MAX = 0x7FFFFFFF; ///< valeur maxi pour conversion d'un entier
96 const Real8 DATA_UI4_RMAX = 4294967295.; ///< valeur mini pour conversion d'un entier
97 const Real8 DATA_I4_RMIN = -2147483648.; ///< valeur mini pour conversion d'un réel
98 const Real8 DATA_I4_RMAX = 2147483647.; ///< valeur maxi pour conversion d'un réel
99 
100 const U_Int4 DATA_UI4_SIGN = (DATA_UI4_MAX-DATA_I4_MAX); ///< Bit de signe 32 bits
101 const U_Int4 DATA_UI4_HI16 = (DATA_UI4_MAX-DATA_UI2_MAX); ///< Masque binaire 16 bits forts sur 32 bits
102 
103 //----------------------------------------------------------------------
104 // récupéré dans les includes de root
105 #ifndef __MAKECINT__
106 const U_Int8 DATA_UI8_MAX = kMaxULong64; ///< valeur maxi pour conversion d'un entier
107 const Int8 DATA_I8_MAX = kMaxLong64; ///< valeur mini pour conversion d'un entier
108 const Int8 DATA_I8_MIN = kMinLong64; ///< valeur maxi pour conversion d'un entier
109 const Real8 DATA_UI8_RMAX = Double_t(DATA_UI8_MAX); ///< valeur mini pour conversion d'un entier
110 const Real8 DATA_I8_RMAX = Double_t(DATA_I8_MAX); ///< valeur mini pour conversion d'un réel
111 const Real8 DATA_I8_RMIN = Double_t(DATA_I8_MIN); ///< valeur maxi pour conversion d'un réel
112 
113 const U_Int8 DATA_UI8_SIGN = (DATA_UI8_MAX-DATA_I8_MAX); ///< Bit de signe 64 bits
114 const U_Int8 DATA_UI8_HI16 = (DATA_UI8_MAX-DATA_UI4_MAX); ///< Masque binaire 16 bits forts sur 32 bits
115 const U_Int8 DATA_UI8_HI24 = (DATA_UI8_MAX-DATA_UI2_MAX); ///< Masque binaire 24 bits forts sur 32 bits
116 #endif
117 
118 /* NON IMPLEMENTE !!!
119 #define DATA_I8_RMIN -9223372036854775808.
120 #define DATA_I8_RMAX 9223372036854775807.
121 #define DATA_I8_MIN -9223372036854775808
122 #define DATA_I8_MAX 9223372036854775807
123 #define DATA_UI8_RMAX 18446744065119617025.
124 #define DATA_UI8_MAX 18446744065119617025
125 */
126 
127 //class Param;
128 
129 //======================================================================
130 /*! \class Data
131  *
132  * Classe générique (abstraite) pour les types de données.
133  * Ce sont les classes dérivées qui peuvent être instanciées: elles
134  * ont un type de données spécifique, qui ne peut pas être modifié !
135  * \note:
136  * - Les opérateurs d'affectation de valeurs numériques sont virtuels.
137  * - Pour les comparaison, il faut effectuer un cast.
138  * - Les objets dérivés de la classe Data n'ont pas vocation à * être déclarés constant, parce qu'ils peuvent être modifiés * (mot d'état) lorsqu'ils sont copiés ou affectés. * - Les méthodes de cast vers les types numériques sont définis * une fois pour toutes par une méthode patron de la classe de * base Data, par un appel aux méthodes virtuelles GetValue. * - Les méthodes GetValue, SetValue et l'opérateur d'affection * doivent être définis dans les classes dérivées pour l'ensemble * des types de valeurs considérés. * * Les objets de la classe Data (et de ses dérivées) gèrent automatiquement * les changements de type. Dans ce cas, le mot d'état (status) rend * compte des difficultés ou impossibilités de conversions. * */ class Data { //---------------------------------------------------------------------- /*! \object_doc */ GObjectV(Data); //---------------------------------------------------------------------- protected: static u_int len; ///< Longueur d'affichage static u_int prec; ///< Précision d'affichage static char fill; ///< Caractère de remplissage static string undef; ///< Chaîne pour l'écriture de donnée non valide int status; ///< Indicateur de l'état des conversions de types public: //---------------------------------------------------------------------- // CONSTRUCTEUR / AFFECTATION / DESTRUCTEUR //---------------------------------------------------------------------- // Constructeur Data ( ); // Constructeur de recopie Data ( const Data &d ); // Destructeur virtual ~Data ( ); //---------------------------------------------------------------------- public: /*! Méthode qui fixe la longueur d'écriture en format texte. * \param l longueur du format */ static inline void SetLen ( u_int l ) { len = l; if (undef.length() < len) undef = string(len-undef.length(),' ') + undef; } /*! Méthode qui fixe la précision d'écriture en format texte. * \param p précision du format */ static inline void SetPrec ( u_int p ) { prec = p; } /*! Méthode qui fixe le caractère de remplissage en format texte. * \param c caractère de remplissage */ static inline void SetFill ( char c ) { fill = c; } /*! Méthode qui fixe la chaîne de caractères pour l'écriture * d'une donnée non valide. * \param str chaîne à écrire */ static inline void SetFill ( const string &str ) { undef = str; } // retourne une donnée non valide static Data & Bad(); //---------------------------------------------------------------------- /*! Opérateur d'affectation d'une autre donnée. * \param d donnée à affecter */ virtual Data & operator = ( const Data & d ) { return (*this); } /*! Opérateur d'affectation d'une valeur de type entier 16 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int2 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 16 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int2 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 32 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 64 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real8 & d ) = 0; //---------------------------------------------------------------------- /*! Méthode virtuelle pure qui renvoit un identificateur de type * de données. */ virtual u_int TypeId ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant le type * de données. */ virtual string Type ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant la valeur. */ virtual string String ( ) const = 0; /*! Méthode qui renvoit une chaîne indiquant le type * de données et la valeur. */ inline virtual string Text ( ) const { return (string("(") + Type() + ") " + String()); } /*! Méthode qui renvoit une chaîne indiquant le type * de données, la valeur et le mot d'état. */ inline virtual string FullText ( ) const { return (Text() + " status = 0x" + GGetStringHexa((U_Int4) status)); } //---------------------------------------------------------------------- // OPERATEURS DE CAST //---------------------------------------------------------------------- /*! Patron pour opérateur de cast vers différents types de * données. */ template < class T > operator T (void) const { T result; GetValue (result); return (result); } //---------------------------------------------------------------------- /*! Mise à valeur à l'aide d'un entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real4 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real8 &val ) = 0; //---------------------------------------------------------------------- /*! Affectation d'une variable de type entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
139  * être déclarés constant, parce qu'ils peuvent être modifiés * (mot d'état) lorsqu'ils sont copiés ou affectés. * - Les méthodes de cast vers les types numériques sont définis * une fois pour toutes par une méthode patron de la classe de * base Data, par un appel aux méthodes virtuelles GetValue. * - Les méthodes GetValue, SetValue et l'opérateur d'affection * doivent être définis dans les classes dérivées pour l'ensemble * des types de valeurs considérés. * * Les objets de la classe Data (et de ses dérivées) gèrent automatiquement * les changements de type. Dans ce cas, le mot d'état (status) rend * compte des difficultés ou impossibilités de conversions. * */ class Data { //---------------------------------------------------------------------- /*! \object_doc */ GObjectV(Data); //---------------------------------------------------------------------- protected: static u_int len; ///< Longueur d'affichage static u_int prec; ///< Précision d'affichage static char fill; ///< Caractère de remplissage static string undef; ///< Chaîne pour l'écriture de donnée non valide int status; ///< Indicateur de l'état des conversions de types public: //---------------------------------------------------------------------- // CONSTRUCTEUR / AFFECTATION / DESTRUCTEUR //---------------------------------------------------------------------- // Constructeur Data ( ); // Constructeur de recopie Data ( const Data &d ); // Destructeur virtual ~Data ( ); //---------------------------------------------------------------------- public: /*! Méthode qui fixe la longueur d'écriture en format texte. * \param l longueur du format */ static inline void SetLen ( u_int l ) { len = l; if (undef.length() < len) undef = string(len-undef.length(),' ') + undef; } /*! Méthode qui fixe la précision d'écriture en format texte. * \param p précision du format */ static inline void SetPrec ( u_int p ) { prec = p; } /*! Méthode qui fixe le caractère de remplissage en format texte. * \param c caractère de remplissage */ static inline void SetFill ( char c ) { fill = c; } /*! Méthode qui fixe la chaîne de caractères pour l'écriture * d'une donnée non valide. * \param str chaîne à écrire */ static inline void SetFill ( const string &str ) { undef = str; } // retourne une donnée non valide static Data & Bad(); //---------------------------------------------------------------------- /*! Opérateur d'affectation d'une autre donnée. * \param d donnée à affecter */ virtual Data & operator = ( const Data & d ) { return (*this); } /*! Opérateur d'affectation d'une valeur de type entier 16 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int2 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 16 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int2 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 32 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 64 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real8 & d ) = 0; //---------------------------------------------------------------------- /*! Méthode virtuelle pure qui renvoit un identificateur de type * de données. */ virtual u_int TypeId ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant le type * de données. */ virtual string Type ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant la valeur. */ virtual string String ( ) const = 0; /*! Méthode qui renvoit une chaîne indiquant le type * de données et la valeur. */ inline virtual string Text ( ) const { return (string("(") + Type() + ") " + String()); } /*! Méthode qui renvoit une chaîne indiquant le type * de données, la valeur et le mot d'état. */ inline virtual string FullText ( ) const { return (Text() + " status = 0x" + GGetStringHexa((U_Int4) status)); } //---------------------------------------------------------------------- // OPERATEURS DE CAST //---------------------------------------------------------------------- /*! Patron pour opérateur de cast vers différents types de * données. */ template < class T > operator T (void) const { T result; GetValue (result); return (result); } //---------------------------------------------------------------------- /*! Mise à valeur à l'aide d'un entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real4 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real8 &val ) = 0; //---------------------------------------------------------------------- /*! Affectation d'une variable de type entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
140  * (mot d'état) lorsqu'ils sont copiés ou affectés.
141  * - Les méthodes de cast vers les types numériques sont définis
142  * une fois pour toutes par une méthode patron de la classe de
143  * base Data, par un appel aux méthodes virtuelles GetValue.
144  * - Les méthodes GetValue, SetValue et l'opérateur d'affection
145  * doivent être définis dans les classes dérivées pour l'ensemble
146  * des types de valeurs considérés.
147  *
148  * Les objets de la classe Data (et de ses dérivées) gèrent automatiquement
149  * les changements de type. Dans ce cas, le mot d'état (status) rend
150  * compte des difficultés ou impossibilités de conversions.
151  *
152  */
153 class Data
154 {
155 //----------------------------------------------------------------------
156  /*! \object_doc */
157  GObjectV(Data);
158 //----------------------------------------------------------------------
159 
160  protected:
161 
162  static u_int len; ///< Longueur d'affichage
163  static u_int prec; ///< Précision d'affichage
164  static char fill; ///< Caractère de remplissage
165  static string undef; ///< Chaîne pour l'écriture de donnée non valide
166 
167  int status; ///< Indicateur de l'état des conversions de types
168 
169  public:
170 
171 //----------------------------------------------------------------------
172 // CONSTRUCTEUR / AFFECTATION / DESTRUCTEUR
173 //----------------------------------------------------------------------
174 
175  // Constructeur
176  Data ( );
177 
178  // Constructeur de recopie
179  Data ( const Data &d );
180 
181  // Destructeur
182  virtual ~Data ( );
183 
184 //----------------------------------------------------------------------
185 
186  public:
187 
188  /*! Méthode qui fixe la longueur d'écriture en format texte.
189  * \param l longueur du format
190  */
191  static inline void SetLen ( u_int l )
192  {
193  len = l;
194  if (undef.length() < len)
195  undef = string(len-undef.length(),' ') + undef;
196  }
197 
198  /*! Méthode qui fixe la précision d'écriture en format texte.
199  * \param p précision du format
200  */
201  static inline void SetPrec ( u_int p ) { prec = p; }
202 
203  /*! Méthode qui fixe le caractère de remplissage en format texte.
204  * \param c caractère de remplissage
205  */
206  static inline void SetFill ( char c ) { fill = c; }
207 
208  /*! Méthode qui fixe la chaîne de caractères pour l'écriture
209  * d'une donnée non valide.
210  * \param str chaîne à écrire
211  */
212  static inline void SetFill ( const string &str ) { undef = str; }
213 
214  // retourne une donnée non valide
215  static Data & Bad();
216 
217 //----------------------------------------------------------------------
218 
219  /*! Opérateur d'affectation d'une autre donnée.
220  * \param d donnée à affecter
221  */
222  virtual Data & operator = ( const Data & d ) { return (*this); }
223 
224  /*! Opérateur d'affectation d'une valeur de type entier 16 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int2 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 16 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int2 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 32 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 64 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real8 & d ) = 0; //---------------------------------------------------------------------- /*! Méthode virtuelle pure qui renvoit un identificateur de type * de données. */ virtual u_int TypeId ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant le type * de données. */ virtual string Type ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant la valeur. */ virtual string String ( ) const = 0; /*! Méthode qui renvoit une chaîne indiquant le type * de données et la valeur. */ inline virtual string Text ( ) const { return (string("(") + Type() + ") " + String()); } /*! Méthode qui renvoit une chaîne indiquant le type * de données, la valeur et le mot d'état. */ inline virtual string FullText ( ) const { return (Text() + " status = 0x" + GGetStringHexa((U_Int4) status)); } //---------------------------------------------------------------------- // OPERATEURS DE CAST //---------------------------------------------------------------------- /*! Patron pour opérateur de cast vers différents types de * données. */ template < class T > operator T (void) const { T result; GetValue (result); return (result); } //---------------------------------------------------------------------- /*! Mise à valeur à l'aide d'un entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real4 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real8 &val ) = 0; //---------------------------------------------------------------------- /*! Affectation d'une variable de type entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
225  * \param d donnée à affecter
226  */
227  virtual Data & operator = ( const Int2 & d ) = 0;
228 
229  /*! Opérateur d'affectation d'une valeur de type entier 16 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int2 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 32 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 64 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real8 & d ) = 0; //---------------------------------------------------------------------- /*! Méthode virtuelle pure qui renvoit un identificateur de type * de données. */ virtual u_int TypeId ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant le type * de données. */ virtual string Type ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant la valeur. */ virtual string String ( ) const = 0; /*! Méthode qui renvoit une chaîne indiquant le type * de données et la valeur. */ inline virtual string Text ( ) const { return (string("(") + Type() + ") " + String()); } /*! Méthode qui renvoit une chaîne indiquant le type * de données, la valeur et le mot d'état. */ inline virtual string FullText ( ) const { return (Text() + " status = 0x" + GGetStringHexa((U_Int4) status)); } //---------------------------------------------------------------------- // OPERATEURS DE CAST //---------------------------------------------------------------------- /*! Patron pour opérateur de cast vers différents types de * données. */ template < class T > operator T (void) const { T result; GetValue (result); return (result); } //---------------------------------------------------------------------- /*! Mise à valeur à l'aide d'un entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real4 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real8 &val ) = 0; //---------------------------------------------------------------------- /*! Affectation d'une variable de type entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
230  * \param d donnée à affecter
231  */
232  virtual Data & operator = ( const U_Int2 & d ) = 0;
233 
234  /*! Opérateur d'affectation d'une valeur de type entier 32 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 32 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 32 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 64 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real8 & d ) = 0; //---------------------------------------------------------------------- /*! Méthode virtuelle pure qui renvoit un identificateur de type * de données. */ virtual u_int TypeId ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant le type * de données. */ virtual string Type ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant la valeur. */ virtual string String ( ) const = 0; /*! Méthode qui renvoit une chaîne indiquant le type * de données et la valeur. */ inline virtual string Text ( ) const { return (string("(") + Type() + ") " + String()); } /*! Méthode qui renvoit une chaîne indiquant le type * de données, la valeur et le mot d'état. */ inline virtual string FullText ( ) const { return (Text() + " status = 0x" + GGetStringHexa((U_Int4) status)); } //---------------------------------------------------------------------- // OPERATEURS DE CAST //---------------------------------------------------------------------- /*! Patron pour opérateur de cast vers différents types de * données. */ template < class T > operator T (void) const { T result; GetValue (result); return (result); } //---------------------------------------------------------------------- /*! Mise à valeur à l'aide d'un entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real4 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real8 &val ) = 0; //---------------------------------------------------------------------- /*! Affectation d'une variable de type entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
235  * \param d donnée à affecter
236  */
237  virtual Data & operator = ( const Int4 & d ) = 0;
238 
239  /*! Opérateur d'affectation d'une valeur de type entier 32 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 32 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 64 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real8 & d ) = 0; //---------------------------------------------------------------------- /*! Méthode virtuelle pure qui renvoit un identificateur de type * de données. */ virtual u_int TypeId ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant le type * de données. */ virtual string Type ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant la valeur. */ virtual string String ( ) const = 0; /*! Méthode qui renvoit une chaîne indiquant le type * de données et la valeur. */ inline virtual string Text ( ) const { return (string("(") + Type() + ") " + String()); } /*! Méthode qui renvoit une chaîne indiquant le type * de données, la valeur et le mot d'état. */ inline virtual string FullText ( ) const { return (Text() + " status = 0x" + GGetStringHexa((U_Int4) status)); } //---------------------------------------------------------------------- // OPERATEURS DE CAST //---------------------------------------------------------------------- /*! Patron pour opérateur de cast vers différents types de * données. */ template < class T > operator T (void) const { T result; GetValue (result); return (result); } //---------------------------------------------------------------------- /*! Mise à valeur à l'aide d'un entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real4 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real8 &val ) = 0; //---------------------------------------------------------------------- /*! Affectation d'une variable de type entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
240  * \param d donnée à affecter
241  */
242  virtual Data & operator = ( const U_Int4 & d ) = 0;
243 
244  /*! Opérateur d'affectation d'une valeur de type entier 64 bits signé. * \param d donnée à affecter */ virtual Data & operator = ( const Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type entier 64 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 32 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 64 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real8 & d ) = 0; //---------------------------------------------------------------------- /*! Méthode virtuelle pure qui renvoit un identificateur de type * de données. */ virtual u_int TypeId ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant le type * de données. */ virtual string Type ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant la valeur. */ virtual string String ( ) const = 0; /*! Méthode qui renvoit une chaîne indiquant le type * de données et la valeur. */ inline virtual string Text ( ) const { return (string("(") + Type() + ") " + String()); } /*! Méthode qui renvoit une chaîne indiquant le type * de données, la valeur et le mot d'état. */ inline virtual string FullText ( ) const { return (Text() + " status = 0x" + GGetStringHexa((U_Int4) status)); } //---------------------------------------------------------------------- // OPERATEURS DE CAST //---------------------------------------------------------------------- /*! Patron pour opérateur de cast vers différents types de * données. */ template < class T > operator T (void) const { T result; GetValue (result); return (result); } //---------------------------------------------------------------------- /*! Mise à valeur à l'aide d'un entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real4 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real8 &val ) = 0; //---------------------------------------------------------------------- /*! Affectation d'une variable de type entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
245  * \param d donnée à affecter
246  */
247  virtual Data & operator = ( const Int8 & d ) = 0;
248 
249  /*! Opérateur d'affectation d'une valeur de type entier 64 bits non signé. * \param d donnée à affecter */ virtual Data & operator = ( const U_Int8 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 32 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real4 & d ) = 0; /*! Opérateur d'affectation d'une valeur de type réel 64 bits. * \param d donnée à affecter */ virtual Data & operator = ( const Real8 & d ) = 0; //---------------------------------------------------------------------- /*! Méthode virtuelle pure qui renvoit un identificateur de type * de données. */ virtual u_int TypeId ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant le type * de données. */ virtual string Type ( ) const = 0; /*! Méthode virtuelle pure qui renvoit une chaîne indiquant la valeur. */ virtual string String ( ) const = 0; /*! Méthode qui renvoit une chaîne indiquant le type * de données et la valeur. */ inline virtual string Text ( ) const { return (string("(") + Type() + ") " + String()); } /*! Méthode qui renvoit une chaîne indiquant le type * de données, la valeur et le mot d'état. */ inline virtual string FullText ( ) const { return (Text() + " status = 0x" + GGetStringHexa((U_Int4) status)); } //---------------------------------------------------------------------- // OPERATEURS DE CAST //---------------------------------------------------------------------- /*! Patron pour opérateur de cast vers différents types de * données. */ template < class T > operator T (void) const { T result; GetValue (result); return (result); } //---------------------------------------------------------------------- /*! Mise à valeur à l'aide d'un entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real4 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real8 &val ) = 0; //---------------------------------------------------------------------- /*! Affectation d'une variable de type entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
250  * \param d donnée à affecter
251  */
252  virtual Data & operator = ( const U_Int8 & d ) = 0;
253 
254  /*! Opérateur d'affectation d'une valeur de type réel 32 bits.
255  * \param d donnée à affecter
256  */
257  virtual Data & operator = ( const Real4 & d ) = 0;
258 
259  /*! Opérateur d'affectation d'une valeur de type réel 64 bits.
260  * \param d donnée à affecter
261  */
262  virtual Data & operator = ( const Real8 & d ) = 0;
263 
264 
265 //----------------------------------------------------------------------
266 
267  /*! Méthode virtuelle pure qui renvoit un identificateur de type
268  * de données.
269  */
270  virtual u_int TypeId ( ) const = 0;
271 
272  /*! Méthode virtuelle pure qui renvoit une chaîne indiquant le type
273  * de données.
274  */
275  virtual string Type ( ) const = 0;
276 
277  /*! Méthode virtuelle pure qui renvoit une chaîne indiquant la valeur.
278  */
279  virtual string String ( ) const = 0;
280 
281  /*! Méthode qui renvoit une chaîne indiquant le type
282  * de données et la valeur.
283  */
284  inline virtual string Text ( ) const
285  {
286  return (string("(") + Type() + ") " + String());
287  }
288 
289  /*! Méthode qui renvoit une chaîne indiquant le type
290  * de données, la valeur et le mot d'état.
291  */
292  inline virtual string FullText ( ) const
293  {
294  return (Text() + " status = 0x" + GGetStringHexa((U_Int4) status));
295  }
296 
297 //----------------------------------------------------------------------
298 // OPERATEURS DE CAST
299 //----------------------------------------------------------------------
300 
301  /*! Patron pour opérateur de cast vers différents types de
302  * données.
303  */
304  template < class T > operator T (void) const
305  { T result; GetValue (result); return (result); }
306 
307 //----------------------------------------------------------------------
308  /*! Mise à valeur à l'aide d'un entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real4 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real8 &val ) = 0; //---------------------------------------------------------------------- /*! Affectation d'une variable de type entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
309  * La valeur en retour est le statut de conversion.
310  */
311  virtual int SetValue ( const U_Int2 &val ) = 0;
312 
313  /*! Mise à valeur à l'aide d'un entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real4 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real8 &val ) = 0; //---------------------------------------------------------------------- /*! Affectation d'une variable de type entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
314  * La valeur en retour est le statut de conversion.
315  */
316  virtual int SetValue ( const U_Int4 &val ) = 0;
317 
318  /*! Mise à valeur à l'aide d'un entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const U_Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real4 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real8 &val ) = 0; //---------------------------------------------------------------------- /*! Affectation d'une variable de type entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
319  * La valeur en retour est le statut de conversion.
320  */
321  virtual int SetValue ( const U_Int8 &val ) = 0;
322 
323  /*! Mise à valeur à l'aide d'un entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int2 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real4 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real8 &val ) = 0; //---------------------------------------------------------------------- /*! Affectation d'une variable de type entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
324  * La valeur en retour est le statut de conversion.
325  */
326  virtual int SetValue ( const Int2 &val ) = 0;
327 
328  /*! Mise à valeur à l'aide d'un entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int4 &val ) = 0; /*! Mise à valeur à l'aide d'un entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real4 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real8 &val ) = 0; //---------------------------------------------------------------------- /*! Affectation d'une variable de type entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
329  * La valeur en retour est le statut de conversion.
330  */
331  virtual int SetValue ( const Int4 &val ) = 0;
332 
333  /*! Mise à valeur à l'aide d'un entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Int8 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real4 &val ) = 0; /*! Mise à valeur à l'aide d'un réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int SetValue ( const Real8 &val ) = 0; //---------------------------------------------------------------------- /*! Affectation d'une variable de type entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
334  * La valeur en retour est le statut de conversion.
335  */
336  virtual int SetValue ( const Int8 &val ) = 0;
337 
338  /*! Mise à valeur à l'aide d'un réel 32 bits.
339  * La valeur en retour est le statut de conversion.
340  */
341  virtual int SetValue ( const Real4 &val ) = 0;
342 
343  /*! Mise à valeur à l'aide d'un réel 64 bits.
344  * La valeur en retour est le statut de conversion.
345  */
346  virtual int SetValue ( const Real8 &val ) = 0;
347 
348 //----------------------------------------------------------------------
349 
350  /*! Affectation d'une variable de type entier 16 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
351  * La valeur en retour est le statut de conversion.
352  */
353  virtual int GetValue ( U_Int2 &val ) const = 0;
354 
355  /*! Affectation d'une variable de type entier 32 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
356  * La valeur en retour est le statut de conversion.
357  */
358  virtual int GetValue ( U_Int4 &val ) const = 0;
359 
360  /*! Affectation d'une variable de type entier 64 bits non signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( U_Int8 &val ) const = 0; /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
361  * La valeur en retour est le statut de conversion.
362  */
363  virtual int GetValue ( U_Int8 &val ) const = 0;
364 
365  /*! Affectation d'une variable de type entier 16 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int2 &val ) const = 0; /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
366  * La valeur en retour est le statut de conversion.
367  */
368  virtual int GetValue ( Int2 &val ) const = 0;
369 
370  /*! Affectation d'une variable de type entier 32 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int4 &val ) const = 0; /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
371  * La valeur en retour est le statut de conversion.
372  */
373  virtual int GetValue ( Int4 &val ) const = 0;
374 
375  /*! Affectation d'une variable de type entier 64 bits signé. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Int8 &val ) const = 0; /*! Affectation d'une variable de type réel 32 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real4 &val ) const = 0; /*! Affectation d'une variable de type réel 64 bits. * La valeur en retour est le statut de conversion. */ virtual int GetValue ( Real8 &val ) const = 0; /*! Patron pour opérateu de cast vers différents types de * données qui met à jour le mot d'état (après conversion * de type). */ template < class T > T Value ( ) { T result; status = GetValue ( result ); return (result); } //---------------------------------------------------------------------- // TEST DES CASTS //---------------------------------------------------------------------- /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
376  * La valeur en retour est le statut de conversion.
377  */
378  virtual int GetValue ( Int8 &val ) const = 0;
379 
380  /*! Affectation d'une variable de type réel 32 bits.
381  * La valeur en retour est le statut de conversion.
382  */
383  virtual int GetValue ( Real4 &val ) const = 0;
384 
385  /*! Affectation d'une variable de type réel 64 bits.
386  * La valeur en retour est le statut de conversion.
387  */
388  virtual int GetValue ( Real8 &val ) const = 0;
389 
390 
391  /*! Patron pour opérateu de cast vers différents types de
392  * données qui met à jour le mot d'état (après conversion
393  * de type).
394  */
395  template < class T > T Value ( )
396  {
397  T result;
398  status = GetValue ( result );
399  return (result);
400  }
401 
402 //----------------------------------------------------------------------
403 // TEST DES CASTS
404 //----------------------------------------------------------------------
405 
406  /*! Méthode qui renvoit le mot d'état d'une donnée. Si le mot
407  * d'état est négatif, c'est que la dernière affectation a donné * lieu à une mauvaise conversion. */ inline int Status() const { return (status); } /*! Méthode qui retourne vrai si une donnée est considérée * comme utilisable. */ inline bool IsValid () const { return ( (status & DATA_BAD) == 0 ); } /*! Méthode qui positionne le bit DATA_BAD du mot d'état. */ inline void SetBad () { status = status | DATA_BAD; } // retourne une indication textuelle de l'état de conversion. string CastInfo(); public: friend ostream & operator << ( ostream &os, const Data &d ); //---------------------------------------------------------------------- // pour ROOT... public: /*! Définition à usage de ROOT... */ ClassDef(Data,0); } ; //====================================================================== // FONCTIONS ASSOCIEES //====================================================================== /*! Opérateur de direction d'une donnée vers un flux de sortie. * \param os flux de sortie * \param d donnée à écrire */ inline ostream & operator << ( ostream & os, const Data &d ) { return (os << d.String()); } //====================================================================== #endif
408  * lieu à une mauvaise conversion.
409  */
410  inline int Status() const { return (status); }
411 
412  /*! Méthode qui retourne vrai si une donnée est considérée
413  * comme utilisable.
414  */
415  inline bool IsValid () const
416  { return ( (status & DATA_BAD) == 0 ); }
417 
418  /*! Méthode qui positionne le bit DATA_BAD du mot d'état.
419  */
420  inline void SetBad ()
421  { status = status | DATA_BAD; }
422 
423  // retourne une indication textuelle de l'état de conversion.
424  string CastInfo();
425 
426  public:
427  friend ostream & operator << ( ostream &os, const Data &d );
428 
429 //----------------------------------------------------------------------
430 // pour ROOT...
431  public:
432  /*! Définition à usage de ROOT... */
433  ClassDef(Data,0);
434 } ;
435 
436 
437 //======================================================================
438 // FONCTIONS ASSOCIEES
439 //======================================================================
440 
441 /*! Opérateur de direction d'une donnée vers un flux de sortie.
442  * \param os flux de sortie
443  * \param d donnée à écrire
444  */
445 inline ostream & operator << ( ostream & os, const Data &d )
446  { return (os << d.String()); }
447 
448 //======================================================================
449 
450 #endif
const Real8 DATA_UI8_RMAX
valeur mini pour conversion d&#39;un entier
Definition: Data.hh:109
double Real8
Définition du type réel 32 bits.
Definition: EventCommon.hh:68
static Data & Bad()
Definition: Data.cpp:81
int Status() const
Definition: Data.hh:410
ParamDataTypes
Définition des types numériques.
Definition: Data.hh:58
float Real4
Définition du type réel 32 bits.
Definition: EventCommon.hh:62
const Real8 DATA_UI4_RMAX
valeur mini pour conversion d&#39;un entier
Definition: Data.hh:96
static void SetLen(u_int l)
Definition: Data.hh:191
ostream & operator<<(ostream &os, const Data &d)
Definition: Data.hh:445
const Real8 DATA_I4_RMIN
valeur mini pour conversion d&#39;un réel
Definition: Data.hh:97
string CastInfo()
Definition: Data.cpp:49
DataTypeFlags
Bits de définition des types numériques.
Definition: Data.hh:37
GObjectV(Data)
Data()
Definition: Data.cpp:25
friend ostream & operator<<(ostream &os, const Data &d)
Definition: Data.hh:445
const U_Int2 DATA_UI2_SIGN
Bit de signe 16 bits.
Definition: Data.hh:90
virtual string Text() const
Definition: Data.hh:284
void SetBad()
Definition: Data.hh:420
virtual u_int TypeId() const =0
const Real8 DATA_I8_RMAX
valeur mini pour conversion d&#39;un réel
Definition: Data.hh:110
static char fill
Caractère de remplissage.
Definition: Data.hh:164
const Int8 DATA_I8_MAX
valeur mini pour conversion d&#39;un entier
Definition: Data.hh:107
unsigned short U_Int2
Définition du type entier 16 bits non signé
Definition: EventCommon.hh:32
const Real8 DATA_UI2_RMAX
valeur mini pour conversion d&#39;un entier
Definition: Data.hh:86
T Value()
Definition: Data.hh:395
virtual string Type() const =0
const U_Int8 DATA_UI8_MAX
valeur maxi pour conversion d&#39;un entier
Definition: Data.hh:106
ClassDef(Data, 0)
static void SetFill(const string &str)
Definition: Data.hh:212
short Int2
Définition du type entier 16 bits.
Definition: EventCommon.hh:26
const Int2 DATA_I2_MIN
valeur mini pour conversion d&#39;un entier
Definition: Data.hh:84
const Real8 DATA_I2_RMIN
valeur mini pour conversion d&#39;un réel
Definition: Data.hh:87
static void SetFill(char c)
Definition: Data.hh:206
bool IsValid() const
Definition: Data.hh:415
const U_Int8 DATA_UI8_SIGN
Bit de signe 64 bits.
Definition: Data.hh:113
const U_Int4 DATA_UI4_HI16
Masque binaire 16 bits forts sur 32 bits.
Definition: Data.hh:101
const U_Int4 DATA_UI4_SIGN
Bit de signe 32 bits.
Definition: Data.hh:100
const Int8 DATA_I8_MIN
valeur maxi pour conversion d&#39;un entier
Definition: Data.hh:108
virtual ~Data()
Definition: Data.cpp:40
const Int2 DATA_I2_MAX
valeur maxi pour conversion d&#39;un entier
Definition: Data.hh:85
ULong64_t U_Int8
Définition du type entier 64 bits non signé
Definition: EventCommon.hh:56
virtual int SetValue(const U_Int2 &val)=0
const Int4 DATA_I4_MAX
valeur maxi pour conversion d&#39;un entier
Definition: Data.hh:95
static string undef
Chaîne pour l&#39;écriture de donnée non valide.
Definition: Data.hh:165
const Int4 DATA_I4_MIN
valeur mini pour conversion d&#39;un entier
Definition: Data.hh:94
const Real8 DATA_I8_RMIN
valeur maxi pour conversion d&#39;un réel
Definition: Data.hh:111
const Real8 DATA_I2_RMAX
valeur maxi pour conversion d&#39;un réel
Definition: Data.hh:88
const U_Int4 DATA_UI4_MAX
valeur maxi pour conversion d&#39;un entier
Definition: Data.hh:93
const U_Int8 DATA_UI8_HI16
Masque binaire 16 bits forts sur 32 bits.
Definition: Data.hh:114
Definition: Data.hh:153
const Real8 DATA_I4_RMAX
valeur maxi pour conversion d&#39;un réel
Definition: Data.hh:98
int Int4
Définition du type entier 32 bits.
Definition: EventCommon.hh:38
unsigned int U_Int4
Définition du type entier 32 bits non signé
Definition: EventCommon.hh:44
#define DATA_BAD
Bits d&#39;état d&#39;une donnée: donnée inutilisable.
Definition: Data.hh:25
const U_Int2 DATA_UI2_MAX
valeur maxi pour conversion d&#39;un entier
Definition: Data.hh:83
static u_int prec
Précision d&#39;affichage.
Definition: Data.hh:163
static void SetPrec(u_int p)
Definition: Data.hh:201
static u_int len
Longueur d&#39;affichage.
Definition: Data.hh:162
Long64_t Int8
Définition du type entier 64 bits.
Definition: EventCommon.hh:50
const U_Int8 DATA_UI8_HI24
Masque binaire 24 bits forts sur 32 bits.
Definition: Data.hh:115
virtual int GetValue(U_Int2 &val) const =0
int status
Indicateur de l&#39;état des conversions de types.
Definition: Data.hh:167
virtual string FullText() const
Definition: Data.hh:292
virtual Data & operator=(const Data &d)
Definition: Data.hh:222
virtual string String() const =0