diff merger.tex @ 2:4742b1e4da3a default tip

modify merge, and remove eclipse, debug
author one
date Thu, 19 Feb 2009 01:26:01 +0900
parents 39af8ab46cbb
children
line wrap: on
line diff
--- a/merger.tex	Wed Feb 18 23:02:19 2009 +0900
+++ b/merger.tex	Thu Feb 19 01:26:01 2009 +0900
@@ -35,16 +35,39 @@
 しかしエディタには既に、それぞれのエディタ間で異なった順番でREPコマンドが反映されてしまっているので、エディタ側のテキストに対してUndoの処理を行う。
 これにより、それぞれのエディタは、編集前の状態に戻り、テキストは一致している状態である。
 その後、ソートされたREPコマンド列をテキストへ反映させ全てのテキストを一致させる。
-このUndoの処理のために蓄積されたREPコマンド列からUndoコマンドを生成する。
+
+Undoコマンドはエディタに蓄積されたREPコマンド列から生成する。
+まず、このコマンド列を逆順にし、次に、insertコマンドはdeleteコマンドに、deleteコマンドはinsertコマンドに変換する(図\ref{fig:undo_command})。
+この生成されたUndoコマンド列をテキストに反映させることでテキストの状態を編集前の状態に戻す。
+
+\begin{figure}[htpb]
+    \begin{center}
+	\includegraphics[scale=.3]{figure/undo_command.pdf}
+    \end{center}
+    \caption{Undoコマンドの生成}
+    \label{fig:undo_command}
+\end{figure}
+
+
+次に、行番号とエディタ番号によってREPコマンド列をソートする。これによってそれぞれのエディタ間でのコマンド列の順序が一致する(図\ref{fig:sort_command})。
+\begin{figure}[htpb]
+    \begin{center}
+	\includegraphics[scale=.3]{figure/sort_command.pdf}
+    \end{center}
+    \caption{コマンド列のソート}
+    \label{fig:sort_command}
+\end{figure}
+
+この、Undoコマンド列とソートコマンド列をそれぞれのエディタに反映することにより、テキストを一致させる。
+
+マージを開始するタイミングは、エディタ自身が発行したREPコマンドがSession Ringを巡回して戻ってきたときである。
+テキストへと編集が起こらずにコマンドを発行しなかった場合は、他のエディタから発行されるinsert\_ack、delete\_ackッコマンドを受け取った時にマージを開始する。
 
 
 \subsection{マージ処理のSession Managerへの移行}
 マージの処理はこれまで、エディタ側で実装されていたが、マージはREP共通の処理であるため、それぞれのテキストエディタへ個別に実装するよりは、Session Managerへ実装する方が望ましいと考えた。
-しかし、エディタとSession Managerとの間では非同期に通信を行っているため、マージコマンドとエディタコマンドとの間で衝突が起こってしまうことがある。マージ中にエディタからの割り込みがあった場合である。
-これを解決するため、マージコマンドとエディタコマンドとの間マージを行うリマージコマンドの生成を提案した(図\ref{fig:remerge})。
-
-リマージコマンドもマージコマンドと同様にUndoを行うが、コマンドのソートは行わずに、エディタからの割り込みのみを排除して、もう一度同様のマージコマンド列をテキストへ反映させる。
-その後、排除したエディタ割り込みコマンドをテキストへ反映させる。
+しかし、エディタとSession Managerとの間では非同期に通信を行っているため、マージコマンドとエディタコマンドとの間で衝突が起こってしまうことがある(図\ref{fig:remerge})。マージ中にエディタからの割り込みがあった場合である。
+これを解決するため、マージコマンドとエディタコマンドとの間マージを行うリマージコマンドの生成を提案した。%(図\ref{fig:remerge})。
 
 \begin{figure}[htpb]
     \begin{center}
@@ -53,3 +76,53 @@
     \caption{リマージ}
     \label{fig:remerge}
 \end{figure}
+
+%リマージコマンドもマージコマンドと同様にUndoを行うが、コマンドのソートは行わずに、エディタからの割り込みのみを排除して、もう一度同様のマージコマンド列をテキストへ反映させる。
+%その後、排除したエディタ割り込みコマンドをテキストへ反映させる。
+
+まず、コマンドの割り込みがあったかどうかをチェックするために、マージャが受け取ったこまんどを確認する(表\ref{tab:received_command})。
+この表では、マージコマンドをcomman1からcommand4とし、エディタからの割り込みコマンドをuser\_commandとしている。
+
+\begin{table}[htdp]
+\caption{received command}
+\begin{center}
+\begin{tabular}{|c|c|}
+\hline
+1 & command1 \\
+\hline
+2 & command2 \\
+\hline
+3 & user\_command \\
+\hline
+4 & command3 \\
+\hline
+5 & command4 \\
+\hline
+\end{tabular}
+\end{center}
+\label{tab:received_command}
+\end{table}
+
+これにより、3番目に割り込みがあったことがわかるので、5、4、3番目をUndoする。そして、command3、command4、をもう一度redoして最後にuser\_commandを反映する。
+
+\begin{table}[htdp]
+\caption{remerge command}
+\begin{center}
+\begin{tabular}{|c|c|}
+\hline
+1 & undo(command4) \\
+\hline
+2 & undo(command3) \\
+\hline
+3 & undo(user\_command) \\
+\hline
+4 & command3 \\
+\hline
+5 & command4 \\
+\hline
+6 & user\_command \\
+\hline
+\end{tabular}
+\end{center}
+\label{tab:remerge_command}
+\end{table}