summaryrefslogtreecommitdiffstats
path: root/sw/inc/index.hxx
diff options
context:
space:
mode:
authorJens-Heiner Rechtien <hr@openoffice.org>2000-09-18 16:15:01 +0000
committerJens-Heiner Rechtien <hr@openoffice.org>2000-09-18 16:15:01 +0000
commit7b0b5cdfeed656b279bc32cd929630d5fc25878b (patch)
tree5b89fb8497d7329d26c43f109bb014c54ffb0e8c /sw/inc/index.hxx
parentinitial import (diff)
downloadcore-7b0b5cdfeed656b279bc32cd929630d5fc25878b.tar.gz
core-7b0b5cdfeed656b279bc32cd929630d5fc25878b.zip
initial import
Diffstat (limited to 'sw/inc/index.hxx')
-rw-r--r--sw/inc/index.hxx318
1 files changed, 318 insertions, 0 deletions
diff --git a/sw/inc/index.hxx b/sw/inc/index.hxx
new file mode 100644
index 000000000000..ec1cff8f1b66
--- /dev/null
+++ b/sw/inc/index.hxx
@@ -0,0 +1,318 @@
+/*************************************************************************
+ *
+ * $RCSfile: index.hxx,v $
+ *
+ * $Revision: 1.1.1.1 $
+ *
+ * last change: $Author: hr $ $Date: 2000-09-18 17:14:26 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (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.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+#ifndef _INDEX_HXX
+#define _INDEX_HXX
+
+#include <limits.h>
+
+#ifndef _SOLAR_H
+#include <tools/solar.h>
+#endif
+
+#ifndef _RTTI_HXX
+#include <tools/rtti.hxx> // for RTTI of SwIndexReg
+#endif
+#ifndef _STRING_HXX
+#include <tools/string.hxx> // for xub_StrLen
+#endif
+
+#define INVALID_INDEX STRING_NOTFOUND
+
+// Maximale Anzahl von Indizies im IndexArray (zum Abtesten auf Ueberlaeufe)
+class SwIndex;
+class SwIndexReg;
+
+#ifdef PRODUCT
+#define INLINE inline
+#else
+#define INLINE
+#endif
+
+class SwIndex
+{
+ friend class SwIndexReg;
+
+#ifndef PRODUCT
+ static int nSerial;
+ int MySerial;
+#endif
+
+ xub_StrLen nIndex;
+ SwIndexReg* pArray;
+ SwIndex *pNext, *pPrev;
+
+ SwIndex& ChgValue( const SwIndex& rIdx, xub_StrLen nNewValue );
+ void Remove(); // Ausketten
+
+public:
+ SwIndex( SwIndexReg * pReg, xub_StrLen nIdx = 0 );
+ SwIndex( const SwIndex & );
+ SwIndex( const SwIndex &, short nDiff );
+ ~SwIndex() { Remove(); }
+
+ INLINE xub_StrLen operator++();
+ INLINE xub_StrLen operator--();
+#ifndef CFRONT
+ INLINE xub_StrLen operator++(int);
+ INLINE xub_StrLen operator--(int);
+#endif
+
+ INLINE xub_StrLen operator+=( xub_StrLen );
+ INLINE xub_StrLen operator-=( xub_StrLen );
+ INLINE xub_StrLen operator+=( const SwIndex& );
+ INLINE xub_StrLen operator-=( const SwIndex& );
+
+ INLINE BOOL operator<( const SwIndex& ) const;
+ INLINE BOOL operator<=( const SwIndex& ) const;
+ INLINE BOOL operator>( const SwIndex& ) const;
+ INLINE BOOL operator>=( const SwIndex& ) const;
+ BOOL operator==( const SwIndex& rSwIndex ) const
+ { return (nIndex == rSwIndex.nIndex) && (pArray == rSwIndex.pArray); }
+
+ BOOL operator!=( const SwIndex& rSwIndex ) const
+ { return (nIndex != rSwIndex.nIndex) || (pArray != rSwIndex.pArray); }
+
+ BOOL operator<( xub_StrLen nWert ) const { return nIndex < nWert; }
+ BOOL operator<=( xub_StrLen nWert ) const { return nIndex <= nWert; }
+ BOOL operator>( xub_StrLen nWert ) const { return nIndex > nWert; }
+ BOOL operator>=( xub_StrLen nWert ) const { return nIndex >= nWert; }
+ BOOL operator==( xub_StrLen nWert ) const { return nIndex == nWert; }
+ BOOL operator!=( xub_StrLen nWert ) const { return nIndex != nWert; }
+
+ INLINE SwIndex& operator=( xub_StrLen );
+ SwIndex& operator=( const SwIndex & );
+
+ // gebe den Wert vom Index als xub_StrLen zurueck
+ xub_StrLen GetIndex() const { return nIndex; }
+
+ // ermoeglicht Zuweisungen ohne Erzeugen eines temporaeren
+ // Objektes
+ SwIndex &Assign(SwIndexReg *,xub_StrLen);
+
+ // Herausgabe des Pointers auf das IndexArray,
+ // (fuers RTTI am SwIndexReg)
+ const SwIndexReg* GetIdxReg() const { return pArray; }
+};
+
+#undef INLINE
+
+class SwIndexReg
+{
+ friend class SwIndex;
+ const SwIndex *pFirst, *pLast, *pMiddle;
+
+ // ein globales Array, in das Indizies verschoben werden, die mal
+ // temporaer "ausgelagert" werden muessen; oder die zum Zeitpunkt des
+ // anlegens kein gueltiges Array kennen (SwPaM/SwPosition!)
+ friend void _InitCore();
+ friend void _FinitCore();
+ static SwIndexReg* pEmptyIndexArray;
+
+protected:
+ virtual void Update( const SwIndex & aPos, xub_StrLen nLen,
+ BOOL bNegativ = FALSE );
+
+ void ChkArr();
+
+ BOOL HasAnyIndex() const { return 0 != pFirst; }
+
+ // fuer das Move am RegArray:
+ void MoveIdx( const SwIndex& rOldPos, const SwIndex& rNewPos );
+
+public:
+ SwIndexReg();
+#ifndef PRODUCT
+ ~SwIndexReg();
+#endif
+
+ // rtti, abgeleitete moegens gleichtun oder nicht. Wenn sie es gleichtun
+ // kann ueber das SwIndexReg typsicher gecastet werden.
+ TYPEINFO();
+
+ void SetDefMiddle( const SwIndex* pIdx ) { pMiddle = pIdx; }
+ void MoveTo( SwIndexReg& rArr );
+};
+
+
+#ifdef PRODUCT
+
+inline xub_StrLen SwIndex::operator++()
+{
+ return ChgValue( *this, nIndex+1 ).nIndex;
+}
+inline xub_StrLen SwIndex::operator--()
+{
+ return ChgValue( *this, nIndex-1 ).nIndex;
+}
+#ifndef CFRONT
+inline xub_StrLen SwIndex::operator++(int)
+{
+ xub_StrLen nOldIndex = nIndex;
+ ChgValue( *this, nIndex+1 );
+ return nOldIndex;
+}
+inline xub_StrLen SwIndex::operator--(int)
+{
+ xub_StrLen nOldIndex = nIndex;
+ ChgValue( *this, nIndex-1 );
+ return nOldIndex;
+}
+#endif
+
+inline xub_StrLen SwIndex::operator+=( xub_StrLen nWert )
+{
+ return ChgValue( *this, nIndex + nWert ).nIndex;
+}
+inline xub_StrLen SwIndex::operator-=( xub_StrLen nWert )
+{
+ return ChgValue( *this, nIndex - nWert ).nIndex;
+}
+inline xub_StrLen SwIndex::operator+=( const SwIndex& rIndex )
+{
+ return ChgValue( *this, nIndex + rIndex.nIndex ).nIndex;
+}
+inline xub_StrLen SwIndex::operator-=( const SwIndex& rIndex )
+{
+ return ChgValue( *this, nIndex - rIndex.nIndex ).nIndex;
+}
+
+inline BOOL SwIndex::operator<( const SwIndex& rIndex ) const
+{
+ return nIndex < rIndex.nIndex;
+}
+inline BOOL SwIndex::operator<=( const SwIndex& rIndex ) const
+{
+ return nIndex <= rIndex.nIndex;
+}
+inline BOOL SwIndex::operator>( const SwIndex& rIndex ) const
+{
+ return nIndex > rIndex.nIndex;
+}
+inline BOOL SwIndex::operator>=( const SwIndex& rIndex ) const
+{
+ return nIndex >= rIndex.nIndex;
+}
+inline SwIndex& SwIndex::operator=( xub_StrLen nWert )
+{
+ if( nIndex != nWert )
+ ChgValue( *this, nWert );
+ return *this;
+}
+
+// PRODUCT
+#endif
+
+
+/******************************************************************
+
+ Source Code Control System - Header
+
+ $Header: /zpool/svn/migration/cvs_rep_09_09_08/code/sw/inc/index.hxx,v 1.1.1.1 2000-09-18 17:14:26 hr Exp $
+
+ Source Code Control System - Update
+
+ $Log: not supported by cvs2svn $
+ Revision 1.67 2000/09/18 16:03:22 willem.vandorp
+ OpenOffice header added.
+
+ Revision 1.66 2000/09/08 13:24:17 willem.vandorp
+ Header and footer replaced
+
+ Revision 1.65 2000/04/12 13:53:23 jp
+ Unicode changes
+
+ Revision 1.64 1999/02/25 08:20:48 JP
+ Task #62314#: Asynchrone DDE-Links/-Requests
+
+
+ Rev 1.63 25 Feb 1999 09:20:48 JP
+ Task #62314#: Asynchrone DDE-Links/-Requests
+
+ Rev 1.62 27 Nov 1997 09:20:28 JP
+ neu: SwIndexReg::MoveTo - move alle Indiezies aus einem Array ins andere
+
+ Rev 1.61 11 Nov 1997 20:36:48 JP
+ SwIndexReg CTOR/DTOR jetzt public
+
+ Rev 1.60 10 Oct 1997 14:03:20 JP
+ SwRange wird nicht mehr benoetigt
+
+ Rev 1.59 09 Oct 1997 15:11:50 JP
+ Umstellung NodeIndex/-Array/BigPtrArray
+
+ Rev 1.58 07 Aug 1997 14:41:26 OM
+ Headerfile-Umstellung
+
+ Rev 1.57 18 Jul 1997 12:21:20 MA
+ includes
+
+ Rev 1.56 08 Nov 1995 15:47:10 MA
+ opt: operatoren entfernt
+
+ Rev 1.55 25 Jun 1995 16:49:20 JP
+ Unter Windows nun auch den neuen Index
+
+ Rev 1.54 09 May 1995 08:44:28 KH
+ #ifdef MAC -> #ifdef CFRONT
+
+*******************************************************************/
+
+#endif