comparison 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
comparison
equal deleted inserted replaced
1:78a12584e841 2:4742b1e4da3a
33 それぞれのエディタに蓄積されたREPコマンド列は順番が異なる。図\ref{fig:new_merge}を例に見ると、Editor1ではeid=1,3,2の順に蓄積されているが、Editor2ではeid=2,1,3の順番である。 33 それぞれのエディタに蓄積されたREPコマンド列は順番が異なる。図\ref{fig:new_merge}を例に見ると、Editor1ではeid=1,3,2の順に蓄積されているが、Editor2ではeid=2,1,3の順番である。
34 これをソートして順番を一致させてエディタへ反映すれば編集結果を一致させることができる。 34 これをソートして順番を一致させてエディタへ反映すれば編集結果を一致させることができる。
35 しかしエディタには既に、それぞれのエディタ間で異なった順番でREPコマンドが反映されてしまっているので、エディタ側のテキストに対してUndoの処理を行う。 35 しかしエディタには既に、それぞれのエディタ間で異なった順番でREPコマンドが反映されてしまっているので、エディタ側のテキストに対してUndoの処理を行う。
36 これにより、それぞれのエディタは、編集前の状態に戻り、テキストは一致している状態である。 36 これにより、それぞれのエディタは、編集前の状態に戻り、テキストは一致している状態である。
37 その後、ソートされたREPコマンド列をテキストへ反映させ全てのテキストを一致させる。 37 その後、ソートされたREPコマンド列をテキストへ反映させ全てのテキストを一致させる。
38 このUndoの処理のために蓄積されたREPコマンド列からUndoコマンドを生成する。 38
39 Undoコマンドはエディタに蓄積されたREPコマンド列から生成する。
40 まず、このコマンド列を逆順にし、次に、insertコマンドはdeleteコマンドに、deleteコマンドはinsertコマンドに変換する(図\ref{fig:undo_command})。
41 この生成されたUndoコマンド列をテキストに反映させることでテキストの状態を編集前の状態に戻す。
42
43 \begin{figure}[htpb]
44 \begin{center}
45 \includegraphics[scale=.3]{figure/undo_command.pdf}
46 \end{center}
47 \caption{Undoコマンドの生成}
48 \label{fig:undo_command}
49 \end{figure}
50
51
52 次に、行番号とエディタ番号によってREPコマンド列をソートする。これによってそれぞれのエディタ間でのコマンド列の順序が一致する(図\ref{fig:sort_command})。
53 \begin{figure}[htpb]
54 \begin{center}
55 \includegraphics[scale=.3]{figure/sort_command.pdf}
56 \end{center}
57 \caption{コマンド列のソート}
58 \label{fig:sort_command}
59 \end{figure}
60
61 この、Undoコマンド列とソートコマンド列をそれぞれのエディタに反映することにより、テキストを一致させる。
62
63 マージを開始するタイミングは、エディタ自身が発行したREPコマンドがSession Ringを巡回して戻ってきたときである。
64 テキストへと編集が起こらずにコマンドを発行しなかった場合は、他のエディタから発行されるinsert\_ack、delete\_ackッコマンドを受け取った時にマージを開始する。
39 65
40 66
41 \subsection{マージ処理のSession Managerへの移行} 67 \subsection{マージ処理のSession Managerへの移行}
42 マージの処理はこれまで、エディタ側で実装されていたが、マージはREP共通の処理であるため、それぞれのテキストエディタへ個別に実装するよりは、Session Managerへ実装する方が望ましいと考えた。 68 マージの処理はこれまで、エディタ側で実装されていたが、マージはREP共通の処理であるため、それぞれのテキストエディタへ個別に実装するよりは、Session Managerへ実装する方が望ましいと考えた。
43 しかし、エディタとSession Managerとの間では非同期に通信を行っているため、マージコマンドとエディタコマンドとの間で衝突が起こってしまうことがある。マージ中にエディタからの割り込みがあった場合である。 69 しかし、エディタとSession Managerとの間では非同期に通信を行っているため、マージコマンドとエディタコマンドとの間で衝突が起こってしまうことがある(図\ref{fig:remerge})。マージ中にエディタからの割り込みがあった場合である。
44 これを解決するため、マージコマンドとエディタコマンドとの間マージを行うリマージコマンドの生成を提案した(図\ref{fig:remerge})。 70 これを解決するため、マージコマンドとエディタコマンドとの間マージを行うリマージコマンドの生成を提案した。%(図\ref{fig:remerge})。
45
46 リマージコマンドもマージコマンドと同様にUndoを行うが、コマンドのソートは行わずに、エディタからの割り込みのみを排除して、もう一度同様のマージコマンド列をテキストへ反映させる。
47 その後、排除したエディタ割り込みコマンドをテキストへ反映させる。
48 71
49 \begin{figure}[htpb] 72 \begin{figure}[htpb]
50 \begin{center} 73 \begin{center}
51 \includegraphics[scale=.3]{figure/remerge.pdf} 74 \includegraphics[scale=.3]{figure/remerge.pdf}
52 \end{center} 75 \end{center}
53 \caption{リマージ} 76 \caption{リマージ}
54 \label{fig:remerge} 77 \label{fig:remerge}
55 \end{figure} 78 \end{figure}
79
80 %リマージコマンドもマージコマンドと同様にUndoを行うが、コマンドのソートは行わずに、エディタからの割り込みのみを排除して、もう一度同様のマージコマンド列をテキストへ反映させる。
81 %その後、排除したエディタ割り込みコマンドをテキストへ反映させる。
82
83 まず、コマンドの割り込みがあったかどうかをチェックするために、マージャが受け取ったこまんどを確認する(表\ref{tab:received_command})。
84 この表では、マージコマンドをcomman1からcommand4とし、エディタからの割り込みコマンドをuser\_commandとしている。
85
86 \begin{table}[htdp]
87 \caption{received command}
88 \begin{center}
89 \begin{tabular}{|c|c|}
90 \hline
91 1 & command1 \\
92 \hline
93 2 & command2 \\
94 \hline
95 3 & user\_command \\
96 \hline
97 4 & command3 \\
98 \hline
99 5 & command4 \\
100 \hline
101 \end{tabular}
102 \end{center}
103 \label{tab:received_command}
104 \end{table}
105
106 これにより、3番目に割り込みがあったことがわかるので、5、4、3番目をUndoする。そして、command3、command4、をもう一度redoして最後にuser\_commandを反映する。
107
108 \begin{table}[htdp]
109 \caption{remerge command}
110 \begin{center}
111 \begin{tabular}{|c|c|}
112 \hline
113 1 & undo(command4) \\
114 \hline
115 2 & undo(command3) \\
116 \hline
117 3 & undo(user\_command) \\
118 \hline
119 4 & command3 \\
120 \hline
121 5 & command4 \\
122 \hline
123 6 & user\_command \\
124 \hline
125 \end{tabular}
126 \end{center}
127 \label{tab:remerge_command}
128 \end{table}