X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=frontsensitive.cs;h=b9fd103b8302bae40c160cb2b3432fac64ea462e;hb=ddaf242f412b3aedd301517435f1f05f27df7182;hp=587d9036d73c93a1ee5cda661d9f9d59295d5f9d;hpb=16e6144350b6cbf87ff05d95532135d02c489c5f;p=m17n%2Fm17n-lib-cs.git diff --git a/frontsensitive.cs b/frontsensitive.cs index 587d903..b9fd103 100644 --- a/frontsensitive.cs +++ b/frontsensitive.cs @@ -29,6 +29,10 @@ public class Test // If no property begings at positoin i, value[i] is undefined. static MSymbol[] value = new MSymbol[LENGTH]; + // Cut buffers + static int[] subprop = new int[LENGTH], subend = new int[LENGTH]; + static MSymbol[] subvalue = new MSymbol[LENGTH]; + static void TestPushProp (int from, int to, MProperty newprop) { Console.WriteLine ("from {0}, to {1}, push {2}.\n", from, to, newprop.Val); @@ -61,7 +65,6 @@ public class Test int i, n; - Console.WriteLine ("prop[from] = {0}", prop[from]); if (from > 0 && prop[from - 1] == prop[from] && prop[from] != -1) for (i = prop[from]; i < from; i++) prop[i] = -1; @@ -84,10 +87,7 @@ public class Test Console.WriteLine ("from {0}, to {1}, moveto {2}.\n", from, to, from2); int i, n, l = to - from; - int[] prop2 = new int[LENGTH], end2 = new int[LENGTH]; - MSymbol[] value2 = new MSymbol[LENGTH]; - DebugDump (0); // sensitivity for deletion if (from > 0 && prop[from] != -1) { @@ -103,73 +103,73 @@ public class Test prop[i] = -1; } - DebugDump (1); // copy for (i = from; i < to; i++) { if (prop[i] != -1) { - prop2[i - from] = prop[i] - from + from2; - end2[prop2[i - from]] = end[prop[i]] - from + from2; - value2[prop2[i - from]] = value[prop[i]]; + subprop[i - from] = prop[i] - from + from2; + subend[i - from] = end[i] - from + from2; + subvalue[i - from] = value[i]; } else - prop2[i - from] = -1; + subprop[i - from] = -1; } - DebugDump (2); // delete for (i = to; i < LENGTH; i++) { if (prop[i] != -1) { prop[i - l] = prop[i] - l; - end[prop[i - l]] = end[prop[i]] - l; - value[prop[i - l]] = value[prop[i]]; + end[i - l] = end[i] - l; + value[i - l] = value[i]; } else prop[i - l] = -1; } prop[LENGTH - l] = -1; - DebugDump (3); // sensitivity for insertion - if (from2 > 0 && prop[from2 - 1] == prop[from2] && prop[from2] != -1) + if (prop[from2] != -1) { n = end[prop[from2]]; - for (i = prop[from2 - 1] == prop[from2] ? prop[from2] : from2; - i < n; i++) + if (from2 > 0 && prop[from2 - 1] == prop[from2]) + i = prop[from2]; + else + i = from2; + for (; i < n; i++) prop[i] = -1; } + if (from2 > 0 && subprop[0] != -1) + for (i = 0; i < subend[0] - from2; i++) + subprop[i] = -1; - DebugDump (4); // move for (i = LENGTH - 1; i >= from2 + l; i--) { if (prop[i - l] != -1) { prop[i] = prop[i - l] + l; - end[prop[i]] = end[prop[i - l]] + l; - value[prop[i]] = value[prop[i - l]]; + end[i] = end[i - l] + l; + value[i] = value[i - l]; } else prop[i] = -1; } - DebugDump (5); // insert for (i = from2; i < from2 + l; i++) { - if (prop2[i - from2] != -1) + if (subprop[i - from2] != -1) { - prop[i] = prop2[i - from2]; - end[prop[i]] = end2[prop2[i - from2]]; - value[prop[i]] = value2[prop2[i - from2]]; + prop[i] = subprop[i - from2]; + end[i] = subend[i - from2]; + value[i] = subvalue[i - from2]; } else prop[i] = -1; } - DebugDump (6); MText mt2 = mt.Dup (); mt.Del (from, to); @@ -225,50 +225,6 @@ public class Test Console.Write ("\n"); } - static void DebugDump (int n) - { - /* - int i; - - Console.Write ("\n#{0}\n ", n); - for (i = 0; i <= LENGTH; i++) - Console.Write ("{0} ", i); - Console.Write ("\n----------------------\nP "); - for (i = 0; i < LENGTH; i++) - { - if (prop[i] != -1) - Console.Write ("{0} ", prop[i]); - else - Console.Write (" "); - } - Console.Write ("\nE "); - if (prop[0] != -1) - Console.Write ("{0} ", end[0]); - else - Console.Write (" "); - for (i = 1; i < LENGTH; i++) - { - if (prop[i - 1] != prop[i] && prop[i] != -1) - Console.Write ("{0} ", end[i]); - else - Console.Write (" "); - } - Console.Write ("\nV "); - if (prop[0] != -1) - Console.Write ("{0} ", value[0]); - else - Console.Write (" "); - for (i = 1; i < LENGTH; i++) - { - if (prop[i - 1] != prop[i] && prop[i] != -1) - Console.Write ("{0} ", value[i]); - else - Console.Write (" "); - } - Console.Write ("\n"); - */ - } - public static void Main (string[] args) { Random r = new Random (int.Parse (args[0]));