Добавил:
          
          
        
        
    
            Studfiles2
            
            
            
            
            
            Опубликованный материал нарушает ваши авторские права? Сообщите нам.
          
          Вуз:
          Предмет:
          Файл:Региональный поиск метод квадрантного дерева / src / CommonStructures
.cpp#include "stdafx.h"
#include "CommonStructures.h"
///////////////////////////////////////////////////////////
//Описание методов класса Point
///////////////////////////////////////////////////////////
//конструктор
Point::Point(POINTTYPE _x,POINTTYPE _y):
		x(_x),y(_y)
{
};
//индексное обращение к координате точки
POINTTYPE Point::operator[] (int i)
{
	if (i==0) return x;
		else 
			 return y;
}
//Операторы сравнения двух точек:
//на совпадение
int Point::operator== (Point &p)
{
	return (x==p.x) && (y==p.y);
}
//на несовпадение
int Point::operator!= (Point &p)
{
	return !(*this==p);
}
//операция "меньше"
int Point::operator< (Point &p)
{
	return ((x<p.x)||((x==p.x)&&(y<p.y)));
}
//операция "больше"
int Point::operator> (Point &p)
{
	return ((x>p.x)||((x==p.x)&&(y>p.y)));
}
Point Point::operator+(Point &p)
{
	return Point(x+p.x,y+p.y);
}
///////////////////////////////////////////////////////////
//Описание методов класса Rect
///////////////////////////////////////////////////////////
//конструктор
Rect::Rect(Point &_sw,Point &_ne):
		sw(_sw),ne(_ne)
{
};
//оператор преобразования
Rect::operator CRect()
{
	CRect rect((int)sw.x,(int)ne.y,(int)ne.x,(int)sw.y);
	return rect;
}
///////////////////////////////////////////////////////////
//Описание методов класса List
///////////////////////////////////////////////////////////
//конструктор
List::List(void):
	m_lenght(0)
{
	m_header=new ListNode(ELEMENT());
	m_current=m_header;
}
//конструктор копий
List::List(List &s):
	m_lenght(0)
{
	m_header=new ListNode(ELEMENT());
	for(s.First();!s.isHead();s.Next())
	{
		Append(ELEMENT(*s.Val()));
	};
}
//переопределение оператора присваивания
List& List::operator=(List &s)
{
	if (this==&s) return *this;
	while (Lenght()>0)
	{
		First();
		Remove();
	};
	delete m_header;
	m_header=new ListNode();
	for(s.First();!s.isHead();s.Next())
	{
		Append(ELEMENT(*s.Val()));
	};
	return *this;
}
//деструктор
List::~List(void)
{
	while (Lenght()>0) 
	{
	 First();
	 Remove();
	}
	delete m_header;
}
//оператор обращения к точке по индексу
ELEMENT List::operator[](int i)
{
	if ((i<0)||(i>Lenght())) return ELEMENT(0,0);
	First();
	for(int j=0;j<i;j++) Next();
	return *Val();
}
//вставка нового элемента
void List::Insert(ELEMENT& val)
{
	ListNode *tmp=new ListNode(val);
	m_current->Insert(tmp);
	++m_lenght;
}
//добавление нового элемента в конец списка
void List::Append(ELEMENT &val)
{
	m_header->Prev()->Insert(new ListNode(val));
	++m_lenght;
}
//добавление нового элемента в начало списка
void List::Prepend(ELEMENT& val)
{
	m_header->Insert(new ListNode(val));
	++m_lenght;
}
//удаление текущего элемента
void List::Remove(void)
{
	m_current=(ListNode*)m_current->Prev();
	delete (ListNode*)m_current->Next()->Remove();
	--m_lenght;
}
//инициализация текущего элемента списка
void List::Val(ELEMENT& val)
{
	if (m_current!=m_header)
	 m_current->m_val=val;
}
//получение значения текущего элемента списка
ELEMENT* List::Val(void)
{
	return &m_current->m_val;
}
//переход на следующий элемент списка
ELEMENT* List::Next(void)
{
	m_current=(ListNode*)m_current->Next();
	return &m_current->m_val;
}
//переход на предшествующий элемент списка
ELEMENT* List::Prev(void)
{
	m_current=(ListNode*)m_current->Prev();
	return &m_current->m_val;
}
//переход на первый элемент списка
ELEMENT* List::First(void)
{
	m_current=(ListNode*)m_header->Next();
	return &m_current->m_val;
}
//переход на последний элемент списка
ELEMENT* List::Last(void)
{
	m_current=(ListNode*)m_header->Prev();
	return &m_current->m_val;
}
//получение количества элементов в списке
int List::Lenght(void)
{
	return m_lenght;
}
//проверка: является ли текущий элемент списка первым
int List::isFirst(void)
{
	return ((m_current==m_header->Next())&&(m_lenght>0));
}
//проверка: является ли текущий элемент списка последним
int List::isLast(void)
{
	return ((m_current==m_header->Prev())&&(m_lenght>0));
}
//проверка: является ли текущий элемент списка головным
int List::isHead(void)
{
	return (m_current==m_header);
}
ListNode* List::GetCurrentNode()
{
	return m_current;
}
///////////////////////////////////////////////////////////
//Описание методов класса ListNode
///////////////////////////////////////////////////////////
//конструктор
ListNode::ListNode(ELEMENT& val):
	m_val(val),
	m_next(this),
	m_prev(this)
{
}
//деструктор
ListNode::~ListNode()
{
}
//переход на следующий элемент
ListNode* ListNode::Next(void)
{
	return m_next;
}
//переход на предшествующий элемент
ListNode* ListNode::Prev(void)
{
	return m_prev;
}
//вставка нового элемента
ListNode* ListNode::Insert(ListNode *Ins)
{
	ListNode *Tmp=m_next;
	Ins->m_prev=this;
	Ins->m_next=Tmp;
	m_next=Ins;
	Tmp->m_prev=Ins;
	return Tmp;
}
//удаление элемента
ListNode* ListNode::Remove(void)
{
	m_prev->m_next=m_next;
	m_next->m_prev=m_prev;
	m_next=m_prev=this;
	return this;
};
 
          Соседние файлы в папке src
          
      
    
    
    
          