ChangeTimeline.cc

Go to the documentation of this file.
00001 // $Id: ChangeTimeline.cc 114 2006-04-30 18:01:54Z bingmann $
00002 
00003 #include "ChangeTimeline.h"
00004 #include "Changelist.h"
00005 
00006 namespace VGServer {
00007 
00008 ChangeTimeline::ChangeTimeline(const class GraphData &_graph)
00009     : graph(_graph)
00010 {
00011     clstart = clend = new Changelist(graph);
00012 }
00013 
00014 ChangeTimeline::~ChangeTimeline()
00015 {
00016     if (clstart == clend)
00017     {
00018         delete clstart;
00019     }
00020     else
00021     {
00022         delete clstart;
00023         delete clend;
00024     }
00025 }
00026 
00027 void ChangeTimeline::clear()
00028 {
00029     if (clstart == clend)
00030     {
00031         clstart->clear();
00032         frames.clear();
00033     }
00034     else
00035     {
00036         delete clend;
00037         clstart->clear();
00038         frames.clear();
00039         clend = clstart;
00040     }
00041 }
00042 
00043 unsigned int ChangeTimeline::advanceTimeFrame()
00044 {
00045     if (getFrameCount() == 0)
00046     {
00047         // copy the changelist.
00048         clend = new Changelist(*clstart);
00049     }
00050 
00051     frames.push_back(ChangeFrame());
00052     return getFrameCount();
00053 }
00054 
00055 bool ChangeTimeline::addVertex(vertexid_t id)
00056 {
00057     if ( clend->addVertex(id) )
00058     {
00059         if (getFrameCount() > 0) frames.back().addVertex(id, clend->getVertexChange(id));
00060         return true;
00061     }
00062     return false;
00063 }
00064 
00065 bool ChangeTimeline::setVertexAttr(vertexid_t id, unsigned int attrid, const AnyType &value)
00066 {
00067     if ( clend->setVertexAttr(id, attrid, value) )
00068     {
00069         if (getFrameCount() > 0) frames.back().setVertexAttr(id, clend->getVertexChange(id));
00070         return true;
00071     }
00072     return false;
00073 }
00074 
00075 bool ChangeTimeline::delVertex(vertexid_t id)
00076 {
00077     if ( clend->delVertex(id) )
00078     {
00079         if (getFrameCount() > 0) frames.back().delVertex(id);
00080         return true;
00081     }
00082     return false;
00083 }
00084 
00085 bool ChangeTimeline::addEdge(vertexid_t src, vertexid_t tgt)
00086 {
00087     if ( clend->addEdge(src, tgt) )
00088     {
00089         if (getFrameCount() > 0) frames.back().addEdge(src, tgt, clend->getEdgeChange(src,tgt));
00090         return true;
00091     }
00092     return false;
00093 }
00094 
00095 bool ChangeTimeline::setEdgeAttr(vertexid_t src, vertexid_t tgt, unsigned int attrid, const AnyType &value)
00096 {
00097     if ( clend->setEdgeAttr(src, tgt, attrid, value) )
00098     {
00099         if (getFrameCount() > 0) frames.back().setEdgeAttr(src, tgt, clend->getEdgeChange(src,tgt));
00100         return true;
00101     }
00102     return false;
00103 }
00104 
00105 bool ChangeTimeline::delEdge(vertexid_t src, vertexid_t tgt)
00106 {
00107     if ( clend->delEdge(src, tgt) )
00108     {
00109         if (getFrameCount() > 0) frames.back().delEdge(src, tgt);
00110         return true;
00111     }
00112     return false;
00113 }
00114 
00115 // *** ChangeFrame
00116 
00117 void ChangeFrame::addVertex(vertexid_t id, const AttributeVertexTinyBlob &b)
00118 {
00119     chgoplist.push_back( ChangeEntry(CHG_ADDVERTEX, id, b) );
00120 }
00121 
00122 void ChangeFrame::setVertexAttr(vertexid_t id, const AttributeVertexTinyBlob &b)
00123 {
00124     chgoplist.push_back( ChangeEntry(CHG_SETVERTEX, id, b) );
00125 }
00126 
00127 void ChangeFrame::delVertex(vertexid_t id)
00128 {
00129     chgoplist.push_back( ChangeEntry(CHG_DELVERTEX, id, 0) );
00130 }
00131 
00132 void ChangeFrame::addEdge(vertexid_t src, vertexid_t tgt, const AttributeEdgeTinyBlob &b)
00133 {
00134     chgoplist.push_back( ChangeEntry(CHG_ADDEDGE, src, tgt, b) );
00135 }
00136 
00137 void ChangeFrame::setEdgeAttr(vertexid_t src, vertexid_t tgt, const AttributeEdgeTinyBlob &b)
00138 {
00139     chgoplist.push_back( ChangeEntry(CHG_SETEDGE, src, tgt, b) );
00140 }
00141 
00142 void ChangeFrame::delEdge(vertexid_t src, vertexid_t tgt)
00143 {
00144     chgoplist.push_back( ChangeEntry(CHG_DELEDGE, src, tgt) );
00145 }
00146 
00147 
00148 } // namespace VGServer

Generated on Wed Sep 27 14:34:00 2006 for VGServer by  doxygen 1.4.7