⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ofcond.h

📁 转化为DIB位图再显示出来的dicom文件C++代码
💻 H
字号:
/* * *  Copyright (C) 1997-2005, OFFIS * *  This software and supporting documentation were developed by * *    Kuratorium OFFIS e.V. *    Healthcare Information and Communication Systems *    Escherweg 2 *    D-26121 Oldenburg, Germany * *  THIS SOFTWARE IS MADE AVAILABLE,  AS IS,  AND OFFIS MAKES NO  WARRANTY *  REGARDING  THE  SOFTWARE,  ITS  PERFORMANCE,  ITS  MERCHANTABILITY  OR *  FITNESS FOR ANY PARTICULAR USE, FREEDOM FROM ANY COMPUTER DISEASES  OR *  ITS CONFORMITY TO ANY SPECIFICATION. THE ENTIRE RISK AS TO QUALITY AND *  PERFORMANCE OF THE SOFTWARE IS WITH THE USER. * *  Module:  ofstd * *  Author:  Marco Eichelberg * *  Purpose: class OFCondition and helper classes * *  Last Update:      $Author: meichel $ *  Update Date:      $Date: 2005/12/08 16:05:50 $ *  CVS/RCS Revision: $Revision: 1.9 $ *  Status:           $State: Exp $ * *  CVS/RCS Log at end of file * */#ifndef OFCOND_H#define OFCOND_H#include "dcmtk/config/osconfig.h"#include "dcmtk/ofstd/oftypes.h"   /* for class OFBool */#include "dcmtk/ofstd/ofstring.h"  /* for class OFString */#include "dcmtk/ofstd/ofcast.h"#define INCLUDE_CASSERT#include "dcmtk/ofstd/ofstdinc.h"/** this enumeration describes the return status of an operation. */enum OFStatus{  /// no error, operation has completed successfully  OF_ok,  /// operation has not completed successfully  OF_error,  /// application failure  OF_failure};/** abstract base class for condition codes */class OFConditionBase{public:  /// default constructor  OFConditionBase()  {  }  /// copy constructor  OFConditionBase(const OFConditionBase& /* arg */)  {  }  /// destructor  virtual ~OFConditionBase()  {  }  /** this method returns a pointer to a OFConditionBase object containing a clone   *  of this object. If deletable() is true, the clone must be a deep copy allocated   *  on the heap.  If deletable() is false, the clone should be a pointer to this.   *  @return clone of this object, either deep copy or alias.   */  virtual const OFConditionBase *clone() const = 0;  /** returns a combined code and module for this object.   *  code is lower 16 bits, module is upper 16 bits   */  virtual unsigned long codeAndModule() const = 0;  /// returns the status for this object.  virtual OFStatus status() const = 0;  /// returns the error message text for this object.  virtual const char *text() const = 0;  /** checks if this object is deletable, e.g. all instances   *  of this class are allocated on the heap.   *  @return true if deletable, false otherwise   */  virtual OFBool deletable() const = 0;  /// returns the module identifier for this object.  unsigned short module() const  {    return OFstatic_cast(unsigned short,((codeAndModule() >> 16) & 0xFFFF));  }  /// returns the status code identifier for this object.  unsigned short code() const  {    return OFstatic_cast(unsigned short,(codeAndModule() & 0xFFFF));  }  /** comparison operator.   *  Compares status, code and module but not error text.   *  @param arg argument to compare to   *  @return true if equal, false otherwise   */  OFBool operator==(const OFConditionBase& arg) const  {    return ((status() == arg.status()) && (codeAndModule() == arg.codeAndModule()));  }  /** comparison operator, not equal.   *  Compares status, code and module but not error text.   *  @param arg argument to compare to   *  @return false if equal, true otherwise   */  OFBool operator!=(const OFConditionBase& arg) const  {    return ((status() != arg.status()) || (code() != arg.code()) || (module() != arg.module()));  }private:  /// private unimplemented copy assignment operator  OFConditionBase& operator=(const OFConditionBase& arg);};/** this class is used to declare global condition constants. *  OFError instances may keep multiple aliased pointers to an instance of *  this class. Therefore, instances should be global constants. */class OFConditionConst: public OFConditionBase{public:  /** constructor.   *  @param aModule module identifier. 0 is reserved for global codes,   *    other constants are defined elsewhere.   *  @param aCode status code that is unique for each module   *  @param aStatus condition status enum   *  @param aText error text.  The text is not copied, so the pointer must   *    remain valid for the full lifetime of this object.   */  OFConditionConst(unsigned short aModule, unsigned short aCode, OFStatus aStatus, const char *aText)  : OFConditionBase()  , theCodeAndModule(OFstatic_cast(unsigned long, aCode) | OFstatic_cast(unsigned long, aModule << 16))  , theStatus(aStatus)  , theText(aText)  {  }  /// copy constructor  OFConditionConst(const OFConditionConst& arg)  : OFConditionBase(arg)  , theCodeAndModule(arg.theCodeAndModule)  , theStatus(arg.theStatus)  , theText(arg.theText)  {  }  /// destructor  virtual ~OFConditionConst()  {  }  /** this method returns a pointer to a OFConditionBase object containing a clone   *  of this object. In this case, deletable() is false and clone just returns a pointer to this.   *  @return alias of this object   */  virtual const OFConditionBase *clone() const;  /** returns a combined code and module for this object.   *  code is lower 16 bits, module is upper 16 bits   */  virtual unsigned long codeAndModule() const;  /// returns the status for this object.  virtual OFStatus status() const;  /// returns the error message text for this object.  virtual const char *text() const;  /** checks if this object is deletable, e.g. all instances   *  of this class are allocated on the heap.   *  @return always false for this class   */  virtual OFBool deletable() const;private:  /// private undefined copy assignment operator  OFConditionConst& operator=(const OFConditionConst& arg);  /// code/module identification. Code is lower 16 bits, module is upper 16 bits  unsigned long theCodeAndModule;  /// status  OFStatus theStatus;  /// condition description  const char *theText;};/** this class is used to declare condition codes with *  user defined error messages. */class OFConditionString: public OFConditionBase{public:  /** constructor.   *  @param aModule module identifier. 0 is reserved for global codes,   *    other constants are defined elsewhere.   *  @param aCode status code that is unique for each module   *  @param aStatus condition status enum   *  @param aText error text. The text is copied.   */  OFConditionString(unsigned short aModule, unsigned short aCode, OFStatus aStatus, const char *aText)  : OFConditionBase()  , theCodeAndModule(OFstatic_cast(unsigned long, aCode) | OFstatic_cast(unsigned long, aModule << 16))  , theStatus(aStatus)  , theText()  {    if (aText) theText = aText;  }  /// copy constructor  OFConditionString(const OFConditionString& arg)  : OFConditionBase(arg)  , theCodeAndModule(arg.theCodeAndModule)  , theStatus(arg.theStatus)  , theText(arg.theText)  {  }  /// destructor  virtual ~OFConditionString()  {  }  /** this method returns a pointer to a OFConditionBase object containing a clone   *  of this object. The clone is a deep copy allocated on the heap.   *  @return deep copy of this object   */  virtual const OFConditionBase *clone() const;  /** returns a combined code and module for this object.   *  code is lower 16 bits, module is upper 16 bits   */  virtual unsigned long codeAndModule() const;  /// returns the status for this object.  virtual OFStatus status() const;  /// returns the error message text for this object.  virtual const char *text() const;  /** checks if this object is deletable, e.g. all instances   *  of this class are allocated on the heap.   *  @return true if deletable, false otherwise   */  virtual OFBool deletable() const;private:  /// private undefined copy assignment operator  OFConditionString& operator=(const OFConditionString& arg);  /// code/module identification. Code is lower 16 bits, module is upper 16 bits  unsigned long theCodeAndModule;  /// status  OFStatus theStatus;  /// condition description  OFString theText;};// global constant used by OFCondition default constructor.extern const OFConditionConst ECC_Normal;/** General purpose class for condition codes. Objects of this class can be *  efficiently passed by value since they only contain a single pointer and *  no virtual methods. The condition code is maintained by the object of class *  OFConditionBase pointed to. */class OFCondition{public:  /** constructor for condition code with user-defined error text   *  @param base pointer to error base, which must be allocated on the heap.   *     The object pointed to is deleted upon destruction of this object.   *     Pointer must not be NULL.   */  OFCondition(OFConditionString *base)  : theCondition(base)  {    assert(theCondition);  }  /** constructor for condition code with global const condition object   *  @param base reference to condition base, which must be guaranteed   *     to exist for the lifetime of this (and every derived) object   *     since it is only referenced but not copied.   */#ifdef OFCONDITION_STRICT_MODE  // in strict mode OFCondition has no default constructor.  OFCondition(const OFConditionConst& base)#else  OFCondition(const OFConditionConst& base = ECC_Normal)#endif  : theCondition(&base)  {    assert(theCondition);  }  /// copy constructor  OFCondition(const OFCondition& arg)  : theCondition(arg.theCondition->clone())  {    assert(theCondition);  }  /// destructor  ~OFCondition()  {    if (theCondition->deletable())    {      delete OFconst_cast(OFConditionBase *, theCondition); // cast away const    }  }  /// copy assignment operator  OFCondition& operator=(const OFCondition& arg)  {    if (&arg != this)    {      if (theCondition->deletable())      {        delete OFconst_cast(OFConditionBase *, theCondition); // cast away const      }      theCondition = arg.theCondition->clone();      assert(theCondition);    }    return *this;  }  /// returns the module identifier for this object.  inline unsigned short module() const  {    return theCondition->module();  }  /// returns the status code identifier for this object.  inline unsigned short code() const  {    return theCondition->code();  }  /// returns the status for this object.  inline OFStatus status() const  {    return theCondition->status();  }  /// returns the error message text for this object.  inline const char *text() const  {    return theCondition->text();  }  /// returns true if status is OK  inline OFBool good() const  {    OFStatus s = theCondition->status();    return (s == OF_ok);  }  /// returns true if status is not OK, i. e. error or failure  inline OFBool bad() const  {    OFStatus s = theCondition->status();    return (s != OF_ok);  }#ifdef OFCONDITION_IMPLICIT_BOOL_CONVERSION  /* Implicit conversion from OFCondition to bool might   * not always be a good idea since it can hide unwanted constructs.   * Therefore, we disable this operator by default.   */  /** conversion operator to bool.   *  @return true if status is OK, false otherwise   */  inline operator OFBool() const  {    return good();  }#endif  /** comparison operator. Compares status, code and module   *  but not error text.   *  @param arg error to compare to   *  @return true if equal, false otherwise   */  inline OFBool operator==(const OFCondition& arg) const  {    return (*theCondition == *arg.theCondition);  }  /** comparison operator. Compares status, code and module   *  but not error text.   *  @param arg error to compare to   *  @return true if equal, false otherwise   */  inline OFBool operator!=(const OFCondition& arg) const  {    return (*theCondition != *arg.theCondition);  }private:  /// pointer to the condition base object  const OFConditionBase *theCondition;};/*  global condition constants. *  All constants defined here use module number 0 which is reserved for *  global definitions. Other constants are defined elsewhere. *//// condition constant: successful completionextern const OFCondition EC_Normal;/// condition constant: error, function called with illegal parametersextern const OFCondition EC_IllegalParameter;/// condition constant: failure, memory exhaustedextern const OFCondition EC_MemoryExhausted;/** this macro is a shortcut for creating user-specific error messages. */#define makeOFCondition(A, B, C, D) OFCondition(new OFConditionString((A), (B), (C), (D)))#endif/* * CVS/RCS Log: * $Log: ofcond.h,v $ * Revision 1.9  2005/12/08 16:05:50  meichel * Changed include path schema for all DCMTK header files * * Revision 1.8  2003/12/05 10:37:41  joergr * Removed leading underscore characters from preprocessor symbols (reserved * symbols). Updated copyright date where appropriate. * * Revision 1.7  2003/07/09 13:57:43  meichel * Adapted type casts to new-style typecast operators defined in ofcast.h * * Revision 1.6  2003/07/04 13:31:51  meichel * Fixed issues with compiling with HAVE_STD_STRING * * Revision 1.5  2003/06/12 13:15:59  joergr * Fixed inconsistent API documentation reported by Doxygen. * * Revision 1.4  2001/11/09 15:44:39  joergr * Removed ";" from macro definition to avoid compiler warnings reported by * Sun CC 2.0.1. * * Revision 1.3  2001/10/12 10:42:26  meichel * Introduced conditional define OFCONDITION_STRICT_MODE in which the *   compatibility options related to the transition to OFCondition are disabled: *   No OFCondition default constructor, no typedefs for E_Condition, CONDITION, *   no macros for SUCCESS and condition aliases. * * Revision 1.2  2001/09/25 17:07:24  meichel * Disabled implicit conversion to bool, added default constructor *   to class OFCondition. * * Revision 1.1  2001/08/23 16:08:37  meichel * Initial release of class OFCondition, a generic approach for condition codes * * */

⌨️ 快捷键说明

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