xref: /AOO41X/main/connectivity/source/inc/dbase/dindexnode.hxx (revision caf5cd79edad04a48dcaf209068b3b89eae4622e)
1*caf5cd79SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*caf5cd79SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*caf5cd79SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*caf5cd79SAndrew Rist  * distributed with this work for additional information
6*caf5cd79SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*caf5cd79SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*caf5cd79SAndrew Rist  * "License"); you may not use this file except in compliance
9*caf5cd79SAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11*caf5cd79SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13*caf5cd79SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*caf5cd79SAndrew Rist  * software distributed under the License is distributed on an
15*caf5cd79SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*caf5cd79SAndrew Rist  * KIND, either express or implied.  See the License for the
17*caf5cd79SAndrew Rist  * specific language governing permissions and limitations
18*caf5cd79SAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20*caf5cd79SAndrew Rist  *************************************************************/
21*caf5cd79SAndrew Rist 
22*caf5cd79SAndrew Rist 
23cdf0e10cSrcweir #ifndef _CONNECTIVITY_DBASE_INDEXNODE_HXX_
24cdf0e10cSrcweir #define _CONNECTIVITY_DBASE_INDEXNODE_HXX_
25cdf0e10cSrcweir 
26cdf0e10cSrcweir #include "file/fcode.hxx"
27cdf0e10cSrcweir #include "file/FTable.hxx"
28cdf0e10cSrcweir #include "dbase/DIndexPage.hxx"
29cdf0e10cSrcweir #include "connectivity/FValue.hxx"
30cdf0e10cSrcweir #include <tools/ref.hxx>
31cdf0e10cSrcweir 
32cdf0e10cSrcweir #define NODE_NOTFOUND 0xFFFF
33cdf0e10cSrcweir #define PAGE_SIZE 512
34cdf0e10cSrcweir 
35cdf0e10cSrcweir namespace connectivity
36cdf0e10cSrcweir {
37cdf0e10cSrcweir 	namespace dbase
38cdf0e10cSrcweir 	{
39cdf0e10cSrcweir 
40cdf0e10cSrcweir 		class ONDXNode;
41cdf0e10cSrcweir 		class ODbaseIndex;
42cdf0e10cSrcweir 		//==================================================================
43cdf0e10cSrcweir 		// Index Key
44cdf0e10cSrcweir 		//==================================================================
45cdf0e10cSrcweir 		typedef file::OOperand ONDXKey_BASE;
46cdf0e10cSrcweir 		class ONDXKey : public ONDXKey_BASE
47cdf0e10cSrcweir 		{
48cdf0e10cSrcweir 			friend class ONDXNode;
49cdf0e10cSrcweir 			sal_uInt32			nRecord;				/* Satzzeiger				*/
50cdf0e10cSrcweir 			ORowSetValue	xValue;					/* Schluesselwert			*/
51cdf0e10cSrcweir 
52cdf0e10cSrcweir 		public:
53cdf0e10cSrcweir 			ONDXKey(sal_uInt32 nRec=0);
54cdf0e10cSrcweir 			ONDXKey(const ORowSetValue& rVal, sal_Int32 eType, sal_uInt32 nRec);
55cdf0e10cSrcweir 			ONDXKey(const rtl::OUString& aStr, sal_uInt32 nRec = 0);
56cdf0e10cSrcweir 			ONDXKey(double aVal, sal_uInt32 nRec = 0);
57cdf0e10cSrcweir 
58cdf0e10cSrcweir 			inline ONDXKey(const ONDXKey& rKey);
59cdf0e10cSrcweir 
60cdf0e10cSrcweir 			inline ONDXKey& operator= (const ONDXKey& rKey);
61cdf0e10cSrcweir 			virtual void setValue(const ORowSetValue& _rVal);
62cdf0e10cSrcweir 
63cdf0e10cSrcweir 			virtual const ORowSetValue& getValue() const;
64cdf0e10cSrcweir 
GetRecord() const65cdf0e10cSrcweir 			sal_uInt32 GetRecord() const		{ return nRecord;	}
setRecord(sal_uInt32 _nRec)66cdf0e10cSrcweir 			void setRecord(sal_uInt32 _nRec)	{ nRecord = _nRec;	}
ResetRecord()67cdf0e10cSrcweir 			void   ResetRecord()			{ nRecord = 0;		}
68cdf0e10cSrcweir 
69cdf0e10cSrcweir 			sal_Bool operator == (const ONDXKey& rKey) const;
70cdf0e10cSrcweir 			sal_Bool operator != (const ONDXKey& rKey) const;
71cdf0e10cSrcweir 			sal_Bool operator <	 (const ONDXKey& rKey) const;
72cdf0e10cSrcweir 			sal_Bool operator <= (const ONDXKey& rKey) const;
73cdf0e10cSrcweir 			sal_Bool operator >  (const ONDXKey& rKey) const;
74cdf0e10cSrcweir 			sal_Bool operator >= (const ONDXKey& rKey) const;
75cdf0e10cSrcweir 
76cdf0e10cSrcweir 			sal_Bool Load (SvFileStream& rStream, sal_Bool bText);
77cdf0e10cSrcweir 			sal_Bool Write(SvFileStream& rStream, sal_Bool bText);
78cdf0e10cSrcweir 
79cdf0e10cSrcweir 			static sal_Bool IsText(sal_Int32 eType);
80cdf0e10cSrcweir 
81cdf0e10cSrcweir 		private:
82cdf0e10cSrcweir 			StringCompare Compare(const ONDXKey& rKey) const;
83cdf0e10cSrcweir 		};
84cdf0e10cSrcweir 
85cdf0e10cSrcweir 
86cdf0e10cSrcweir 
87cdf0e10cSrcweir 
88cdf0e10cSrcweir 		//==================================================================
89cdf0e10cSrcweir 		// Index Seitenverweis
90cdf0e10cSrcweir 		//==================================================================
91cdf0e10cSrcweir 		SV_DECL_REF(ONDXPage) // Basisklasse da weitere Informationen gehalten werden muessen
92cdf0e10cSrcweir 
93cdf0e10cSrcweir 
94cdf0e10cSrcweir 		class ONDXPagePtr : public ONDXPageRef
95cdf0e10cSrcweir 		{
96cdf0e10cSrcweir 			friend  SvStream& operator << (SvStream &rStream, const ONDXPagePtr&);
97cdf0e10cSrcweir 			friend  SvStream& operator >> (SvStream &rStream, ONDXPagePtr&);
98cdf0e10cSrcweir 
99cdf0e10cSrcweir 			sal_uInt32	nPagePos;		// Position in der Indexdatei
100cdf0e10cSrcweir 
101cdf0e10cSrcweir 		public:
ONDXPagePtr(sal_uInt32 nPos=0)102cdf0e10cSrcweir 			ONDXPagePtr(sal_uInt32 nPos = 0):nPagePos(nPos){}
103cdf0e10cSrcweir 			ONDXPagePtr(const ONDXPagePtr& rRef);
104cdf0e10cSrcweir 			ONDXPagePtr(ONDXPage* pRefPage);
105cdf0e10cSrcweir 
106cdf0e10cSrcweir 			ONDXPagePtr& operator=(const ONDXPagePtr& rRef);
107cdf0e10cSrcweir 			ONDXPagePtr& operator=(ONDXPage* pPageRef);
108cdf0e10cSrcweir 
GetPagePos() const109cdf0e10cSrcweir 			sal_uInt32 GetPagePos() const {return nPagePos;}
HasPage() const110cdf0e10cSrcweir 			sal_Bool HasPage() const {return nPagePos != 0;}
111cdf0e10cSrcweir 			//	sal_Bool Is() const { return isValid(); }
112cdf0e10cSrcweir 		};
113cdf0e10cSrcweir 		//==================================================================
114cdf0e10cSrcweir 		// Index Seite
115cdf0e10cSrcweir 		//==================================================================
116cdf0e10cSrcweir 		class ONDXPage : public SvRefBase
117cdf0e10cSrcweir 		{
118cdf0e10cSrcweir 			friend class ODbaseIndex;
119cdf0e10cSrcweir 
120cdf0e10cSrcweir 			friend  SvStream& operator << (SvStream &rStream, const ONDXPage&);
121cdf0e10cSrcweir 			friend  SvStream& operator >> (SvStream &rStream, ONDXPage&);
122cdf0e10cSrcweir 
123cdf0e10cSrcweir 			sal_uInt32		nPagePos;				// Position in der Indexdatei
124cdf0e10cSrcweir 			sal_Bool		bModified : 1;
125cdf0e10cSrcweir 			sal_uInt16		nCount;
126cdf0e10cSrcweir 
127cdf0e10cSrcweir 			ONDXPagePtr	aParent,			// VaterSeite
128cdf0e10cSrcweir 						aChild;				// Zeiger auf rechte ChildPage
129cdf0e10cSrcweir 			ODbaseIndex& rIndex;
130cdf0e10cSrcweir 			ONDXNode*  ppNodes;				// array von Knoten
131cdf0e10cSrcweir 
132cdf0e10cSrcweir 		public:
133cdf0e10cSrcweir 			// Knoten Operationen
Count() const134cdf0e10cSrcweir 			sal_uInt16	Count() const {return nCount;}
135cdf0e10cSrcweir 
136cdf0e10cSrcweir 			sal_Bool	Insert(ONDXNode& rNode, sal_uInt32 nRowsLeft = 0);
137cdf0e10cSrcweir 			sal_Bool	Insert(sal_uInt16 nIndex, ONDXNode& rNode);
138cdf0e10cSrcweir 			sal_Bool	Append(ONDXNode& rNode);
139cdf0e10cSrcweir 			sal_Bool	Delete(sal_uInt16);
140cdf0e10cSrcweir 			void	Remove(sal_uInt16);
141cdf0e10cSrcweir 			void	Release(sal_Bool bSave = sal_True);
142cdf0e10cSrcweir 			void	ReleaseFull(sal_Bool bSave = sal_True);
143cdf0e10cSrcweir 
144cdf0e10cSrcweir 			// Aufteilen und Zerlegen
145cdf0e10cSrcweir 			ONDXNode Split(ONDXPage& rPage);
146cdf0e10cSrcweir 			void Merge(sal_uInt16 nParentNodePos, ONDXPagePtr xPage);
147cdf0e10cSrcweir 
148cdf0e10cSrcweir 			// Zugriffsoperationen
149cdf0e10cSrcweir 			ONDXNode& operator[] (sal_uInt16 nPos);
150cdf0e10cSrcweir 			const ONDXNode& operator[] (sal_uInt16 nPos) const;
151cdf0e10cSrcweir 
152cdf0e10cSrcweir 			sal_Bool IsRoot() const;
153cdf0e10cSrcweir 			sal_Bool IsLeaf() const;
154cdf0e10cSrcweir 			sal_Bool IsModified() const;
155cdf0e10cSrcweir 			sal_Bool HasParent();
156cdf0e10cSrcweir 			sal_Bool HasChild() const;
157cdf0e10cSrcweir 
158cdf0e10cSrcweir 			sal_Bool IsFull() const;
159cdf0e10cSrcweir 
GetPagePos() const160cdf0e10cSrcweir 			sal_uInt32 GetPagePos() const {return nPagePos;}
161cdf0e10cSrcweir 			ONDXPagePtr& GetChild(ODbaseIndex* pIndex = 0);
162cdf0e10cSrcweir 
163cdf0e10cSrcweir 			// Parent braucht nicht nachgeladen zu werden
164cdf0e10cSrcweir 			ONDXPagePtr GetParent();
GetIndex()165cdf0e10cSrcweir 			ODbaseIndex& GetIndex() {return rIndex;}
GetIndex() const166cdf0e10cSrcweir 			const ODbaseIndex& GetIndex() const {return rIndex;}
167cdf0e10cSrcweir 
168cdf0e10cSrcweir 			// Setzen des Childs, ueber Referenz, um die PagePos zu erhalten
169cdf0e10cSrcweir 			void SetChild(ONDXPagePtr aCh);
170cdf0e10cSrcweir 			void SetParent(ONDXPagePtr aPa);
171cdf0e10cSrcweir 
172cdf0e10cSrcweir 			sal_uInt16 Search(const ONDXKey& rSearch);
173cdf0e10cSrcweir 			sal_uInt16 Search(const ONDXPage* pPage);
174cdf0e10cSrcweir 			void   SearchAndReplace(const ONDXKey& rSearch, ONDXKey& rReplace);
175cdf0e10cSrcweir 
176cdf0e10cSrcweir 		protected:
177cdf0e10cSrcweir 			ONDXPage(ODbaseIndex& rIndex, sal_uInt32 nPos, ONDXPage* = NULL);
178cdf0e10cSrcweir 			~ONDXPage();
179cdf0e10cSrcweir 
180cdf0e10cSrcweir 			virtual void QueryDelete();
181cdf0e10cSrcweir 
SetModified(sal_Bool bMod)182cdf0e10cSrcweir 			void SetModified(sal_Bool bMod) {bModified = bMod;}
SetPagePos(sal_uInt32 nPage)183cdf0e10cSrcweir 			void SetPagePos(sal_uInt32 nPage) {nPagePos = nPage;}
184cdf0e10cSrcweir 
185cdf0e10cSrcweir 			sal_Bool Find(const ONDXKey&);	// rek. Abstieg
186cdf0e10cSrcweir 			sal_uInt16 FindPos(const ONDXKey& rKey) const;
187cdf0e10cSrcweir 
188cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1
189cdf0e10cSrcweir 			void PrintPage();
190cdf0e10cSrcweir #endif
191cdf0e10cSrcweir 		};
192cdf0e10cSrcweir 
193cdf0e10cSrcweir 		SV_IMPL_REF(ONDXPage);
194cdf0e10cSrcweir 
195cdf0e10cSrcweir 		SvStream& operator << (SvStream &rStream, const ONDXPagePtr&);
196cdf0e10cSrcweir 		SvStream& operator >> (SvStream &rStream, ONDXPagePtr&);
197cdf0e10cSrcweir 
IsRoot() const198cdf0e10cSrcweir 		inline sal_Bool ONDXPage::IsRoot() const {return !aParent.Is();}
IsLeaf() const199cdf0e10cSrcweir 		inline sal_Bool ONDXPage::IsLeaf() const {return !aChild.HasPage();}
IsModified() const200cdf0e10cSrcweir 		inline sal_Bool ONDXPage::IsModified() const {return bModified;}
HasParent()201cdf0e10cSrcweir 		inline sal_Bool ONDXPage::HasParent() {return aParent.Is();}
HasChild() const202cdf0e10cSrcweir 		inline sal_Bool ONDXPage::HasChild() const {return aChild.HasPage();}
GetParent()203cdf0e10cSrcweir 		inline ONDXPagePtr ONDXPage::GetParent() {return aParent;}
204cdf0e10cSrcweir 
SetParent(ONDXPagePtr aPa=ONDXPagePtr ())205cdf0e10cSrcweir 		inline void ONDXPage::SetParent(ONDXPagePtr aPa = ONDXPagePtr())
206cdf0e10cSrcweir 		{
207cdf0e10cSrcweir 			aParent = aPa;
208cdf0e10cSrcweir 		}
209cdf0e10cSrcweir 
SetChild(ONDXPagePtr aCh=ONDXPagePtr ())210cdf0e10cSrcweir 		inline void ONDXPage::SetChild(ONDXPagePtr aCh = ONDXPagePtr())
211cdf0e10cSrcweir 		{
212cdf0e10cSrcweir 			aChild = aCh;
213cdf0e10cSrcweir 			if (aChild.Is())
214cdf0e10cSrcweir 				aChild->SetParent(this);
215cdf0e10cSrcweir 		}
216cdf0e10cSrcweir 		SvStream& operator >> (SvStream &rStream, ONDXPage& rPage);
217cdf0e10cSrcweir 		SvStream& operator << (SvStream &rStream, const ONDXPage& rPage);
218cdf0e10cSrcweir 
219cdf0e10cSrcweir 
220cdf0e10cSrcweir 		typedef ::std::vector<ONDXPage*>	ONDXPageList;
221cdf0e10cSrcweir 
222cdf0e10cSrcweir 		//==================================================================
223cdf0e10cSrcweir 		// Index Knoten
224cdf0e10cSrcweir 		//==================================================================
225cdf0e10cSrcweir 		class ONDXNode
226cdf0e10cSrcweir 		{
227cdf0e10cSrcweir 			friend class ONDXPage;
228cdf0e10cSrcweir 			ONDXPagePtr aChild;				/* naechster Seitenverweis	*/
229cdf0e10cSrcweir 			ONDXKey	  aKey;
230cdf0e10cSrcweir 
231cdf0e10cSrcweir 		public:
ONDXNode()232cdf0e10cSrcweir 			ONDXNode(){}
ONDXNode(const ONDXKey & rKey,ONDXPagePtr aPagePtr=ONDXPagePtr ())233cdf0e10cSrcweir 			ONDXNode(const ONDXKey& rKey,
234cdf0e10cSrcweir 					   ONDXPagePtr aPagePtr = ONDXPagePtr())
235cdf0e10cSrcweir                        :aChild(aPagePtr),aKey(rKey) {}
236cdf0e10cSrcweir 
237cdf0e10cSrcweir 			// verweist der Knoten auf eine Seite
HasChild() const238cdf0e10cSrcweir 			sal_Bool			HasChild() const {return aChild.HasPage();}
239cdf0e10cSrcweir 			// Ist ein Index angegeben, kann gegebenfalls die Seite nachgeladen werden
240cdf0e10cSrcweir 			ONDXPagePtr&	GetChild(ODbaseIndex* pIndex = NULL, ONDXPage* = NULL);
241cdf0e10cSrcweir 
GetKey() const242cdf0e10cSrcweir 			const ONDXKey& GetKey() const	{ return aKey;}
GetKey()243cdf0e10cSrcweir 			ONDXKey&	   GetKey()			{ return aKey;}
244cdf0e10cSrcweir 
245cdf0e10cSrcweir 			// Setzen des Childs, ueber Referenz, um die PagePos zu erhalten
246cdf0e10cSrcweir 			void			SetChild(ONDXPagePtr aCh = ONDXPagePtr(), ONDXPage* = NULL);
SetKey(ONDXKey & rKey)247cdf0e10cSrcweir 			void			SetKey(ONDXKey& rKey) {aKey = rKey;}
248cdf0e10cSrcweir 
249cdf0e10cSrcweir 			void Write(SvStream &rStream, const ONDXPage& rPage) const;
250cdf0e10cSrcweir 			void Read(SvStream &rStream, ODbaseIndex&);
251cdf0e10cSrcweir 		};
252cdf0e10cSrcweir 		//==================================================================
253cdf0e10cSrcweir 		// inline implementation
254cdf0e10cSrcweir 		//==================================================================
255cdf0e10cSrcweir //		inline ONDXKey::ONDXKey(const ORowSetValue& rVal, sal_Int32 eType, sal_uInt32 nRec)
256cdf0e10cSrcweir //			: ONDXKey_BASE(eType)
257cdf0e10cSrcweir //			, nRecord(nRec),xValue(rVal)
258cdf0e10cSrcweir //		{
259cdf0e10cSrcweir //		}
260cdf0e10cSrcweir 
261cdf0e10cSrcweir 
262cdf0e10cSrcweir //		inline ONDXKey::ONDXKey(const rtl::OUString& aStr, sal_uInt32 nRec)
263cdf0e10cSrcweir //					: ONDXKey_BASE(::com::sun::star::sdbc::DataType::VARCHAR)
264cdf0e10cSrcweir //					 ,nRecord(nRec)
265cdf0e10cSrcweir //		{
266cdf0e10cSrcweir //			if (aStr.len())
267cdf0e10cSrcweir //				xValue = aStr;
268cdf0e10cSrcweir //		}
269cdf0e10cSrcweir 
270cdf0e10cSrcweir //		inline ONDXKey::ONDXKey(double aVal, sal_uInt32 nRec)
271cdf0e10cSrcweir //					 : ONDXKey_BASE(::com::sun::star::sdbc::DataType::DOUBLE)
272cdf0e10cSrcweir //					 ,nRecord(nRec)
273cdf0e10cSrcweir //					 ,xValue(aVal)
274cdf0e10cSrcweir //		{
275cdf0e10cSrcweir //		}
276cdf0e10cSrcweir 
277cdf0e10cSrcweir //		inline ONDXKey::ONDXKey(sal_uInt32 nRec)
278cdf0e10cSrcweir //					 :nRecord(nRec)
279cdf0e10cSrcweir //		{
280cdf0e10cSrcweir //		}
281cdf0e10cSrcweir 
ONDXKey(const ONDXKey & rKey)282cdf0e10cSrcweir 		inline ONDXKey::ONDXKey(const ONDXKey& rKey)
283cdf0e10cSrcweir 					 : ONDXKey_BASE(rKey.getDBType())
284cdf0e10cSrcweir 					 ,nRecord(rKey.nRecord)
285cdf0e10cSrcweir 					 ,xValue(rKey.xValue)
286cdf0e10cSrcweir 		{
287cdf0e10cSrcweir 		}
288cdf0e10cSrcweir 
operator =(const ONDXKey & rKey)289cdf0e10cSrcweir 		inline ONDXKey& ONDXKey::operator=(const ONDXKey& rKey)
290cdf0e10cSrcweir 		{
291cdf0e10cSrcweir 			if(&rKey == this)
292cdf0e10cSrcweir 				return *this;
293cdf0e10cSrcweir 
294cdf0e10cSrcweir 			xValue = rKey.xValue;
295cdf0e10cSrcweir 			nRecord = rKey.nRecord;
296cdf0e10cSrcweir 			m_eDBType = rKey.getDBType();
297cdf0e10cSrcweir 			return *this;
298cdf0e10cSrcweir 		}
299cdf0e10cSrcweir 
operator ==(const ONDXKey & rKey) const300cdf0e10cSrcweir 		inline sal_Bool ONDXKey::operator == (const ONDXKey& rKey) const
301cdf0e10cSrcweir 		{
302cdf0e10cSrcweir 			if(&rKey == this)
303cdf0e10cSrcweir 				return sal_True;
304cdf0e10cSrcweir 			return Compare(rKey) == COMPARE_EQUAL;
305cdf0e10cSrcweir 		}
operator !=(const ONDXKey & rKey) const306cdf0e10cSrcweir 		inline sal_Bool ONDXKey::operator != (const ONDXKey& rKey) const
307cdf0e10cSrcweir 		{
308cdf0e10cSrcweir 			return !operator== (rKey);
309cdf0e10cSrcweir 		}
operator <(const ONDXKey & rKey) const310cdf0e10cSrcweir 		inline sal_Bool ONDXKey::operator <  (const ONDXKey& rKey) const
311cdf0e10cSrcweir 		{
312cdf0e10cSrcweir 			return Compare(rKey) == COMPARE_LESS;
313cdf0e10cSrcweir 		}
operator >(const ONDXKey & rKey) const314cdf0e10cSrcweir 		inline sal_Bool ONDXKey::operator >  (const ONDXKey& rKey) const
315cdf0e10cSrcweir 		{
316cdf0e10cSrcweir 			return Compare(rKey) == COMPARE_GREATER;
317cdf0e10cSrcweir 		}
operator <=(const ONDXKey & rKey) const318cdf0e10cSrcweir 		inline sal_Bool ONDXKey::operator <= (const ONDXKey& rKey) const
319cdf0e10cSrcweir 		{
320cdf0e10cSrcweir 			return !operator > (rKey);
321cdf0e10cSrcweir 		}
operator >=(const ONDXKey & rKey) const322cdf0e10cSrcweir 		inline sal_Bool ONDXKey::operator >= (const ONDXKey& rKey) const
323cdf0e10cSrcweir 		{
324cdf0e10cSrcweir 			return !operator< (rKey);
325cdf0e10cSrcweir 		}
326cdf0e10cSrcweir 
SetChild(ONDXPagePtr aCh,ONDXPage * pParent)327cdf0e10cSrcweir 		inline void ONDXNode::SetChild(ONDXPagePtr aCh, ONDXPage* pParent)
328cdf0e10cSrcweir 		{
329cdf0e10cSrcweir 			aChild = aCh;
330cdf0e10cSrcweir 			if (aChild.Is())
331cdf0e10cSrcweir 				aChild->SetParent(pParent);
332cdf0e10cSrcweir 		}
333cdf0e10cSrcweir 
334cdf0e10cSrcweir 	}
335cdf0e10cSrcweir 
336cdf0e10cSrcweir }
337cdf0e10cSrcweir 
338cdf0e10cSrcweir 
339cdf0e10cSrcweir 
340cdf0e10cSrcweir 
341cdf0e10cSrcweir #endif // _CONNECTIVITY_DBASE_INDEXNODE_HXX_
342cdf0e10cSrcweir 
343cdf0e10cSrcweir 
344