exceptn.cc

来自「编译工具」· CC 代码 · 共 263 行

CC
263
字号
// -*- Mode: C++; -*-//                            Package   : omniORB// exceptn.cc                 Created on: 9/1998//                            Author    : David Riddoch (djr)////    Copyright (C) 1996-1999 AT&T Laboratories Cambridge////    This file is part of the omniORB library////    The omniORB library is free software; you can redistribute it and/or//    modify it under the terms of the GNU Library General Public//    License as published by the Free Software Foundation; either//    version 2 of the License, or (at your option) any later version.////    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//    Library General Public License for more details.////    You should have received a copy of the GNU Library 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////// Description://  Implementation of the CORBA::Exception hierarchy.//#include <omniORB4/CORBA.h>#ifdef HAS_pch#pragma hdrstop#endif#include <omniORB4/minorCode.h>#include <exceptiondefs.h>#include <string.h>#include <stdlib.h>_init_in_def_( const CORBA::ULong CORBA::OMGVMCID = 1330446336; )//////////////////////////////////////////////////////////////////////////////////////////////////// Exception ///////////////////////////////////////////////////////////////////////////////////////////////////CORBA::Exception::~Exception() { pd_magic = 0; }CORBA::Exception*CORBA::Exception::_duplicate(Exception* e){  if( e )  return e->_NP_duplicate();  else     return 0;}CORBA::Exception*CORBA::Exception::_NP_is_a(const Exception* e, const char* typeId){  // _NP_is_a tests to see if the given typeId is a prefix of the  // given exception's typeId. The test only succeeds if the  // exception's typeId is an exact match, or the match ends on a '/'.  if( !e )  return 0;  const char* a = typeId;  const char* b = e->_NP_typeId();  for (; *a && *b; ++a, ++b) {    if (*a != *b)      return 0;  }  if (*a == '\0' && (*b == '\0' || *b == '/'))    return (Exception*) e;  return 0;}const char*CORBA::Exception::_name() const{  const char* a = _NP_typeId();  const char* b = a;  // Figure out the name from the typeId  for (; *a; ++a) {    if (*a == '/' || *a == ':') {      while (*a == '/' || *a == ':') ++a;      b = a;    }  }  OMNIORB_ASSERT(*b);  return b;}const char*CORBA::Exception::_rep_id() const{  int dummy;  return _NP_repoId(&dummy);}///////////////////////////////////////////////////////////////////////////////////////////////// SystemException ////////////////////////////////////////////////////////////////////////////////////////////////CORBA::SystemException::~SystemException() {}CORBA::SystemException*CORBA::SystemException::_downcast(Exception* e){  return (SystemException*)_NP_is_a(e, "Exception/SystemException");}const CORBA::SystemException*CORBA::SystemException::_downcast(const Exception* e){  return (const SystemException*)_NP_is_a(e, "Exception/SystemException");}voidCORBA::SystemException::_NP_marshal(cdrStream& s) const{  pd_minor >>= s;  CORBA::ULong(pd_status) >>= s;}////////////////////////////////////////////////////////////////////////////////////////////////// UserException /////////////////////////////////////////////////////////////////////////////////////////////////CORBA::UserException::~UserException() {}CORBA::UserException*CORBA::UserException::_downcast(Exception* e){  return (UserException*)_NP_is_a(e, "Exception/UserException");}const CORBA::UserException*CORBA::UserException::_downcast(const Exception* e){  return (const UserException*)_NP_is_a(e, "Exception/UserException");}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////#define  STD_EXCEPTION(name) \CORBA::name::~name() {} \ \void \CORBA::name::_raise() const \{ \  throw *this; \} \ \CORBA::name* \CORBA::name::_downcast(Exception* e) \{ \  return (name*)_NP_is_a(e, "Exception/SystemException/" #name); \} \ \const CORBA::name* \CORBA::name::_downcast(const Exception* e) \{ \  return (const name*)_NP_is_a(e, "Exception/SystemException/" #name); \} \ \const char* \CORBA::name::_NP_repoId(int* size) const \{ \  *size = sizeof("IDL:omg.org/CORBA/" #name ":1.0"); \  return "IDL:omg.org/CORBA/" #name ":1.0"; \} \ \CORBA::Exception* \CORBA::name::_NP_duplicate() const \{ \  return new name (*this); \} \ \const char* \CORBA::name::_NP_typeId() const \{ \  return "Exception/SystemException/" #name; \} \ \CORBA::Exception::insertExceptionToAny CORBA::name::insertToAnyFn = 0; \CORBA::Exception::insertExceptionToAnyNCP CORBA::name::insertToAnyFnNCP = 0; \\const char* \CORBA::name::NP_minorString() const \{ \  return _OMNI_NS(minorCode2String)(_OMNI_NS(name##_LookupTable),pd_minor); \}OMNIORB_FOR_EACH_SYS_EXCEPTION(STD_EXCEPTION)#undef STD_EXCEPTION//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////OMNIORB_DEFINE_USER_EX_WITHOUT_MEMBERS(CORBA::ORB, InvalidName,				       "IDL:omg.org/CORBA/ORB/InvalidName:1.0")////////////////////////////////////////////////////////////////////////////////////////////////// omniExHelper //////////////////////////////////////////////////////////////////////////////////////////////////#ifndef OMNIORB_NO_EXCEPTION_LOGGINGconst char*_OMNI_NS(omniExHelper)::strip(const char* fn){  const char* p = fn + strlen(fn);  while( p > fn && *p != '/' && *p != '\\' && *p != ':' )  p--;  if( *p == '/' || *p == '\\' || *p == ':' )  p++;  return p;}#define STD_EXCEPTION(name) \  void _OMNI_NS(omniExHelper)::name(const char* file, int line, \		  CORBA::ULong minor , CORBA::CompletionStatus status) \  { \    if( omniORB::traceExceptions ) { \      omniORB::logger l; \      l << "throw " #name << " from " << strip(file) << ":" << line \        << " ("; \      const char* description = _OMNI_NS(minorCode2String)(_OMNI_NS(name##_LookupTable),minor); \      if (description) { \        l << omniORB::logger::exceptionStatus(status,description) << ")\n"; \      } \      else { \	l << omniORB::logger::exceptionStatus(status,minor) << ")\n"; \      } \    } \    throw CORBA::name(minor,status); \  }OMNIORB_FOR_EACH_SYS_EXCEPTION(STD_EXCEPTION)#undef STD_EXCEPTION#endif  // ifndef OMNIORB_NO_EXCEPTION_LOGGING

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?