/usr/include/salome/DSC_Exception.hxx is in salome-kernel-dev 6.5.0-7ubuntu2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | // Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
// File : DSC_Exception.hxx
// Author : Eric Fayolle (EDF)
// Module : KERNEL
//
#ifndef DSC_EXCEPTION_HXX
#define DSC_EXCEPTION_HXX
#include "Utils_SALOME_Exception.hxx"
#include <string>
#include <iostream>
#include <sstream>
#include <memory>
#include "utilities.h"
#ifndef WIN32
extern "C"
{
#endif
#include <string.h>
#ifndef WIN32
}
#endif
#if defined(_DEBUG_) || defined(_DEBUG)
# ifdef __GNUC__
# define LOC(message) (message), __FILE__ , __LINE__ , __FUNCTION__
# else
# define LOC(message) (message), __FILE__, __LINE__
# endif
#else
# define LOC(message) (message)
#endif
#ifndef SWIG
/**
* Class OSS is useful when streaming data through a function
* that expect a string as parameter
*/
class OSS
{
private:
std::ostringstream oss_;
public:
explicit OSS() : oss_() {}
template <class T>
OSS & operator<<(T obj)
{
oss_ << obj;
return *this;
}
operator std::string()
{
return oss_.str();
}
// Surtout ne pas écrire le code suivant:
// car oss_.str() renvoie une string temporaire
// operator const char*()
// {
// return oss_.str().c_str();
// }
}; /* end class OSS */
#endif
// Cette fonction provient de Utils_SALOME_Exception
// Solution pas très élégante mais contrainte par les manques de la classe SALOME_Exception
const char *makeText( const char *text, const char *fileName, const unsigned int lineNumber);
struct DSC_Exception : public SALOME_Exception {
// Attention, en cas de modification des paramètres par défaut
// il est necessaire de les repporter dans la macro DSC_EXCEPTION ci-dessous
// Le constructeur de la SALOME_Exception demande une chaine non vide
// Du coup on est obliger de la désallouer avant d'y mettre la notre
// car le what n'est pas virtuel donc il faut que le contenu de SALOME_Exception::_text
// soit utilisable.
// Ne pas mettre lineNumber=0 à cause du calcul log dans la SALOME_Exception si fileName est défini
DSC_Exception( const std::string & text,
const char *fileName="",
const unsigned int lineNumber=0,
const char *funcName="" ):
SALOME_Exception(text.c_str()) ,
_dscText(text),
_filefuncName(setFileFuncName(fileName?fileName:"",funcName?funcName:"")),
_lineNumber(lineNumber),
_exceptionName("DSC_Exception")
{
// Mise en cohérence avec l'exception SALOME (à revoir)
delete [] ((char*)SALOME_Exception::_text);
if (! _filefuncName.empty() )
SALOME_Exception::_text = makeText(text.c_str(),_filefuncName.c_str(),lineNumber) ;
else
SALOME_Exception::_text = makeText(text.c_str(),0,lineNumber) ;
OSS oss ;
oss << _exceptionName ;
if (!_filefuncName.empty() ) oss << " in " << _filefuncName;
if (_lineNumber) oss << " [" << _lineNumber << "]";
oss << " : " << _dscText;
_what = oss;
}
virtual const char* what( void ) const throw ()
{
return _what.c_str() ;
}
// L'opérateur = de SALOME_Exception n'est pas défini
// problème potentiel concernant la recopie de son pointeur _text
// Le destructeur de la SALOME_Exception devrait être virtuel
// sinon pb avec nos attributs de type pointeur.
virtual ~DSC_Exception(void) throw() {};
virtual const std::string & getExceptionName() const {return _exceptionName;};
private:
std::string setFileFuncName(const char * fileName, const char * funcName) {
ASSERT(fileName);
ASSERT(funcName);
OSS oss;
if ( strcmp(fileName,"") )
oss << fileName << "##" << funcName;
return oss;
};
//DSC_Exception(void) {};
protected:
std::string _dscText;
std::string _filefuncName;
std::string _exceptionName;
int _lineNumber;
std::string _what;
};
#define DSC_EXCEPTION(Derived) struct Derived : public DSC_Exception { \
Derived ( const std::string & text, const char *fileName="", const unsigned int lineNumber=0, const char *funcName="" \
) : DSC_Exception(text,fileName,lineNumber,funcName) { \
_exceptionName = #Derived; \
} \
virtual ~Derived(void) throw();\
};\
//Sert à eviter le problème d'identification RTTI des exceptions
//Crée un unique typeInfo pour tous les bibliothèques composants SALOME
//dans un fichier cxx
#define DSC_EXCEPTION_CXX(NameSpace,Derived) NameSpace::Derived::~Derived(void) throw() {};
#endif /* DSC_EXCEPTION_HXX */
|