OSDN Git Service

全置換えのアンドゥを高速化した
authorgdkhd812 <jbh03215@htmil.co.jp>
Mon, 23 Sep 2013 08:45:42 +0000 (17:45 +0900)
committergdkhd812 <jbh03215@htmil.co.jp>
Mon, 23 Sep 2013 08:45:42 +0000 (17:45 +0900)
Common/StringBuffer.cs
Common/UndoCommands.cs

index a29c867..e8758cf 100644 (file)
@@ -122,6 +122,20 @@ namespace FooEditEngine
 \r
         internal event DocumentUpdateEventHandler Update;\r
 \r
+        internal void Replace(StringBuffer buf)\r
+        {\r
+            this.Replace(buf.buf);\r
+        }\r
+\r
+        internal void Replace(GapBuffer<char> buf)\r
+        {\r
+            this.Clear();\r
+            this.rwLock.EnterWriteLock();\r
+            this.buf = buf;\r
+            this.rwLock.ExitWriteLock();\r
+            this.Update(this, new DocumentUpdateEventArgs(UpdateType.Replace, 0, 0, buf.Count));\r
+        }\r
+\r
         internal void Replace(int index, int length, IEnumerable<char> chars,int count)\r
         {\r
             this.rwLock.EnterWriteLock();\r
index f40582d..1236a1e 100644 (file)
@@ -109,9 +109,7 @@ namespace FooEditEngine
 
         public void undo()
         {
-            this.buffer.Clear();
-
-            this.buffer.Replace(0, 0, this.oldBuffer,this.oldBuffer.Length);
+            this.buffer.Replace(this.oldBuffer);
         }
 
         public void redo()
@@ -130,9 +128,7 @@ namespace FooEditEngine
                 result.AddRange(Util.GetEnumrator(output),output.Length);
             }
 
-            this.buffer.Clear();
-            
-            this.buffer.Replace(0, 0, result,result.Count);
+            this.buffer.Replace(result);
         }
 
         public bool marge(ICommand a)