Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

wustl_mm::SkeletonMaker::GridQueue Class Reference

#include <grid_queue.h>

Collaboration diagram for wustl_mm::SkeletonMaker::GridQueue:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 GridQueue ()
gridQueueElegetHead ()
int getNumElements ()
void sort (int eles)
void pushQueue (int xx, int yy, int zz)
int popQueue (int &xx, int &yy, int &zz)

Private Member Functions

void swapEle (gridQueueEle *pre, gridQueueEle *e1, gridQueueEle *e2)

Private Attributes

gridQueueElehead
gridQueueEletail
int numEles

Constructor & Destructor Documentation

GridQueue::GridQueue  ) 
 

Definition at line 8 of file grid_queue.cpp.

References head, numEles, and tail.

00008                                       {
00009                         head = NULL ;
00010                         tail = NULL ;
00011                         numEles = 0 ;
00012                 }


Member Function Documentation

gridQueueEle * GridQueue::getHead  ) 
 

Definition at line 14 of file grid_queue.cpp.

00014                                                   {
00015                         return head ;
00016                 }

int GridQueue::getNumElements  ) 
 

Definition at line 18 of file grid_queue.cpp.

00018                                                {
00019                         return numEles ;
00020                 }

int GridQueue::popQueue int &  xx,
int &  yy,
int &  zz
 

Definition at line 88 of file grid_queue.cpp.

References head, wustl_mm::SkeletonMaker::gridQueueEle::next, numEles, tail, wustl_mm::SkeletonMaker::gridQueueEle::x, wustl_mm::SkeletonMaker::gridQueueEle::y, and wustl_mm::SkeletonMaker::gridQueueEle::z.

00088                                                                    {
00089                         if ( head == NULL )
00090                         {
00091                                 return 0 ;
00092                         }
00093 
00094                         xx = head->x ;
00095                         yy = head->y ;
00096                         zz = head->z ;
00097 
00098                         gridQueueEle* temp = head ;
00099                         head = head->next ;
00100                         delete temp ;
00101 
00102                         if ( head == NULL )
00103                         {
00104                                 tail = NULL ;
00105                         }
00106                         numEles -- ;
00107 
00108                         return 1 ;
00109                 }

void GridQueue::pushQueue int  xx,
int  yy,
int  zz
 

Definition at line 69 of file grid_queue.cpp.

References head, wustl_mm::SkeletonMaker::gridQueueEle::next, numEles, wustl_mm::SkeletonMaker::gridQueueEle::score, tail, wustl_mm::SkeletonMaker::gridQueueEle::x, wustl_mm::SkeletonMaker::gridQueueEle::y, and wustl_mm::SkeletonMaker::gridQueueEle::z.

00069                                                                   {
00070                         gridQueueEle* ele = new gridQueueEle ;
00071                         ele->x = xx ;
00072                         ele->y = yy ;
00073                         ele->z = zz ;
00074                         ele->score = 0 ;
00075                         ele->next = NULL ;
00076                         if ( head == NULL )
00077                         {
00078                                 head = ele ;
00079                         }
00080                         else
00081                         {
00082                                 tail->next = ele ;
00083                         }
00084                         tail = ele ;
00085                         numEles ++ ;
00086                 }

void GridQueue::sort int  eles  ) 
 

Definition at line 23 of file grid_queue.cpp.

References wustl_mm::SkeletonMaker::gridQueueEle::next, wustl_mm::SkeletonMaker::gridQueueEle::score, and swapEle().

00023                                                {
00024                         //printf("Sorting elements with descending scores...\n") ;
00025                         gridQueueEle* pre ;
00026                         gridQueueEle* e1 ;
00027                         gridQueueEle* e2 ;
00028 
00029                         for ( int i = eles - 1 ; i > 0 ; i -- )
00030                         {
00031                                 pre = NULL ;
00032                                 e1 = head ;
00033                                 e2 = e1->next ;
00034 
00035                                 for ( int j = 0 ; j < i ; j ++ )
00036                                 {
00037                                         if ( e1->score < e2->score )
00038                                         {
00039                                                 swapEle( pre, e1, e2 ) ;
00040                                         }
00041                                         else if ( e1->score == e2->score && rand() < RAND_MAX / 2)
00042                                         {
00043                                                 swapEle( pre, e1, e2 ) ;
00044                                         }
00045 
00046                                         if ( pre == NULL )
00047                                         {
00048                                                 pre = head ;
00049                                         }
00050                                         else
00051                                         {
00052                                                 pre = pre->next;
00053                                         }
00054                                         e1 = pre->next ;
00055                                         e2 = e1->next ;
00056                                 }
00057                         }
00058 
00059                         /* Debugging
00060                         pre = head ;
00061                         while ( pre != NULL )
00062                         {
00063                                 printf("%d ", pre->score ) ;
00064                                 pre = pre->next ;
00065                         }*/
00066                 }

void GridQueue::swapEle gridQueueEle pre,
gridQueueEle e1,
gridQueueEle e2
[private]
 

Definition at line 112 of file grid_queue.cpp.

References head, wustl_mm::SkeletonMaker::gridQueueEle::next, and tail.

Referenced by sort().

00113                 {
00114                         if ( pre != NULL )
00115                         {
00116                                 e1->next = e2->next ;
00117                                 e2->next = pre->next ;
00118                                 pre->next = e2 ;
00119 
00120                                 if ( tail == e2 )
00121                                 {
00122                                         tail = e1 ;
00123                                 }
00124                         }
00125                         else
00126                         {
00127                                 e1->next = e2->next ;
00128                                 e2->next = e1 ;
00129                                 head = e2 ;
00130 
00131                                 if ( tail == e2 )
00132                                 {
00133                                         tail = e1 ;
00134                                 }
00135                         }
00136                 }


Member Data Documentation

gridQueueEle* wustl_mm::SkeletonMaker::GridQueue::head [private]
 

Definition at line 35 of file grid_queue.h.

Referenced by GridQueue(), popQueue(), pushQueue(), and swapEle().

int wustl_mm::SkeletonMaker::GridQueue::numEles [private]
 

Definition at line 37 of file grid_queue.h.

Referenced by GridQueue(), popQueue(), and pushQueue().

gridQueueEle* wustl_mm::SkeletonMaker::GridQueue::tail [private]
 

Definition at line 36 of file grid_queue.h.

Referenced by GridQueue(), popQueue(), pushQueue(), and swapEle().


The documentation for this class was generated from the following files:
Generated on Tue Jun 11 13:49:55 2013 for EMAN2 by  doxygen 1.3.9.1