mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-05-01 10:26:12 +03:00
167 lines
6.3 KiB
Plaintext
Executable File
167 lines
6.3 KiB
Plaintext
Executable File
// Created on: 1992-09-24
|
|
// Created by: Mireille MERCIEN
|
|
// Copyright (c) 1992-1999 Matra Datavision
|
|
// Copyright (c) 1999-2012 OPEN CASCADE SAS
|
|
//
|
|
// The content of this file is subject to the Open CASCADE Technology Public
|
|
// License Version 6.5 (the "License"). You may not use the content of this file
|
|
// except in compliance with the License. Please obtain a copy of the License
|
|
// at http://www.opencascade.org and read it completely before using this file.
|
|
//
|
|
// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
|
|
// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
|
|
//
|
|
// The Original Code and all software distributed under the License is
|
|
// distributed on an "AS IS" basis, without warranty of any kind, and the
|
|
// Initial Developer hereby disclaims all such warranties, including without
|
|
// limitation, any warranties of merchantability, fitness for a particular
|
|
// purpose or non-infringement. Please see the License for the specific terms
|
|
// and conditions governing the rights and limitations under the License.
|
|
|
|
// ----------------------------------------------------------------------
|
|
// Updated: Remi Lequette,J.P. TIRAULT February,23 1995
|
|
// we added a basic class BaseSequence where all
|
|
// instantiations of Sequence inherit.
|
|
// ----------------------------------------------------------------------
|
|
|
|
static void delnode(TCollection_SeqNode* p)
|
|
{
|
|
TCollection_SequenceNode* q = (TCollection_SequenceNode*) p;
|
|
delete q;
|
|
}
|
|
|
|
// ----------------------------------
|
|
// Clear : Clear the Current Sequence
|
|
// ----------------------------------
|
|
void TCollection_Sequence::Clear()
|
|
{
|
|
TCollection_BaseSequence::Clear((void*)&delnode);
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : Assign
|
|
//purpose :
|
|
//=======================================================================
|
|
|
|
const TCollection_Sequence& TCollection_Sequence::Assign
|
|
(const TCollection_Sequence& Other)
|
|
{
|
|
if (this == &Other) return *this;
|
|
Clear();
|
|
TCollection_SequenceNode* current = (TCollection_SequenceNode*) Other.FirstItem;
|
|
TCollection_SequenceNode* previous = NULL;
|
|
TCollection_SequenceNode* newnode = NULL;
|
|
FirstItem = NULL;
|
|
while (current) {
|
|
newnode = new TCollection_SequenceNode(current->Value(),previous,(TCollection_SeqNode*)0L);
|
|
if (previous) previous->Next() = newnode;
|
|
else FirstItem = newnode;
|
|
current = (TCollection_SequenceNode *) current->Next();
|
|
previous = newnode;
|
|
}
|
|
LastItem = newnode;
|
|
Size = Other.Size;
|
|
CurrentItem = FirstItem;
|
|
CurrentIndex = 1;
|
|
return *this;
|
|
}
|
|
|
|
|
|
// -------------------------------------------------
|
|
// Append : Push an item at the end of the sequence
|
|
// -------------------------------------------------
|
|
void TCollection_Sequence::Append(const SeqItem& T)
|
|
{
|
|
TCollection_SequenceNode* newnode = new TCollection_SequenceNode(T,(TCollection_SeqNode*)LastItem,(TCollection_SeqNode*)0L);
|
|
PAppend ((void*)newnode);
|
|
}
|
|
|
|
|
|
// ---------------------------------------------------------
|
|
// Prepend : Push an element at the begining of the sequence
|
|
// ---------------------------------------------------------
|
|
void TCollection_Sequence::Prepend(const SeqItem& T)
|
|
{
|
|
TCollection_SequenceNode* newnode = new TCollection_SequenceNode(T,(TCollection_SeqNode*)0L,(TCollection_SequenceNode*)FirstItem);
|
|
PPrepend ((void*)newnode);
|
|
}
|
|
|
|
// -----------------------------------------------------------------
|
|
// InsertAfter : Insert an element after a given index in a sequence
|
|
// -----------------------------------------------------------------
|
|
void TCollection_Sequence::InsertAfter(const Standard_Integer Index,
|
|
const SeqItem& T)
|
|
{
|
|
Standard_OutOfRange_Raise_if ( Index < 0 || Index > Size, "");
|
|
TCollection_SequenceNode* newnode = new TCollection_SequenceNode(T,(TCollection_SeqNode*)0L,(TCollection_SeqNode*)0L);
|
|
PInsertAfter (Index,(void*)newnode);
|
|
}
|
|
|
|
// ---------------------------------------------------
|
|
// First : Returns the first element of the sequence
|
|
// Raises an exeption if the sequence is empty
|
|
// ----------------------------------------------------
|
|
const SeqItem& TCollection_Sequence::First() const
|
|
{
|
|
Standard_NoSuchObject_Raise_if(Size == 0,"");
|
|
return ((TCollection_SequenceNode*) FirstItem)->Value();
|
|
}
|
|
|
|
// ----------------------------------------------------
|
|
// Last : Returns the last element of the sequence
|
|
// Raises an exeption if the sequence is empty
|
|
// ----------------------------------------------------
|
|
const SeqItem& TCollection_Sequence::Last() const
|
|
{
|
|
Standard_NoSuchObject_Raise_if(Size == 0,"");
|
|
return ((TCollection_SequenceNode*) LastItem)->Value();
|
|
}
|
|
|
|
// -----------------------------------------
|
|
// Value : Return the value of a given index
|
|
// -----------------------------------------
|
|
const SeqItem& TCollection_Sequence::Value(const Standard_Integer Index) const
|
|
{
|
|
Standard_OutOfRange_Raise_if(Index <= 0 || Index > Size,"");
|
|
TCollection_Sequence* const aLocalTHIS = (TCollection_Sequence* const) this;
|
|
aLocalTHIS->CurrentItem = (TCollection_SequenceNode*) Find(Index);
|
|
aLocalTHIS->CurrentIndex = Index;
|
|
return ((TCollection_SequenceNode*)CurrentItem)->Value();
|
|
}
|
|
|
|
// -------------------------------------------------------
|
|
// ChangeValue : Return the modifiable value of a given index
|
|
// -------------------------------------------------------
|
|
SeqItem & TCollection_Sequence::ChangeValue(const Standard_Integer Index)
|
|
{
|
|
Standard_OutOfRange_Raise_if(Index <= 0 || Index > Size,"");
|
|
|
|
CurrentItem = (TCollection_SequenceNode*) Find(Index);
|
|
CurrentIndex = Index;
|
|
return ((TCollection_SequenceNode*)CurrentItem)->Value();
|
|
}
|
|
|
|
void TCollection_Sequence::Remove(const Standard_Integer Index)
|
|
{
|
|
TCollection_BaseSequence::Remove(Index,(void*)&delnode);
|
|
}
|
|
|
|
// ---------------------
|
|
// Remove a set of items
|
|
// ---------------------
|
|
void TCollection_Sequence::Remove(const Standard_Integer FromIndex, const Standard_Integer ToIndex)
|
|
{
|
|
TCollection_BaseSequence::Remove(FromIndex,ToIndex,(void*)&delnode);
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : SetValue
|
|
//purpose : Sets a value to an index
|
|
//=======================================================================
|
|
void TCollection_Sequence::SetValue (const Standard_Integer Index,
|
|
const SeqItem& I)
|
|
{
|
|
ChangeValue(Index) = I ;
|
|
}
|