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

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * contain.inl
  3.  *
  4.  * Container Class Inline Function Definitions
  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: contain.inl,v $
  30.  * Revision 1.42  1999/08/22 12:13:42  robertj
  31.  * Fixed warning when using inlines on older GNU compiler
  32.  *
  33.  * Revision 1.41  1999/03/09 03:08:39  robertj
  34.  * Changes for new documentation system
  35.  *
  36.  * Revision 1.40  1998/09/23 06:20:25  robertj
  37.  * Added open source copyright license.
  38.  *
  39.  * Revision 1.39  1997/12/11 10:27:15  robertj
  40.  * Added type correct Contains() function to dictionaries.
  41.  *
  42.  * Revision 1.38  1997/02/14 13:53:58  robertj
  43.  * Major rewrite of sorted list to use sentinel record instead of NULL pointers.
  44.  *
  45.  * Revision 1.37  1996/09/14 12:54:18  robertj
  46.  * Added operator! for !IsEmpty().
  47.  *
  48.  * Revision 1.36  1996/07/15 10:32:49  robertj
  49.  * Fixed bug in sorted list (crash on remove).
  50.  *
  51.  * Revision 1.35  1996/02/08 11:47:57  robertj
  52.  * Moved Contains function from PSet to PHashTable so available for dictionaries.
  53.  * Added caseless compare operator and spaced concatenation operator.
  54.  *
  55.  * Revision 1.34  1996/01/23 13:10:45  robertj
  56.  * String searching algorithm rewrite.
  57.  * Added Replace() function to strings.
  58.  *
  59.  * Revision 1.33  1995/12/23 03:48:40  robertj
  60.  * Added operators for string set include and exclude.
  61.  *
  62.  * Revision 1.32  1995/08/24 12:34:09  robertj
  63.  * Added assert for list index out of bounds.
  64.  *
  65.  * Revision 1.31  1995/03/25 02:12:16  robertj
  66.  * Fixed PStringXXX containers so can correctly contain PCaselessString etc.
  67.  *
  68.  * Revision 1.30  1995/03/12 04:38:01  robertj
  69.  * Added assignment operator for const char * for efficiency.
  70.  *
  71.  * Revision 1.29  1995/01/09  12:36:28  robertj
  72.  * Changes due to Mac port.
  73.  *
  74.  * Revision 1.28  1994/12/12  13:13:12  robertj
  75.  * Fixed bugs in PString mods just made.
  76.  *
  77.  * Revision 1.27  1994/12/12  10:16:20  robertj
  78.  * Restructuring and documentation of container classes.
  79.  * Renaming of some macros for declaring container classes.
  80.  * Added some extra functionality to PString.
  81.  * Added start to 2 byte characters in PString.
  82.  * Fixed incorrect overrides in PCaselessString.
  83.  *
  84.  * Revision 1.26  1994/12/05  11:19:09  robertj
  85.  * Moved SetMinSize from PAbstractArray to PContainer.
  86.  *
  87.  * Revision 1.25  1994/11/28  12:33:46  robertj
  88.  * Added dummy parameter for cls* constructor in containers. This prevents some very
  89.  * strange an undesirable default construction of clones.
  90.  *
  91.  * Revision 1.24  1994/10/30  11:50:27  robertj
  92.  * Split into Object classes and Container classes.
  93.  * Changed mechanism for doing notification callback functions.
  94.  *
  95.  * Revision 1.23  1994/10/23  04:41:45  robertj
  96.  * Added implemtation for PString constructor used by Clone().
  97.  * Added PStringDictionary function.
  98.  *
  99.  * Revision 1.22  1994/07/27  05:58:07  robertj
  100.  * Synchronisation.
  101.  *
  102.  * Revision 1.21  1994/07/25  03:31:00  robertj
  103.  * Fixed missing PINLINEs.
  104.  *
  105.  * Revision 1.20  1994/07/17  10:46:06  robertj
  106.  * Added string container functions for searching.
  107.  *
  108.  * Revision 1.19  1994/07/02  03:03:49  robertj
  109.  * Addition of container searching facilities.
  110.  *
  111.  * Revision 1.18  1994/06/25  11:55:15  robertj
  112.  * Unix version synchronisation.
  113.  *
  114.  * Revision 1.17  1994/04/20  12:17:44  robertj
  115.  * assert stuff
  116.  *
  117.  * Revision 1.16  1994/04/01  14:05:46  robertj
  118.  * Added PString specific containers.
  119.  *
  120.  * Revision 1.15  1994/03/07  07:45:40  robertj
  121.  * Major upgrade
  122.  *
  123.  * Revision 1.14  1994/01/15  02:48:55  robertj
  124.  * Rearranged PString assignment operator for NT portability.
  125.  *
  126.  * Revision 1.13  1994/01/13  08:42:29  robertj
  127.  * Fixed missing copy constuctor and assignment operator for PString.
  128.  *
  129.  * Revision 1.12  1994/01/13  05:33:41  robertj
  130.  * Added contructor to get caseless string from ordinary string.
  131.  *
  132.  * Revision 1.11  1994/01/03  04:42:23  robertj
  133.  * Mass changes to common container classes and interactors etc etc etc.
  134.  *
  135.  * Revision 1.10  1993/12/31  06:48:46  robertj
  136.  * Made inlines optional for debugging purposes.
  137.  * Added PImgIcon class.
  138.  *
  139.  * Revision 1.9  1993/12/24  04:20:52  robertj
  140.  * Mac CFront port.
  141.  *
  142.  * Revision 1.8  1993/12/22  05:54:08  robertj
  143.  * Checked for severe out of memory condition in containers.
  144.  *
  145.  * Revision 1.7  1993/12/16  00:51:46  robertj
  146.  * Made some container functions const.
  147.  *
  148.  * Revision 1.6  1993/12/15  21:10:10  robertj
  149.  * Fixed reference system used by container classes.
  150.  *
  151.  * Revision 1.5  1993/08/27  18:17:47  robertj
  152.  * Fixed bugs in PSortedList default size.
  153.  *
  154.  * Revision 1.4  1993/07/16  14:40:55  robertj
  155.  * Added PString constructor for individual characters.
  156.  * Added string to C style literal format.
  157.  *
  158.  * Revision 1.3  1993/07/14  12:49:16  robertj
  159.  * Fixed RCS keywords.
  160.  *
  161.  */
  162. ///////////////////////////////////////////////////////////////////////////////
  163. PINLINE PContainer::~PContainer()
  164.   { Destruct(); }
  165. PINLINE void PContainer::CloneContents(const PContainer *)
  166.   { }
  167. PINLINE void PContainer::CopyContents(const PContainer &)
  168.   { }
  169. PINLINE PINDEX PContainer::GetSize() const
  170.   { return PAssertNULL(reference)->size; }
  171. PINLINE BOOL PContainer::IsEmpty() const
  172.   { return GetSize() == 0; }
  173. PINLINE BOOL PContainer::IsUnique() const
  174.   { return PAssertNULL(reference)->count <= 1; }
  175. ///////////////////////////////////////////////////////////////////////////////
  176. PINLINE PString::PString()
  177.   : PCharArray(1) { }
  178. PINLINE PString::PString(const PString & str)
  179.   : PCharArray(str) { }
  180. PINLINE PString::PString(int, const PString * str)
  181.   : PSTRING_ANCESTOR_CLASS(*str) { }
  182. PINLINE PString::PString(char c)
  183.   : PCharArray(2) { SetAt(0, c); }
  184. PINLINE BOOL PString::MakeMinimumSize()
  185.   { return SetSize(GetLength()+1); }
  186. #ifndef PHAS_UNICODE
  187. PINLINE PINDEX PString::GetLength() const
  188.   { return strlen(theArray); }
  189. #endif
  190. PINLINE BOOL PString::operator!() const
  191.   { return !IsEmpty(); }
  192. PINLINE PString & PString::operator=(const PString & str)
  193.   { PCharArray::operator=(str); return *this; }
  194. PINLINE PString PString::operator+(const PString & str) const
  195.   { return operator+((const char *)str); }
  196. PINLINE PString operator+(const char * cstr, const PString & str)
  197.   { return PString(cstr) + str; }
  198.   
  199. PINLINE PString operator+(char c, const PString & str)
  200.   { return PString(c) + str; }
  201.   
  202. PINLINE PString & PString::operator+=(const PString & str)
  203.   { return operator+=((const char *)str); }
  204. PINLINE PString PString::operator&(const PString & str) const
  205.   { return operator&((const char *)str); }
  206. PINLINE PString operator&(const char * cstr, const PString & str)
  207.   { return PString(cstr) & str; }
  208.   
  209. PINLINE PString operator&(char c, const PString & str)
  210.   { return PString(c) & str; }
  211.   
  212. PINLINE PString & PString::operator&=(const PString & str)
  213.   { return operator&=((const char *)str); }
  214. PINLINE BOOL PString::operator==(const PObject & obj) const
  215.   { return PObject::operator==(obj); }
  216. PINLINE BOOL PString::operator!=(const PObject & obj) const
  217.   { return PObject::operator!=(obj); }
  218. PINLINE BOOL PString::operator<(const PObject & obj) const
  219.   { return PObject::operator<(obj); }
  220. PINLINE BOOL PString::operator>(const PObject & obj) const
  221.   { return PObject::operator>(obj); }
  222. PINLINE BOOL PString::operator<=(const PObject & obj) const
  223.   { return PObject::operator<=(obj); }
  224. PINLINE BOOL PString::operator>=(const PObject & obj) const
  225.   { return PObject::operator>=(obj); }
  226. PINLINE BOOL PString::operator*=(const PString & str) const
  227.   { return operator*=((const char *)str); }
  228. PINLINE BOOL PString::operator==(const char * cstr) const
  229.   { return InternalCompare(0, P_MAX_INDEX, cstr) == EqualTo; }
  230. PINLINE BOOL PString::operator!=(const char * cstr) const
  231.   { return InternalCompare(0, P_MAX_INDEX, cstr) != EqualTo; }
  232. PINLINE BOOL PString::operator<(const char * cstr) const
  233.   { return InternalCompare(0, P_MAX_INDEX, cstr) == LessThan; }
  234. PINLINE BOOL PString::operator>(const char * cstr) const
  235.   { return InternalCompare(0, P_MAX_INDEX, cstr) == GreaterThan; }
  236. PINLINE BOOL PString::operator<=(const char * cstr) const
  237.   { return InternalCompare(0, P_MAX_INDEX, cstr) != GreaterThan; }
  238. PINLINE BOOL PString::operator>=(const char * cstr) const
  239.   { return InternalCompare(0, P_MAX_INDEX, cstr) != LessThan; }
  240. PINLINE PINDEX PString::Find(const PString & str, PINDEX offset) const
  241.   { return Find((const char *)str, offset); }
  242. PINLINE PINDEX PString::FindLast(const PString & str, PINDEX offset) const
  243.   { return FindLast((const char *)str, offset); }
  244. PINLINE PINDEX PString::FindOneOf(const PString & str, PINDEX offset) const
  245.   { return FindOneOf((const char *)str, offset); }
  246. PINLINE void PString::Splice(const PString & str, PINDEX pos, PINDEX len)
  247.   { Splice((const char *)str, pos, len); }
  248. PINLINE PStringArray
  249.       PString::Tokenise(const PString & separators, BOOL onePerSeparator) const
  250.   { return Tokenise((const char *)separators, onePerSeparator); }
  251. PINLINE PString::operator const unsigned char *() const
  252.   { return (const unsigned char *)theArray; }
  253. PINLINE PString & PString::vsprintf(const PString & fmt, va_list args)
  254.   { return vsprintf((const char *)fmt, args); }
  255. PINLINE PString pvsprintf(const PString & fmt, va_list args)
  256.   { return pvsprintf((const char *)fmt, args); }
  257. ///////////////////////////////////////////////////////////////////////////////
  258. PINLINE PCaselessString::PCaselessString()
  259.   : PString() { }
  260. PINLINE PCaselessString::PCaselessString(const char * cstr)
  261.   : PString(cstr) { }
  262. PINLINE PCaselessString::PCaselessString(const PString & str)
  263.   : PString(str) { }
  264. PINLINE PCaselessString::PCaselessString(int dummy,const PCaselessString * str)
  265.   : PString(dummy, str) { }
  266. PINLINE PCaselessString & PCaselessString::operator=(const char * cstr)
  267.   { PString::operator=(cstr); return *this; }
  268. PINLINE PCaselessString & PCaselessString::operator=(const PString & str)
  269.   { PString::operator=(str); return *this; }
  270. ///////////////////////////////////////////////////////////////////////////////
  271. PINLINE PStringStream::Buffer::Buffer(PStringStream * str)
  272.   : string(PAssertNULL(str)) { sync(); }
  273. PINLINE PStringStream::Buffer::Buffer(const Buffer & b)
  274.   : string(b.string) { }
  275. PINLINE PStringStream::Buffer& PStringStream::Buffer::operator=(const Buffer&b)
  276.   { string = b.string; return *this; }
  277. ///////////////////////////////////////////////////////////////////////////////
  278. PINLINE PCollection::PCollection(PINDEX initialSize)
  279.   : PContainer(initialSize) { }
  280. PINLINE PCollection::PCollection(int dummy, const PCollection * c)
  281.   : PContainer(dummy, c) { }
  282. PINLINE void PCollection::AllowDeleteObjects(BOOL yes)
  283.   { reference->deleteObjects = yes; }
  284. PINLINE void PCollection::DisallowDeleteObjects()
  285.   { AllowDeleteObjects(FALSE); }
  286. ///////////////////////////////////////////////////////////////////////////////
  287. PINLINE PArrayObjects::PArrayObjects(PINDEX initialSize)
  288.   : theArray(PNEW ObjPtrArray(initialSize)) { }
  289. ///////////////////////////////////////////////////////////////////////////////
  290. PINLINE PINDEX PStringArray::GetStringsIndex(const PString & str) const
  291.   { return GetValuesIndex(str); }
  292. ///////////////////////////////////////////////////////////////////////////////
  293. PINLINE PAbstractList::PAbstractList()
  294.   : info(new Info) { PAssertNULL(info); }
  295. PINLINE PObject & PAbstractList::GetReferenceAt(PINDEX index) const
  296.   { PObject * obj = GetAt(index);
  297.                        PAssert(obj != NULL, PInvalidArrayIndex); return *obj; }
  298. ///////////////////////////////////////////////////////////////////////////////
  299. PINLINE PINDEX PStringList::AppendString(const PString & str)
  300.   { return Append(str.Clone()); }
  301. PINLINE PINDEX PStringList::InsertString(
  302.                                    const PString & before, const PString & str)
  303.   { return Insert(before, str.Clone()); }
  304. PINLINE PINDEX PStringList::GetStringsIndex(const PString & str) const
  305.   { return GetValuesIndex(str); }
  306. ///////////////////////////////////////////////////////////////////////////////
  307. PINLINE PINDEX PSortedStringList::AppendString(const PString & str)
  308.   { return Append(str.Clone()); }
  309. PINLINE PINDEX PSortedStringList::GetStringsIndex(const PString & str) const
  310.   { return GetValuesIndex(str); }
  311. ///////////////////////////////////////////////////////////////////////////////
  312. PINLINE POrdinalKey::POrdinalKey(PINDEX newKey)
  313.   : theKey(newKey) { }
  314. PINLINE POrdinalKey::operator PINDEX() const
  315.   { return theKey; }
  316. ///////////////////////////////////////////////////////////////////////////////
  317. PINLINE BOOL PHashTable::AbstractContains(const PObject & key) const
  318.   { return hashTable->GetElementAt(key) != NULL; }
  319. ///////////////////////////////////////////////////////////////////////////////
  320. PINLINE PAbstractSet::PAbstractSet()
  321.   { hashTable->deleteKeys = reference->deleteObjects; }
  322.   
  323. PINLINE void PStringSet::Include(const PString & str)
  324.   { PAbstractSet::Append(str.Clone()); }
  325. PINLINE PStringSet & PStringSet::operator+=(const PString & str)
  326.   { PAbstractSet::Append(str.Clone()); return *this; }
  327. PINLINE void PStringSet::Exclude(const PString & str)
  328.   { PAbstractSet::Remove(&str); }
  329. PINLINE PStringSet & PStringSet::operator-=(const PString & str)
  330.   { PAbstractSet::Remove(&str); return *this; }
  331. ///////////////////////////////////////////////////////////////////////////////
  332. PINLINE PAbstractDictionary::PAbstractDictionary()
  333.   { hashTable->deleteKeys = TRUE; }
  334.   
  335. PINLINE PAbstractDictionary::PAbstractDictionary(int dummy,
  336.                                                  const PAbstractDictionary * c)
  337.   : PHashTable(dummy, c) { }
  338. // End Of File ///////////////////////////////////////////////////////////////