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
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой 1.5.3 |