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

📄 object.h

📁 pwlib源码库
💻 H
📖 第 1 页 / 共 5 页
字号:
 * Revision 1.7  1995/01/09  12:38:31  robertj * Changed variable names around during documentation run. * Fixed smart pointer comparison. * Fixed serialisation stuff. * Documentation. * * Revision 1.6  1995/01/03  09:39:06  robertj * Put standard malloc style memory allocation etc into memory check system. * * Revision 1.5  1994/12/12  10:08:30  robertj * Renamed PWrapper to PSmartPointer.. * * Revision 1.4  1994/12/05  11:23:28  robertj * Fixed PWrapper macros. * * Revision 1.3  1994/11/19  00:22:55  robertj * Changed PInteger to be INT, ie standard type like BOOL/WORD etc. * Moved null object check in notifier to construction rather than use. * Added virtual to the callback function in notifier destination class. * * Revision 1.2  1994/11/03  09:25:30  robertj * Made notifier destination object not to be descendent of PObject. * * Revision 1.1  1994/10/30  12:01:37  robertj * Initial revision * */#ifndef _POBJECT_H#define _POBJECT_H#ifdef P_USE_PRAGMA#pragma interface#endif#ifdef _WIN32#include "msos/ptlib/contain.h"#else#include "unix/ptlib/contain.h"#endif#if defined(P_VXWORKS)#include <private/stdiop.h>#endif#include <stdio.h>#include <stdarg.h>#include <stdlib.h>#ifdef _WIN32  #include <malloc.h>#endif#include <string.h>#ifdef __USE_STL__  #include <string>  #include <iomanip>  #include <iostream>  #if (__GNUC__ >= 3)    #include <sstream>    //typedef std::ostringstream ostrstream;  #else    #include <strstream>  #endif  //using namespace std;#else  #if (__GNUC__ >= 3)    #include <iostream>    #ifndef __MWERKS__      #include <iomanip>    #endif  #else    #include <iostream.h>    #ifdef __GNUC__      #include <strstream.h>    #else      #include <strstrea.h>    #endif    #ifndef __MWERKS__      #include <iomanip.h>    #endif  #endif#endif#ifdef _WIN32_WCE  #include <stdlibx.h>#endif#if (__GNUC__ < 3)typedef long _Ios_Fmtflags;#endif#if _MSC_VER<1300#define _BADOFF -1#endif///////////////////////////////////////////////////////////////////////////////// Disable inlines when debugging for faster compiles (the compiler doesn't// actually inline the function with debug on any way).#ifndef P_USE_INLINES#ifdef _DEBUG#define P_USE_INLINES 0#else#define P_USE_INLINES 0#endif#endif#if P_USE_INLINES#define PINLINE inline#else#define PINLINE#endif///////////////////////////////////////////////////////////////////////////////// Declare the debugging support#ifndef P_USE_ASSERTS#define P_USE_ASSERTS 1#endif#if !P_USE_ASSERTS#define PAssert(b, m) (b)#define PAssert2(b, c, m) (b)#define PAssertOS(b) (b)#define PAssertNULL(p) (p)#define PAssertAlways(m)#define PAssertAlways2(c, m)#else // P_USE_ASSERTS/// Standard assert messages for the PAssert macro.enum PStandardAssertMessage {  PLogicError,              // A logic error occurred.  POutOfMemory,             // A new or malloc failed.  PNullPointerReference,    // A reference was made through a NULL pointer.  PInvalidCast,             // An invalid cast to descendant is required.  PInvalidArrayIndex,       // An index into an array was negative.  PInvalidArrayElement,     // A NULL array element object was accessed.  PStackEmpty,              // A Pop() was made of a stack with no elements.  PUnimplementedFunction,   // Funtion is not implemented.  PInvalidParameter,        // Invalid parameter was passed to a function.  POperatingSystemError,    // Error was returned by Operating System.  PChannelNotOpen,          // Operation attempted when channel not open.  PUnsupportedFeature,      // Feature is not supported.  PInvalidWindow,           // Access through invalid window.  PMaxStandardAssertMessage};#define __CLASS__ NULLvoid PAssertFunc(const char * file, int line, const char * className, PStandardAssertMessage msg);void PAssertFunc(const char * file, int line, const char * className, const char * msg);void PAssertFunc(const char * full_msg);inline bool PAssertFuncInline(bool b, const char * file, int line, const char * className, PStandardAssertMessage msg){  if (!b)     PAssertFunc(file, line, className, msg);  return b;}inline bool PAssertFuncInline(bool b, const char * file, int line, const char * className, const char * msg){  if (!b)     PAssertFunc(file, line, className, msg);  return b;}/** This macro is used to assert that a condition must be TRUE.If the condition is FALSE then an assert function is called with the sourcefile and line number the macro was instantiated on, plus the message describedby the #msg# parameter. This parameter may be either a standard valuefrom the #PStandardAssertMessage# enum or a literal string.*/#define PAssert(b, m) PAssertFuncInline((b), __FILE__,__LINE__,__CLASS__,(m))/** This macro is used to assert that a condition must be TRUE.If the condition is FALSE then an assert function is called with the sourcefile and line number the macro was instantiated on, plus the message describedby the #msg# parameter. This parameter may be either a standard valuefrom the #PStandardAssertMessage# enum or a literal string.The #c# parameter specifies the class name that the error occurred in*/#define PAssert2(b, c, m) PAssertFuncInline((b), __FILE__,__LINE__,(c),(m))/** This macro is used to assert that an operating system call succeeds.If the condition is FALSE then an assert function is called with the sourcefile and line number the macro was instantiated on, plus the messagedescribed by the #POperatingSystemError# value in the #PStandardAssertMessage#enum. */#define PAssertOS(b) PAssertFuncInline((b), __FILE__,__LINE__,__CLASS__,POperatingSystemError)/** This macro is used to assert that a pointer must be non-null.If the pointer is NULL then an assert function is called with the source fileand line number the macro was instantiated on, plus the message described bythe PNullPointerReference value in the #PStandardAssertMessage# enum.Note that this evaluates the expression defined by #ptr# twice. Toprevent incorrect behaviour with this, the macro will assume that the#ptr# parameter is an L-Value. */#define PAssertNULL(p) ((&(p)&&(p)!=NULL)?(p): \                     (PAssertFunc(__FILE__,__LINE__, __CLASS__, PNullPointerReference),(p)))/** This macro is used to assert immediately.The assert function is called with the source file and line number the macrowas instantiated on, plus the message described by the #msg# parameter. Thisparameter may be either a standard value from the #PStandardAssertMessage#enum or a literal string.*/#define PAssertAlways(m) PAssertFunc(__FILE__,__LINE__,__CLASS__,(m))/** This macro is used to assert immediately.The assert function is called with the source file and line number the macrowas instantiated on, plus the message described by the #msg# parameter. Thisparameter may be either a standard value from the #PStandardAssertMessage#enum or a literal string.*/#define PAssertAlways2(c, m) PAssertFunc(__FILE__,__LINE__,(c),(m))#endif // P_USE_ASSERTS/** Get the stream being used for error output.This stream is used for all trace output using the various trace functionsand macros.*/ostream & PGetErrorStream();/** Set the stream to be used for error output.This stream is used for all error output using the #PError# macro.*/void PSetErrorStream(ostream * strm /** New stream for error output */ );/** This macro is used to access the platform specific error output stream.This is to be used in preference to assuming #cerr# is always available. OnUnix platforms this {\bfis} #cerr# but for MS-Windows this is another streamthat uses the OutputDebugString() Windows API function. Note that a MS-DOS orWindows NT console application would still use #cerr#.The #PError# stream would normally only be used for debugging information asa suitable display is not always available in windowed environments.   The macro is a wrapper for a global variable #PErrorStream# which is a pointerto an #ostream#. The variable is initialised to #cerr# for all but MS-Windowsand NT GUI applications. An application could change this pointer to a#ofstream# variable of #PError# output is wished to be redirected to a file.*/#define PError (PGetErrorStream())///////////////////////////////////////////////////////////////////////////////// Debug and tracing#ifndef PTRACING#ifndef _DEBUG#define PTRACING 0#else#define PTRACING 1#endif#endif/**Class to encapsulate tracing functions.   This class does not require any instances and is only being used as a   method of grouping functions together in a name space.  */class PTrace{public:  /// Options for trace output.  enum Options {    /**Include PTrace::Block constructs in output       If this is bit is clear, all PTrace::Block output is inhibited       regardless of the trace level. If set, the PTrace::Block may occur       provided the trace level is greater than zero.    */    Blocks = 1,    /// Include date and time in all output    DateAndTime = 2,    /// Include (millisecond) timestamp in all output    Timestamp = 4,    /// Include identifier for thread trace is made from in all output    Thread = 8,    /// Include trace level in all output    TraceLevel = 16,    /// Include the file and line for the trace call in all output    FileAndLine = 32,    /// Include thread object pointer address in all trace output    ThreadAddress = 64,    /// Append to log file rather than resetting every time    AppendToFile = 128,    /** Output timestamps in GMT time rather than local time      */    GMTTime = 256,    /** If set, log file will be rotated daily      */    RotateDaily = 512,    /** SystemLog flag for tracing within a PServiceProcess application. Must        be set in conjection with SetStream(new PSystemLog).      */    SystemLogStream = 32768  };  /**Set the most common trace options.     If filename is not NULL then a PTextFile is created and attached the     trace output stream. This object is never closed or deleted until the     termination of the program.     A trace output of the program name version and OS is written as well.    */  static void Initialise(    unsigned level,    const char * filename = NULL,    unsigned options = Timestamp | Thread | Blocks  );  /** Set the trace options.  The PTRACE(), PTRACE_BLOCK() and PTRACE_LINE() macros output trace text that  may contain assorted values. These are defined by the Options enum.  Note this function OR's the bits included in the options parameter.  */  static void SetOptions(unsigned options /** New level for trace */ );  /** Clear the trace options.  The PTRACE(), PTRACE_BLOCK() and PTRACE_LINE() macros output trace text that  may contain assorted values. These are defined by the Options enum.  Note this function AND's the complement of the bits included in the options  parameter.  */  static void ClearOptions(unsigned options /** New level for trace */ );  /** Get the current trace options.  The PTRACE(), PTRACE_BLOCK() and PTRACE_LINE() macros output trace text that  may contain assorted values. These are defined by the Options enum.  */  static unsigned GetOptions();  /** Set the trace level.  The PTRACE() macro checks to see if its level is equal to or lower then the  level set by this function. If so then the trace text is output to the trace  stream.  */  static void SetLevel(unsigned level /** New level for trace */ );  /** Get the trace level.  The PTRACE() macro checks to see if its level is equal to or lower then the  level set by this function. If so then the trace text is output to the trace  stream.  */  static unsigned GetLevel();  /** Determine if the level may cause trace output.  This checks against the current global trace level set by #PSetTraceLevel#  for if the trace output may be emitted. This is used by the PTRACE macro.  */  static BOOL CanTrace(unsigned level /** Trace level to check */);  /** Set the stream to be used for trace output.  This stream is used for all trace output using the various trace functions  and macros.

⌨️ 快捷键说明

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