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

Set Class Reference

#include <Set.h>

List of all members.

Public Member Functions

 Set ()
 ~Set ()
void insert (InfoRecord *)
int find (InfoRecord *)
int remove (InfoRecord *)
void myRemove (listNode **n, InfoRecord *r)
InfoRecorditerator (Iterator *)
InfoRecordnext (Iterator *)
int numElements ()
void print ()


Constructor & Destructor Documentation

Set::Set  ) 
 

Copyright (c) 1995, 1996, 1997, 1998, 1999, 2000 by The Board of Trustees of the University of Illinois. All rights reserved.

Definition at line 11 of file Set.C.

00012 {
00013   head = (listNode *) 0;
00014 }

Set::~Set  ) 
 

Definition at line 16 of file Set.C.

References listNode::next.

00016           {
00017   // delete all links; don't delete the InfoRecord objects
00018   listNode *tmp;
00019   for (listNode *link = head; link; link = tmp) {
00020     tmp = link->next;
00021     delete link;
00022   }
00023 }


Member Function Documentation

int Set::find InfoRecord  ) 
 

Definition at line 73 of file Set.C.

References listNode::info, and listNode::next.

Referenced by Rebalancer::assign(), insert(), Rebalancer::isAvailableOn(), Rebalancer::numAvailable(), and Rebalancer::Rebalancer().

00074 {
00075   listNode *p = head;
00076   while (p) {
00077     if (p->info == r) return 1;
00078     else p = p->next;
00079   }
00080   return 0;
00081 }

void Set::insert InfoRecord  ) 
 

Definition at line 25 of file Set.C.

References find(), and listNode::next.

Referenced by Rebalancer::assign(), RefineTorusLB::newRefine(), Rebalancer::Rebalancer(), and Rebalancer::refine().

00026 {
00027   if (!find(info))
00028   {
00029     listNode *node = new listNode(info);
00030     node->next = head;
00031     head = node;
00032   }
00033    
00034 }

InfoRecord * Set::iterator Iterator  ) 
 

Definition at line 83 of file Set.C.

References listNode::info, listNode::next, and Iterator::next.

Referenced by Rebalancer::createSpanningTree(), Rebalancer::InitProxyUsage(), RefineTorusLB::newRefine(), Rebalancer::printLoads(), and Rebalancer::refine().

00084 {
00085   if (head){
00086     iter->next = head->next;
00087     return head->info;
00088   }
00089   return 0;
00090 }

void Set::myRemove listNode **  n,
InfoRecord r
 

Definition at line 37 of file Set.C.

References listNode::next.

00038 {
00039   if ((*n)->info == r)
00040     *n = (*n)->next;
00041   else 
00042     myRemove(&((*n)->next), r);
00043 }

InfoRecord * Set::next Iterator  ) 
 

Definition at line 92 of file Set.C.

References listNode::info, listNode::next, and Iterator::next.

Referenced by Rebalancer::createSpanningTree(), Rebalancer::InitProxyUsage(), RefineTorusLB::newRefine(), Rebalancer::printLoads(), and Rebalancer::refine().

00093 {
00094   //  std::cout << "set::next: " << iter->next << "\n";
00095   if (!iter->next)
00096     { return 0;
00097     }
00098   //  std::cout << "set::next: iter->next->info=" << iter->next->info << "\n";
00099   InfoRecord *temp = iter->next->info;
00100   iter->next = iter->next->next;
00101   return temp;
00102 }

int Set::numElements  ) 
 

Definition at line 105 of file Set.C.

References listNode::next.

Referenced by Rebalancer::InitProxyUsage(), Rebalancer::multirefine(), RefineTorusLB::newRefine(), Rebalancer::numAvailable(), Rebalancer::printLoads(), Rebalancer::printSummary(), and Rebalancer::refine().

00106 {
00107 int n;
00108   n = 0;
00109   listNode *p = head;
00110   while (p){
00111     n++;
00112     p = p->next;
00113   }
00114   return n;
00115 }

void Set::print  ) 
 

Definition at line 117 of file Set.C.

References InfoRecord::Id, listNode::info, iout, and listNode::next.

00118 {
00119   listNode *p = head;
00120   while (p){
00121     if ( p->info ) iout << p->info->Id << " ";
00122     else iout << "NULL ";
00123     p = p->next;
00124   }
00125 }

int Set::remove InfoRecord  ) 
 

Definition at line 45 of file Set.C.

References listNode::info, and listNode::next.

Referenced by Rebalancer::deAssign(), RefineTorusLB::newRefine(), and Rebalancer::refine().

00046 {
00047   if (!head)
00048     return 0;
00049 
00050   listNode *p = head;
00051   listNode *q = p->next;
00052 
00053   if (p->info == r){
00054     head = q;
00055     delete p;
00056     return 1;
00057   }
00058 
00059   while (q){
00060     if (q->info == r){
00061       p->next = q->next;
00062       delete q;
00063       return 1;
00064     }
00065     else {
00066       p = q;
00067       q = q->next;
00068     }
00069   }
00070   return 0;
00071 }


The documentation for this class was generated from the following files:
Generated on Tue Nov 24 04:07:51 2009 for NAMD by  doxygen 1.3.9.1