OSDN Git Service

Version browse in switch, export, new branch/tag and merge dialogs
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / RevisionGraph / FullGraph.cpp
1 // TortoiseSVN - a Windows shell extension for easy version control\r
2 \r
3 // Copyright (C) 2003-2008 - TortoiseSVN\r
4 \r
5 // This program is free software; you can redistribute it and/or\r
6 // modify it under the terms of the GNU General Public License\r
7 // as published by the Free Software Foundation; either version 2\r
8 // of the License, or (at your option) any later version.\r
9 \r
10 // This program is distributed in the hope that it will be useful,\r
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13 // GNU General Public License for more details.\r
14 \r
15 // You should have received a copy of the GNU General Public License\r
16 // along with this program; if not, write to the Free Software Foundation,\r
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
18 //\r
19 #include "StdAfx.h"\r
20 #include "FullGraph.h"\r
21 \r
22 // construction / destruction\r
23 \r
24 CFullGraph::CFullGraph()\r
25     : nodeFactory()\r
26     , root (NULL)\r
27     , nodeCount (0)\r
28 {\r
29 }\r
30 \r
31 CFullGraph::~CFullGraph()\r
32 {\r
33     if (root)\r
34         nodeFactory.Destroy (root);\r
35 }\r
36 \r
37 // modification\r
38 \r
39 CFullGraphNode* CFullGraph::Add ( const CDictionaryBasedTempPath& path\r
40                                 , revision_t revision\r
41                                 , CNodeClassification classification\r
42                                 , CFullGraphNode* source)\r
43 {\r
44     // (only) the first node must have no parent / prev node\r
45 \r
46     assert ((source == NULL) == (root == NULL));\r
47 \r
48     CFullGraphNode* result \r
49         = nodeFactory.Create (path, revision, classification, source);\r
50 \r
51     ++nodeCount;\r
52     if (root == NULL)\r
53         root = result;\r
54 \r
55     return result;\r
56 }\r
57 \r
58 void CFullGraph::Replace ( CFullGraphNode* toReplace\r
59                          , CFullGraphNode::CCopyTarget*& toMove\r
60                          , CNodeClassification newClassification)\r
61 {\r
62     // we support simple cases only\r
63 \r
64     assert (toReplace->GetPrevious() != NULL);\r
65     assert (toReplace->GetNext() == NULL);\r
66     assert (toReplace->GetFirstCopyTarget() == NULL);\r
67     assert (toMove->value() != NULL);\r
68 \r
69     // replace\r
70 \r
71     nodeFactory.Replace (toReplace, toMove, newClassification);\r
72 \r
73     --nodeCount;\r
74 }\r
75 \r
76 \r