📄 contain.inl
字号:
/*
* contain.inl
*
* Container Class Inline Function Definitions
*
* 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.inl,v $
* Revision 1.54 2004/06/01 05:21:38 csoutheren
* Added conversions between std::string and PString, and vector<PString> and PStringArray
*
* Revision 1.53 2004/05/04 11:10:36 rjongbloed
* Fixed usage of MakeEmpty() with PStringStream.
*
* Revision 1.52 2004/04/24 06:27:56 rjongbloed
* Fixed GCC 3.4.0 warnings about PAssertNULL and improved recoverability on
* NULL pointer usage in various bits of code.
*
* Revision 1.51 2004/04/18 04:33:36 rjongbloed
* Changed all operators that return BOOL to return standard type bool. This is primarily
* for improved compatibility with std STL usage removing many warnings.
*
* Revision 1.50 2004/04/09 03:42:34 csoutheren
* Removed all usages of "virtual inline" and "inline virtual"
*
* Revision 1.49 2004/01/18 13:43:48 rjongbloed
* Fixed broken PString::MakeEmpty() function and moved implementations to .inl file.
*
* Revision 1.48 2002/10/31 05:52:37 robertj
* Now comprehensively stated that a PString is ALWAYS an 8 bit string as
* there are far too many inheerent assumptions every to make it 16 bit.
*
* Revision 1.47 2002/10/04 01:47:44 robertj
* Added various increment and decrement operators to POrdinalKey.
*
* Revision 1.46 2002/08/14 00:43:39 robertj
* Added ability to have fixed maximum length PStringStream's so does not do
* unwanted malloc()'s while outputing data.
*
* Revision 1.45 2002/02/15 04:29:49 robertj
* Added PString::Empty() to return the primordial empty string. Saves on a
* couple of memory allocations for every empty string ever used.
*
* Revision 1.44 2002/01/22 01:03:57 craigs
* Added operator += and operator + functions to PStringArray and PStringList
* Added AppendString operator to PStringArray
*
* Revision 1.43 2001/02/13 04:39:08 robertj
* Fixed problem with operator= in container classes. Some containers will
* break unless the copy is virtual (eg PStringStream's buffer pointers) so
* needed to add a new AssignContents() function to all containers.
*
* Revision 1.42 1999/08/22 12:13:42 robertj
* Fixed warning when using inlines on older GNU compiler
*
* Revision 1.41 1999/03/09 03:08:39 robertj
* Changes for new documentation system
*
* Revision 1.40 1998/09/23 06:20:25 robertj
* Added open source copyright license.
*
* Revision 1.39 1997/12/11 10:27:15 robertj
* Added type correct Contains() function to dictionaries.
*
* Revision 1.38 1997/02/14 13:53:58 robertj
* Major rewrite of sorted list to use sentinel record instead of NULL pointers.
*
* Revision 1.37 1996/09/14 12:54:18 robertj
* Added operator! for !IsEmpty().
*
* Revision 1.36 1996/07/15 10:32:49 robertj
* Fixed bug in sorted list (crash on remove).
*
* Revision 1.35 1996/02/08 11:47:57 robertj
* Moved Contains function from PSet to PHashTable so available for dictionaries.
* Added caseless compare operator and spaced concatenation operator.
*
* Revision 1.34 1996/01/23 13:10:45 robertj
* String searching algorithm rewrite.
* Added Replace() function to strings.
*
* Revision 1.33 1995/12/23 03:48:40 robertj
* Added operators for string set include and exclude.
*
* Revision 1.32 1995/08/24 12:34:09 robertj
* Added assert for list index out of bounds.
*
* Revision 1.31 1995/03/25 02:12:16 robertj
* Fixed PStringXXX containers so can correctly contain PCaselessString etc.
*
* Revision 1.30 1995/03/12 04:38:01 robertj
* Added assignment operator for const char * for efficiency.
*
* Revision 1.29 1995/01/09 12:36:28 robertj
* Changes due to Mac port.
*
* Revision 1.28 1994/12/12 13:13:12 robertj
* Fixed bugs in PString mods just made.
*
* Revision 1.27 1994/12/12 10:16:20 robertj
* Restructuring and documentation of container classes.
* Renaming of some macros for declaring container classes.
* Added some extra functionality to PString.
* Added start to 2 byte characters in PString.
* Fixed incorrect overrides in PCaselessString.
*
* Revision 1.26 1994/12/05 11:19:09 robertj
* Moved SetMinSize from PAbstractArray to PContainer.
*
* Revision 1.25 1994/11/28 12:33:46 robertj
* Added dummy parameter for cls* constructor in containers. This prevents some very
* strange an undesirable default construction of clones.
*
* Revision 1.24 1994/10/30 11:50:27 robertj
* Split into Object classes and Container classes.
* Changed mechanism for doing notification callback functions.
*
* Revision 1.23 1994/10/23 04:41:45 robertj
* Added implemtation for PString constructor used by Clone().
* Added PStringDictionary function.
*
* Revision 1.22 1994/07/27 05:58:07 robertj
* Synchronisation.
*
* Revision 1.21 1994/07/25 03:31:00 robertj
* Fixed missing PINLINEs.
*
* Revision 1.20 1994/07/17 10:46:06 robertj
* Added string container functions for searching.
*
* Revision 1.19 1994/07/02 03:03:49 robertj
* Addition of container searching facilities.
*
* Revision 1.18 1994/06/25 11:55:15 robertj
* Unix version synchronisation.
*
* Revision 1.17 1994/04/20 12:17:44 robertj
* assert stuff
*
* Revision 1.16 1994/04/01 14:05:46 robertj
* Added PString specific containers.
*
* Revision 1.15 1994/03/07 07:45:40 robertj
* Major upgrade
*
* Revision 1.14 1994/01/15 02:48:55 robertj
* Rearranged PString assignment operator for NT portability.
*
* Revision 1.13 1994/01/13 08:42:29 robertj
* Fixed missing copy constuctor and assignment operator for PString.
*
* Revision 1.12 1994/01/13 05:33:41 robertj
* Added contructor to get caseless string from ordinary string.
*
* Revision 1.11 1994/01/03 04:42:23 robertj
* Mass changes to common container classes and interactors etc etc etc.
*
* Revision 1.10 1993/12/31 06:48:46 robertj
* Made inlines optional for debugging purposes.
* Added PImgIcon class.
*
* Revision 1.9 1993/12/24 04:20:52 robertj
* Mac CFront port.
*
* Revision 1.8 1993/12/22 05:54:08 robertj
* Checked for severe out of memory condition in containers.
*
* Revision 1.7 1993/12/16 00:51:46 robertj
* Made some container functions const.
*
* Revision 1.6 1993/12/15 21:10:10 robertj
* Fixed reference system used by container classes.
*
* Revision 1.5 1993/08/27 18:17:47 robertj
* Fixed bugs in PSortedList default size.
*
* Revision 1.4 1993/07/16 14:40:55 robertj
* Added PString constructor for individual characters.
* Added string to C style literal format.
*
* Revision 1.3 1993/07/14 12:49:16 robertj
* Fixed RCS keywords.
*
*/
///////////////////////////////////////////////////////////////////////////////
PINLINE PContainer & PContainer::operator=(const PContainer & cont)
{ AssignContents(cont); return *this; }
PINLINE void PContainer::CloneContents(const PContainer *)
{ }
PINLINE void PContainer::CopyContents(const PContainer &)
{ }
PINLINE PINDEX PContainer::GetSize() const
{ return PAssertNULL(reference)->size; }
PINLINE BOOL PContainer::IsEmpty() const
{ return GetSize() == 0; }
PINLINE BOOL PContainer::IsUnique() const
{ return PAssertNULL(reference)->count <= 1; }
///////////////////////////////////////////////////////////////////////////////
PINLINE PString::PString()
: PCharArray(1) { }
PINLINE PString::PString(const PString & str)
: PCharArray(str) { }
PINLINE PString::PString(int, const PString * str)
: PCharArray(*str) { }
PINLINE PString::PString(const std::string & str)
: PCharArray(PString(str.c_str())) { }
PINLINE PString::PString(char c)
: PCharArray(2) { SetAt(0, c); }
PINLINE PString PString::Empty()
{ return PString(); }
PINLINE PString & PString::operator=(const PString & str)
{ AssignContents(str); return *this; }
PINLINE PString & PString::operator=(const char * cstr)
{ AssignContents(PString(cstr)); return *this; }
PINLINE PString & PString::operator=(char ch)
{ AssignContents(PString(ch)); return *this; }
PINLINE BOOL PString::MakeMinimumSize()
{ return SetSize(GetLength()+1); }
PINLINE PINDEX PString::GetLength() const
{ return strlen(theArray); }
PINLINE bool PString::operator!() const
{ return !IsEmpty(); }
PINLINE PString PString::operator+(const PString & str) const
{ return operator+((const char *)str); }
PINLINE PString operator+(const char * cstr, const PString & str)
{ return PString(cstr) + str; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -