LinkedListItemBase.h

См. документацию.
00001 /*
00002  * CntmLib - Подсчет ссылок, потоки, синхронизация, асинхронные процедуры, события
00003  * Copyright (c) 2005, Овсеевич Роман, CntmLib@mail.ru
00004  * _______________________________________________________________________________
00005  * Разрешено свободное использование, копирование, распространение, изменение
00006  * (изменение сведений об авторских правах запрещено). Запрещена продажа и 
00007  * включение всей библиотеки или ее частей в другие библиотеки. В сведениях об
00008  * авторских правах на программу (или сведениях о программе, об авторах, 
00009  * использованных средствах разработки и т.д.) должна быть указана информация
00010  * о библиотеке CntmLib, ее авторе и, возможно, сайте или email'е.
00011  * Библиотека поставляется "как есть", без каких-либо гарантий со стороны автора.
00012  */ 
00013 
00014 #ifndef CNTM_LINKEDLISTITEMBASE_H
00015 #define CNTM_LINKEDLISTITEMBASE_H
00016 #include <boost/utility.hpp>
00017 #include <Cntm/Exceptions.h>
00018 
00019 namespace Cntm
00020 {
00021 
00022         /**
00023          * Базовый класс для эл-та двусвязанного списка. Содержит указатели на предыдущий и следующий эл-ты.
00024          *
00025          * Когда эл-т не включен ни в какой список или список состоит из 1 эл-та указатели на следующий и предыдущий эл-ты указывают на сам эл-т.
00026          * @author Овсеевич Р.
00027          */
00028         class LinkedListItemBase: public boost::noncopyable
00029         {
00030         public:
00031 
00032                 /**
00033                  * Конструктор. Начальное значение указателей NextItem() и PrevItem() - сам эл-т.
00034                  */
00035                 LinkedListItemBase() { nextItem = prevItem = this; }
00036 
00037                 /**
00038                  * Следующий эл-т.
00039                  */
00040                 LinkedListItemBase* NextItem() const { return nextItem; }
00041 
00042                 /**
00043                  * Предыдущий эл-т.
00044                  */
00045                 LinkedListItemBase* PrevItem() const { return prevItem; }
00046 
00047                 /**
00048                  * Возвращает true, если эл-т указывает сам на себя, то есть список состоит из одного этого эл-та.
00049                  */
00050                  bool IsSingle() const { return nextItem == this; }
00051                  
00052                 /**
00053                  * Вставить данный эл-т после указанного.
00054                  * 
00055                  * Исключение: NullArgException, если Item равен NULL.
00056                  * @param Item - эл-т, после которого будет вставлен данный.
00057                  */
00058                 void InsertAfter(LinkedListItemBase* Item)
00059                 {
00060                         if (Item == NULL) throw NullArgException("Cntm::LinkedListItemBase::InsertAfter");
00061                         Item->nextItem->prevItem = this;
00062                         nextItem = Item->nextItem;
00063                         Item->nextItem = this;
00064                         prevItem = Item;
00065                 }
00066 
00067                 /**
00068                  * Вставить данный эл-т перед указанным.
00069                  * 
00070                  * Исключение: NullArgException, если Item равен NULL.
00071                  * @param Item - эл-т, перед которым будет вставлен данный.
00072                  */
00073                 void InsertBefore(LinkedListItemBase* Item)
00074                 {
00075                         if (Item == NULL) throw NullArgException("Cntm::LinkedListItemBase::InsertBefore");
00076                         Item->prevItem->nextItem = this;
00077                         prevItem = Item->prevItem;
00078                         Item->prevItem = this;
00079                         nextItem = Item;
00080                 }
00081 
00082                 /**
00083                  * Удалить эл-т из списка. Указатели NextItem() и PrevItem() указывают на сам эл-т. 
00084                  */
00085                 void Remove()
00086                 {
00087                         prevItem->nextItem = nextItem;
00088                         nextItem->prevItem = prevItem;
00089                         nextItem = prevItem = this;
00090                 }
00091 
00092         private:
00093 
00094                 /**
00095                  * Следующий эл-т.
00096                  */
00097                 LinkedListItemBase* nextItem;
00098                 /**
00099                  * Предыдущий эл-т.
00100                  */
00101                 LinkedListItemBase* prevItem;
00102         };
00103 
00104 }
00105 
00106 #endif //CNTM_LINKEDLISTITEMBASE_H

SourceForge.net Logo
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой  doxygen 1.5.3