ptlib.inl
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:5k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * ptlib.inl
  3.  *
  4.  * Non-GUI classes inline function implementation.
  5.  *
  6.  * Portable Windows Library
  7.  *
  8.  * Copyright (c) 1993-1998 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Portable Windows Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
  25.  * All Rights Reserved.
  26.  *
  27.  * Contributor(s): ______________________________________.
  28.  *
  29.  * $Log: ptlib.inl,v $
  30.  * Revision 1.20  1999/07/06 04:46:00  robertj
  31.  * Fixed being able to case an unsigned to a PTimeInterval.
  32.  * Improved resolution of PTimer::Tick() to be millisecond accurate.
  33.  *
  34.  * Revision 1.19  1998/11/30 03:02:17  robertj
  35.  * Moved PPipeChannel code to .cxx file to avoid linking unused code.
  36.  *
  37.  * Revision 1.18  1998/11/14 23:37:06  robertj
  38.  * Fixed file path directory extraction, not able to return root directory
  39.  *
  40.  * Revision 1.17  1998/09/24 03:30:19  robertj
  41.  * Added open software license.
  42.  *
  43.  * Revision 1.16  1996/08/20 12:10:36  robertj
  44.  * Fixed bug in timers wrapping unexpectedly and producing fast timeout.
  45.  *
  46.  * Revision 1.15  1996/07/20 05:32:26  robertj
  47.  * MSVC 4.1 compatibility.
  48.  *
  49.  * Revision 1.14  1996/05/15 10:23:25  robertj
  50.  * Changed millisecond access functions to get 64 bit integer.
  51.  *
  52.  * Revision 1.13  1996/03/31 09:08:23  robertj
  53.  * Added mutex to thread dictionary access.
  54.  *
  55.  * Revision 1.12  1996/03/04 12:38:56  robertj
  56.  * Moved calculation of stackTop to platform dependent code.
  57.  *
  58.  * Revision 1.11  1995/12/10 11:48:27  robertj
  59.  * Fixed bug in application shutdown of child threads.
  60.  *
  61.  * Revision 1.10  1995/04/22 00:52:55  robertj
  62.  * Added GetDirectory() function to PFilePath.
  63.  *
  64.  * Revision 1.9  1995/03/12 04:59:58  robertj
  65.  * Re-organisation of DOS/WIN16 and WIN32 platforms to maximise common code.
  66.  * Used built-in equate for WIN32 API (_WIN32).
  67.  *
  68.  * Revision 1.8  1994/12/21  11:55:09  robertj
  69.  * Fixed file paths returning correct string type.
  70.  *
  71.  * Revision 1.7  1994/10/23  05:38:57  robertj
  72.  * PipeChannel implementation.
  73.  * Added directory exists function.
  74.  *
  75.  * Revision 1.6  1994/08/22  00:18:02  robertj
  76.  * Renamed CheckBlock() to IsNoLongerBlocked()
  77.  *
  78.  * Revision 1.5  1994/07/27  06:00:10  robertj
  79.  * Backup
  80.  *
  81.  * Revision 1.4  1994/07/21  12:35:18  robertj
  82.  * *** empty log message ***
  83.  *
  84.  * Revision 1.3  1994/07/02  03:18:09  robertj
  85.  * Multi-threading support.
  86.  * Fixed bug in time intervals being signed.
  87.  *
  88.  * Revision 1.2  1994/06/25  12:13:01  robertj
  89.  * Synchronisation.
  90.  *
  91.  * Revision 1.1  1994/04/01  14:38:42  robertj
  92.  * Initial revision
  93.  */
  94. #include <direct.h>
  95. ///////////////////////////////////////////////////////////////////////////////
  96. // PTimer
  97. #if !defined(_WIN32)
  98. #if CLOCKS_PER_SEC==1000
  99. PINLINE PTimeInterval PTimer::Tick()
  100.   { return clock(); }
  101. PINLINE unsigned PTimer::Resolution()
  102.   { return 1; }
  103. #else
  104. PINLINE PTimeInterval PTimer::Tick()
  105.   { return (PInt64)clock()*CLOCKS_PER_SEC/1000; }
  106. PINLINE unsigned PTimer::Resolution()
  107.   { return 1000/CLOCKS_PER_SEC; }
  108. #endif
  109. #endif
  110. ///////////////////////////////////////////////////////////////////////////////
  111. // PDirectory
  112. PINLINE BOOL PDirectory::IsSeparator(char c)
  113.   { return c == ':' || c == '/' || c == '\'; }
  114. PINLINE BOOL PDirectory::Exists(const PString & p)
  115.   { return _access(p+".", 0) == 0; }
  116. PINLINE BOOL PDirectory::Create(const PString & p, int)
  117.   { return _mkdir(p) == 0; }
  118. PINLINE BOOL PDirectory::Remove(const PString & p)
  119.   { return _rmdir(p) == 0; }
  120. PINLINE BOOL PDirectory::Restart(int scanMask)
  121.   { return Open(scanMask); }
  122. ///////////////////////////////////////////////////////////////////////////////
  123. // PFile
  124. PINLINE BOOL PFile::Exists(const PFilePath & name)
  125.   { return _access(name, 0) == 0; }
  126. ///////////////////////////////////////////////////////////////////////////////
  127. // PThread
  128. #if defined(_WIN32)
  129. PINLINE void PThread::Sleep(const PTimeInterval & delay)
  130.   { ::Sleep(delay.GetInterval()); }
  131. #else
  132. PINLINE BOOL PThread::IsOnlyThread() const
  133.   { return link == this; }
  134. PINLINE void PThread::AllocateStack(PINDEX stackSize)
  135.   { stackTop = (stackBase = (char NEAR *)_nmalloc(stackSize)) + stackSize; }
  136. PINLINE void PThread::ClearBlock()
  137.   { isBlocked = NULL; }
  138. PINLINE BOOL PThread::IsNoLongerBlocked()
  139.   { return !isBlocked(blocker); }
  140. #endif
  141. // End Of File ///////////////////////////////////////////////////////////////