//************************************************************************ // $Header: GIREF/src/commun/Streams/syenvmsg.h // $Date: 2009/07/03 15:49:40 $ // $Author: ericc $ // $Locker: $ //************************************************************************ //************************************************************************ // --- Copyright (c) 1992-1998 // --- Institut National de la Recherche Scientifique (INRS) // --- TOUS DROITS RÉSERVÉS // --- ALL RIGHTS RESERVED // --- // --- Ce logiciel est couvert par les lois de copyright. L'utilisation, // --- la copie ou la modification de ce logiciel sous toutes ses formes, // --- que ce soit code source ou code compilé, à des fins autres que // --- commerciales sont autorisées sans frais pour autant que la présente // --- notice de copyright ainsi que cette permission apparaissent dans // --- toutes les copies ainsi que dans la documentation. // --- L'INRS ne prétend en aucune façon que ce logiciel convient à un // --- emploi quelconque. Celui-ci est distribué sans aucune garantie // --- implicite ou explicite. //************************************************************************ //************************************************************************ // Fichier: syenvmsg.h // // Classe: SYEnveloppeMessage // // Sommaire: Classe servant à gérer le compte // des références aux objets SYMessage. // // Description: Cette classe, par l'entremise de la classe // TPCompteReference, gère le compte des références aux // objets SYMessage. Selon le paradigme de la lettre et de // l'enveloppe, cette classe est l'enveloppe. //

// Le concept du compte des références vise à optimiser // l'utilisation de la mémoire en évitant de recopier des // objets identiques. //

// Puisque la plupart des méthodes retournent un message, // il est beaucoup plus profitable de retourner l'enveloppe // du message plutôt que le message lui-même (c'est-à-dire // l'objet SYMessage). // // Attributs: messageP: Un pointeur sur un compteur de références // à des objets SYMessage. // // Notes: Pour plus d'informations, voir: // Horstmann, Cay S., Mastering Object-Oriented Design in // C++, pp. 258-287. //************************************************************************ // 22-09-94 Eric Paquet & Yves Roy - version initiale // 02-10-95 Eric Paquet Lorsque le constructeur par défaut est utilisé, on ne crée // pas d'objet SYMessage. Dans ce cas, on assume que le type // du message est OK. La mécanique des méthodes touchées // par ce changement est ajustée. // 11-10-95 Yves Roy: Retour à l'énumération Type et à sa conversion vers SYMessage // lorsque nécessaire. On enlève le typedef SYMessage Type // pour mettre l'énumération. // 25-01-96 Yves Roy Ajout d'un appel à SYMessage pour écrire la pile d'appel // lorsque nécessaire. // 21-02-96 Yves Secretan Enleve le include de ererreur.h // 21-11-96 Serge Dufour Vérification des dépendances // 19-08-97 Yves Secretan Ajoute un include de erexcept.h // 16-10-97 Yves Secretan Passage à la double précision // 16-07-98 Yves Secretan Passe Type par valeur // 11-08-98 Yves Secretan Introduis MODE_TEMPLATE_EXTERNE // 01-09-98 Yves Roy Ajout notice copyright // 28-10-98 Yves Secretan Remplace #include "ererreur" //************************************************************************ #ifndef __SYENVMSG_H #define __SYENVMSG_H #ifdef MODE_TEMPLATE_EXTERNE # if defined(__GNUC__) # pragma interface # endif // #if defined(__GNUC__) #endif // #ifdef MODE_TEMPLATE_EXTERNE #include "sytypes.h" #include "erexcept.h" #include "gestionDebug.h" #include "girefConfigurationSysteme.h" #include "tpcptref.h" #include "symessag.h" #ifdef GIREF_MODE_DEBUG // Ce define active la verification des messages d'erreur (perte, ecrasement, ...). On l'active pour le mode dev. //#define VERIFICATION_ERMSG_ACTIVEE #endif template class SYEnveloppeMessage { public: enum Type { OK = SYMessage::OK, AVERTISSEMENT = SYMessage::AVERTISSEMENT, ERREUR = SYMessage::ERREUR, FATAL = SYMessage::FATAL }; SYEnveloppeMessage (Type = OK); SYEnveloppeMessage (Type, const T&); SYEnveloppeMessage (const SYEnveloppeMessage&); ~SYEnveloppeMessage(); Type reqType() const; EntierN reqNbrMessages() const; void ajoute (const T&); void ajoute (const SYEnveloppeMessage&); void asgType(Type); static void asgAjoutePileAppel(bool pAjoutePileEnCasDErreur); void reinitialise(); const SYEnveloppeMessage& operator=(const SYEnveloppeMessage&); const T& operator [] (const EntierN) const; operator void* () const; void declarePrisEnCompte(const bool& pPrisEnCompte=true) const; protected: void invariant(ConstCarP) const; private: void copie(const SYEnveloppeMessage&); void libere(); void clone(); #ifdef VERIFICATION_ERMSG_ACTIVEE void verificationEcrasement() const; mutable bool aEvalueAumoinsUneFois; mutable bool aEgaleAutorise; mutable bool aTesteOuRecopie; #endif // VERIFICATION_ERMSG_ACTIVEE static bool asAjoutePileAppel; TPCompteReference > *aMessageP; }; #include "syenvmsg.hpp" //************************************************************** // Sommaire: Invariants de classe // // Description: // // Entrée: // ConstCarP conditionP // // Sortie: // // Notes: // //************************************************************** template inline void SYEnveloppeMessage::invariant(ConstCarP /*conditionP*/) const { } #endif // ifndef __SYENVMSG_H