diff defical-sharp/libsemtd/print.cs @ 0:ebed2bd0d300

Initial import from svn. History be damned.
author Edho P. Arief <me@myconan.net>
date Fri, 02 Apr 2010 23:11:57 +0700
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defical-sharp/libsemtd/print.cs	Fri Apr 02 23:11:57 2010 +0700
@@ -0,0 +1,221 @@
+namespace libsemtd
+{
+    public partial class Semtd
+    {
+        private string sep = " | ";
+        private string print(int mode)
+        {
+            return printBasic() + sep +
+                printMagicNum(mode) + sep +
+                printLabels(mode) + sep +
+                printDef(mode) + sep +
+                printMisc(mode);
+        }
+        private string printBasic()
+        {
+            string ret = "";
+            ret += "graph: " + this.graphType +
+                sep +
+                "edges: " + this.numEdges.ToString() +
+                sep +
+                "vertices: " + this.numVerMain.ToString() +
+                sep +
+                "deficiencies: " + this.numVerDef.ToString();
+            return ret;
+        }
+        private string printMagicNum(int mode)
+        {
+            string ret = "";
+            int edgeWeight, edgeLabel;
+            edgeLabel = edgeWeight = 0;
+            for (int i = 1; i <= this.labelEdgeAbsoluteMax; i++)
+            {
+                if (this.labelEdgesUsed[i] > 0)
+                {
+                    edgeWeight = i;
+                    edgeLabel = this.numEdges + this.numVerTotal;
+                    break;
+                }
+            }
+            if (mode == 1)
+            {
+                edgeWeight = 2 * (this.numVerTotal) + 2 - edgeWeight;
+                edgeLabel = 2 * this.numVerTotal + this.numEdges + 1 - edgeLabel;
+            }
+            ret += "mnum: " + (edgeWeight + edgeLabel).ToString();
+            return ret;
+        }
+        private string printLabels(int mode)
+        {
+            string ret = "";
+            int[] myLabelVer = new int[this.NumVerMain];
+            for (int i = 0; i < this.NumVerMain; i++)
+            {
+                if (mode == 1)
+                {
+                    myLabelVer[i] = this.numVerTotal + 1 - this.labelVer[i];
+                }
+                else
+                {
+                    myLabelVer[i] = this.labelVer[i];
+                }
+            }
+            if (this.graphType == "doublefan" && myLabelVer[0] > myLabelVer[1])
+            {
+                int temp = myLabelVer[0];
+                myLabelVer[0] = myLabelVer[1];
+                myLabelVer[1] = temp;
+            }
+            int startPath=0;
+            int endPath=0;
+            switch (graphType)
+            {
+                case "fan":
+                    {
+                        startPath = 1;
+                        endPath=this.numVerMain-1;
+                        break;
+                    }
+                case "doublefan":
+                case "wheel":
+                    {
+                        startPath = 2;
+                        endPath=this.numVerMain-1;
+                        break;
+                    }
+            }
+            if (startPath > 0 && myLabelVer[startPath] > myLabelVer[endPath])
+            {
+                int a = startPath, b = endPath;
+                while (a < b)
+                {
+                    int temp = myLabelVer[a];
+                    myLabelVer[a] = myLabelVer[b];
+                    myLabelVer[b] = temp;
+                    a++; b--;
+                }
+            }
+            for (int i = 0; i < this.numVerMain; i++)
+            {
+                int myLabel=myLabelVer[i];
+                if (i == 0)
+                    switch (graphType)
+                    {
+                        case "wheel":
+                            {
+                                ret += "c: " + myLabel.ToString()
+                                    + sep
+                                    + "l: ";
+                                break;
+                            }
+                        case "fan":
+                            {
+                                ret += "c: " + myLabel.ToString()
+                                    + sep
+                                    + "p: ";
+                                break;
+                            }
+                        case "doublefan":
+                            {
+                                ret += "c: " + myLabel.ToString() + ",";
+                                break;
+                            }
+                    }
+                else if (i == 1 && this.graphType == "doublefan")
+                {
+                    ret += myLabel.ToString()
+                        + sep
+                        + "p: ";
+                }
+                else if (i == this.numVerMain-1)
+                    ret += myLabel.ToString();
+                else
+                    ret += myLabel.ToString() + ",";
+            }
+            return ret;
+        }
+        private string printDef(int mode)
+        {
+            string ret = "";
+            if (this.numVerDef > 0)
+            {
+                ret += "def: ";
+                bool[] labelVerUsed = new bool[this.numVerTotal + 1];
+                for (int i = 0; i < this.numVerMain; i++)
+                    labelVerUsed[this.labelVer[i]] = true;
+                int amountDef = 0;
+                for (int i = 1; i <= this.numVerTotal; i++)
+                {
+                    int myDef;
+                    if (!labelVerUsed[i])
+                    {
+                        if (mode == 1)
+                            myDef = this.numVerTotal + 1 - i;
+                        else
+                            myDef = i;
+                        if (amountDef == this.numVerDef - 1)
+                        {
+                            ret += myDef.ToString();
+                            break;
+                        }
+                        else
+                        {
+                            ret += myDef.ToString() + ",";
+                            amountDef++;
+                        }
+                    }
+                }
+            }
+            return ret;
+        }
+        private string printMisc(int mode)
+        {
+            string ret = "";
+            if (this.graphType == "wheel" || this.graphType == "fan" || this.graphType == "doublefan")
+            {
+                int startPath, endPath;
+                startPath = 0;
+                switch (this.graphType)
+                {
+                    case "fan":
+                        {
+                            startPath = 1;
+                            break;
+                        }
+                    case "wheel":
+                    case "doublefan":
+                        {
+                            startPath = 2;
+                            break;
+                        }
+                }
+                endPath = this.numVerMain-1;
+                bool isConstant = true;
+                for (int i = startPath; i < endPath; i++)
+                {
+                    if (mode == 0)
+                    {
+                        if (this.labelVer[i] > this.labelVer[i + 1])
+                        {
+                            isConstant = false;
+                            break;
+                        }
+                    }
+                    else if (mode == 1)
+                    {
+                        if (this.labelVer[i] < this.labelVer[i + 1])
+                        {
+                            isConstant = false;
+                            break;
+                        }
+                    }
+                }
+                if (isConstant)
+                    ret += "constant";
+            }
+            if (mode == 1)
+                ret += "dual";
+            return ret;
+        }
+    }
+}
\ No newline at end of file