📄 contain.h
字号:
/* * contain.h * * General container classes. * * Portable Windows Library * * Copyright (c) 1993-1998 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Portable Windows Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions are Copyright (C) 1993 Free Software Foundation, Inc. * All Rights Reserved. * * Contributor(s): ______________________________________. * * $Log: contain.h,v $ * Revision 1.51 2005/03/10 06:37:19 csoutheren * Removed use of typeid on WIndows to get class name because it is not threadsafe * In fact, lets just use #classname everywhere because that will always work * Thanks to Vyacheslav Frolov * * Revision 1.50 2004/10/30 19:23:45 ykiryanov * Ifdefd strcasecmp for WinCE port * * Revision 1.49 2004/10/23 11:34:14 ykiryanov * Added ifdef _WIN32_WCE for PocketPC 2003 SDK port * * Revision 1.48 2004/08/15 06:45:48 rjongbloed * Disabled warning about conversion from int to bool type. * * Revision 1.47 2004/06/30 12:17:04 rjongbloed * Rewrite of plug in system to use single global variable for all factories to avoid all sorts * of issues with startup orders and Windows DLL multiple instances. * * Revision 1.46 2004/06/19 09:10:24 csoutheren * Removed MSVC warnings for <queue> * * Revision 1.45 2004/06/01 23:25:20 csoutheren * Disabled warnings under MSVC * * Revision 1.44 2004/06/01 05:22:43 csoutheren * Restored memory check functionality * * Revision 1.43 2004/05/19 23:34:43 csoutheren * Added <algorithm> * * Revision 1.42 2004/05/13 14:53:35 csoutheren * Add "abstract factory" template classes * * Revision 1.41 2004/04/15 03:58:40 csoutheren * Removed PCONTAINER_USES_CRITSEC * * Revision 1.40 2004/04/13 10:12:21 csoutheren * Fix for MSVC (grrr) * * Revision 1.39 2004/04/13 03:13:29 csoutheren * VS.net won't compile without "using namespace std" * * Revision 1.38 2004/04/12 03:04:10 csoutheren * Removed <vector> warnings under Windows * * Revision 1.37 2004/04/11 22:47:03 csoutheren * Remove unused parameter warnings for Windows <string> * * Revision 1.36 2004/04/11 13:26:25 csoutheren * Removed namespace problems and removed warnings for Windows <string> * * Revision 1.35 2004/04/11 02:55:18 csoutheren * Added PCriticalSection for Windows * Added compile time option for PContainer to use critical sections to provide thread safety under some circumstances * * Revision 1.34 2004/04/09 06:40:48 rjongbloed * Removed warning in VC++2003 version about wspapi.h * * Revision 1.33 2004/04/09 00:42:59 csoutheren * Changed Unix build to use slightly different method for * keep class names, as GCC does not use actual class names for typeinfo * * Revision 1.32 2004/04/03 08:22:20 csoutheren * Remove pseudo-RTTI and replaced with real RTTI * * Revision 1.31 2004/04/03 06:54:23 rjongbloed * Many and various changes to support new Visual C++ 2003 * * Revision 1.30 2004/01/06 21:17:38 csoutheren * Fixed formatting of warning message regarding old include system * Thanks to Louis R. Marascio * * Revision 1.29 2003/09/17 05:41:59 csoutheren * Removed recursive includes * * Revision 1.28 2002/09/23 07:17:23 robertj * Changes to allow winsock2 to be included. * * Revision 1.27 2002/03/15 05:58:52 robertj * Added strncasecmp macro for unix compatibility * * Revision 1.26 2000/05/02 02:58:09 robertj * Added strcasecmp macro, BSDish version of stricmp * * Revision 1.25 2000/02/28 11:39:52 robertj * Removed warning for if STRICT (for windows.h) already defined. * * Revision 1.24 1999/03/09 10:30:17 robertj * Fixed ability to have PMEMORY_CHECK on/off on both debug/release versions. * * Revision 1.23 1998/11/30 02:55:06 robertj * New directory structure * * Revision 1.22 1998/10/13 14:13:16 robertj * Complete rewrite of memory leak detection code. * * Revision 1.21 1998/09/24 03:29:57 robertj * Added open software license. * * Revision 1.20 1998/03/09 07:15:15 robertj * Added support for MemCheck-32 program. * * Revision 1.19 1998/01/26 00:52:13 robertj * Fixed istream << operator for PInt64, should be reference. * * Revision 1.18 1997/07/08 13:01:30 robertj * DLL support. * * Revision 1.17 1997/01/12 04:13:07 robertj * Changed library to support NT 4.0 API changes. * * Revision 1.16 1996/09/14 12:38:57 robertj * Moved template define from command line to code. * Fixed correct application of windows defines. * * Revision 1.15 1996/08/17 10:00:33 robertj * Changes for Windows DLL support. * * Revision 1.14 1996/08/08 10:08:58 robertj * Directory structure changes for common files. * * Revision 1.13 1996/07/15 10:26:55 robertj * MSVC 4.1 Support * * Revision 1.12 1996/03/31 09:07:29 robertj * Removed bad define in NT headers. * * Revision 1.11 1996/01/28 02:54:27 robertj * Removal of MemoryPointer classes as usage didn't work for GNU. * * Revision 1.10 1996/01/23 13:23:15 robertj * Added const version of PMemoryPointer * * Revision 1.9 1995/11/09 12:23:46 robertj * Added 64 bit integer support. * Added platform independent base type access classes. * * Revision 1.8 1995/04/25 11:31:18 robertj * Changes for DLL support. * * Revision 1.7 1995/03/12 04:59:54 robertj * Re-organisation of DOS/WIN16 and WIN32 platforms to maximise common code. * Used built-in equate for WIN32 API (_WIN32). * * Revision 1.6 1995/01/09 12:28:45 robertj * Moved EXPORTED definition from applicat.h * * Revision 1.5 1995/01/06 10:47:08 robertj * Added 64 bit integer. * * Revision 1.4 1994/11/19 00:18:26 robertj * Changed PInteger to be INT, ie standard type like BOOL/WORD etc. * * Revision 1.3 1994/07/02 03:18:09 robertj * Support for 16 bit systems. * * Revision 1.2 1994/06/25 12:13:01 robertj * Synchronisation. * * Revision 1.1 1994/04/01 14:38:42 robertj * Initial revision * */#ifndef _CONTAIN_H#ifndef _WIN32_WCE#error "Please remove pwlib\include\ptlib\msos from the tool include path \"and from the pre-processor options for this project"#endif // !_WIN32_WCE#endif#ifndef _OBJECT_H#define _OBJECT_H#ifdef _MSC_VER#pragma warning(disable:4201) // nonstandard extension: nameless struct/union#pragma warning(disable:4251) // disable warning exported structs#pragma warning(disable:4511) // default copy ctor not generated warning#pragma warning(disable:4512) // default assignment op not generated warning#pragma warning(disable:4514) // unreferenced inline removed#pragma warning(disable:4699) // precompiled headers#pragma warning(disable:4702) // disable warning about unreachable code#pragma warning(disable:4705) // disable warning about statement has no effect#pragma warning(disable:4710) // inline not expanded warning#pragma warning(disable:4711) // auto inlining warning#pragma warning(disable:4786) // identifier was truncated to '255' characters in the debug information#pragma warning(disable:4097) // typedef synonym for class#pragma warning(disable:4800) // forcing value to bool 'true' or 'false' (performance warning)#if _MSC_VER>=800#define PHAS_TEMPLATES#endif#if _MSC_VER>=1300#define __USE_STL__ 1#endif#endif///////////////////////////////////////////////////////////////////////////////// Machine & Compiler dependent declarations#if defined(_WIN32) && !defined(WIN32)#define WIN32#endif#if defined(_WINDOWS) || defined(_WIN32)# ifndef WINVER# define WINVER 0x401# endif# ifndef STRICT# define STRICT# endif# ifndef WIN32_LEAN_AND_MEAN# define WIN32_LEAN_AND_MEAN# endif# include <windows.h># undef DELETE // Remove define from NT headers.#else typedef unsigned char BYTE; // 8 bit unsigned integer quantity typedef unsigned short WORD; // 16 bit unsigned integer quantity typedef unsigned long DWORD; // 32 bit unsigned integer quantity typedef int BOOL; // type returned by expresion (i != j) #define TRUE 1 #define FALSE 0 #define NEAR __near#endif// Declaration for exported callback functions to OS#if defined(_WIN32)# define PEXPORTED __stdcall#elif defined(_WINDOWS)# define PEXPORTED WINAPI __export#else# define PEXPORTED __far __pascal#endif// Declaration for static global variables (WIN16 compatibility)#if defined(_WIN32)# define PSTATIC#else# define PSTATIC __near#endif// Declaration for platform independent architectures#define PCHAR8 PANSI_CHAR#define PBYTE_ORDER PLITTLE_ENDIAN// Declaration for integer that is the same size as a void *#if defined(_WIN32) typedef int INT;#else typedef long INT; #endif// Declaration for signed integer that is 16 bitstypedef short PInt16;// Declaration for signed integer that is 32 bitstypedef long PInt32;// Declaration for 64 bit unsigned integer quantity#if defined(_MSC_VER) && defined(_WIN32)#define P_HAS_INT64typedef signed __int64 PInt64;typedef unsigned __int64 PUInt64;#if _MSC_VER<1300class ostream;class istream;ostream & operator<<(ostream & s, PInt64 v);ostream & operator<<(ostream & s, PUInt64 v);istream & operator>>(istream & s, PInt64 & v);istream & operator>>(istream & s, PUInt64 & v);#endif#endif// Standard array index type (depends on compiler)// Type used in array indexes especially that required by operator[] functions.#ifdef _MSC_VER# define PINDEX int# if defined(_WIN32) const PINDEX P_MAX_INDEX = 0x7fffffff;# else const PINDEX P_MAX_INDEX = 0x7fff;# endif inline PINDEX PABSINDEX(PINDEX idx) { return (idx < 0 ? -idx : idx)&P_MAX_INDEX; }# define PASSERTINDEX(idx) PAssert((idx) >= 0, PInvalidArrayIndex)#else# define PINDEX unsigned# if sizeof(int) == 4 const PINDEX P_MAX_INDEX = 0xffffffff;# else const PINDEX P_MAX_INDEX = 0xffff;# endif# define PABSINDEX(idx) (idx)# define PASSERTINDEX(idx)#endif#ifndef _WIN32_WCE#define strcasecmp(s1,s2) stricmp(s1,s2)#define strncasecmp(s1,s2,n) strnicmp(s1,s2,n)#endifclass PWin32Overlapped : public OVERLAPPED{ // Support class for overlapped I/O in Win32. public: PWin32Overlapped(); ~PWin32Overlapped(); void Reset();};enum { PWIN32ErrorFlag = 0x40000000 };class PString;class RegistryKey{ public: enum OpenMode { ReadOnly, ReadWrite, Create }; RegistryKey(const PString & subkey, OpenMode mode); ~RegistryKey(); BOOL EnumKey(PINDEX idx, PString & str); BOOL EnumValue(PINDEX idx, PString & str); BOOL DeleteKey(const PString & subkey); BOOL DeleteValue(const PString & value); BOOL QueryValue(const PString & value, PString & str); BOOL QueryValue(const PString & value, DWORD & num, BOOL boolean); BOOL SetValue(const PString & value, const PString & str); BOOL SetValue(const PString & value, DWORD num); private: HKEY key;};#ifndef _WIN32_WCE extern "C" int PASCAL WinMain(HINSTANCE, HINSTANCE, LPSTR, int);#else extern "C" int PASCAL WinMain(HINSTANCE, HINSTANCE, LPTSTR, int); #include <ptlib/wince/time.h>#endif// used by various modules to disable the winsock2 include to avoid header file problems#ifndef P_KNOCKOUT_WINSOCK2#pragma warning(push)#pragma warning(disable:4127 4706)#if defined(P_WINSOCKv1) #include <winsock.h>#else // P_WINSOCKv1 ///IPv6 support // Needed for for IPv6 socket API. Must be included before "windows.h" #include <winsock2.h> // Version 2 of windows socket #include <ws2tcpip.h> // winsock2 is not complete, ws2tcpip add some defines such as IP_TOS #if P_HAS_IPV6 && !defined IPPROTO_IPV6 #include "tpipv6.h" // For IPv6 Tech Preview. #endif#endif // P_WINSOCKv1#pragma warning(pop)#define PIPXtypedef int socklen_t;#endif // P_KNOCKOUT_WINSOCK2#if defined(_MSC_VER) && !defined(_WIN32)extern "C" int __argc;extern "C" char ** __argv;#endif#ifdef __BORLANDC__#define __argc _argc#define __argv _argv#endif#undef Yield#define P_THREADIDENTIFIER DWORD#include <sys\types.h>#include <errno.h>#include <io.h>#pragma warning(disable:4201)#include <mmsystem.h>#ifndef _WIN32_WCE#include <vfw.h>#else#include <cevfw.h>#endif#define P_HAS_TYPEINFO 1//#define PCONTAINER_USES_CRITSEC 1// preload <string> and kill warnings#pragma warning(push)#include <yvals.h> #pragma warning(disable:4100)#pragma warning(disable:4018)#pragma warning(disable:4663)#pragma warning(disable:4146)#pragma warning(disable:4244)#pragma warning(disable:4786)#include <string>#pragma warning(pop)// preload <vector> and kill warnings#pragma warning(push)#include <yvals.h> #pragma warning(disable:4018)#pragma warning(disable:4663)#pragma warning(disable:4786)#include <vector>#pragma warning(pop)// preload <map> and kill warnings#pragma warning(push)#include <yvals.h> #pragma warning(disable:4018)#pragma warning(disable:4663)#pragma warning(disable:4786)#include <map>#pragma warning(pop)// preload <utility> and kill warnings#pragma warning(push)#include <yvals.h> #pragma warning(disable:4786)#include <utility>#pragma warning(pop)// preload <iterator> and kill warnings#pragma warning(push)#include <yvals.h> #pragma warning(disable:4786)#include <iterator>#pragma warning(pop)// preload <algorithm> and kill warnings#include <algorithm>// preload <queue> and kill warnings#pragma warning(push)#include <yvals.h> #pragma warning(disable:4284)#include <queue>#pragma warning(pop)// VS.net won't work without this :(#if _MSC_VER>=1300using namespace std;#endif#pragma warning(disable:4786)///////////////////////////////////////////////////////////////////////////////// Fill in common declarations//#include "../../contain.h"#endif // _OBJECT_H// End Of File ///////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -