view src/sample/merge/MergeSample.java @ 19:cc68a00f9850

*** empty log message ***
author pin
date Tue, 31 Oct 2006 16:30:54 +0900
parents
children e5472194938a
line wrap: on
line source

package sample.merge;

import java.util.Iterator;
import java.util.List;

import remoteeditor.network.REP;

public class MergeSample {
	List userList;
	List tokenList;
	private int REP_IGNORE = -1;
	public MergeSample(List userList, List tokenList){
		this.userList = userList;
		this.tokenList = tokenList;
		merge();
	}


	void merge(){
		Iterator userListIterator = userList.iterator();
		while(userListIterator.hasNext()){
			Iterator tokenListIterator = tokenList.iterator();
			Rep_Cmd userCmd = (Rep_Cmd)userListIterator.next();
			if(userCmd.stat == REP_IGNORE) continue;     /* 削除される(予定)のREPコマンドの比較は無視 */
			while(tokenListIterator.hasNext()){
				Rep_Cmd tokenCmd =(Rep_Cmd)tokenListIterator.next();
				if(tokenCmd.stat == REP_IGNORE) continue;     /* 削除される(予定)のREPコマンドの比較は無視 */
				if(userCmd.stat == REP_IGNORE) break;
				if(userCmd.lineno < tokenCmd.lineno) {     /* UsersLineNumber < TokensLineNumber */
					if(userCmd.cmd == REP.REP_INSERT_CMD){
						tokenCmd.lineno++;
					}else if(userCmd.cmd == REP.REP_DELETE_CMD){
						tokenCmd.lineno--;
					}
				}else if(userCmd.lineno > tokenCmd.lineno){     /* UsersLineNumber > TokensLineNumber */
					if(tokenCmd.cmd == REP.REP_INSERT_CMD){
						userCmd.lineno++;
					}else if(tokenCmd.cmd == REP.REP_DELETE_CMD){
						userCmd.lineno--;
					}
				}else if(userCmd.lineno == tokenCmd.lineno){     /* UsersLineNumber == TokensLineNumber */
					/*
	                 * 行番号が重なるとREPコマンドの競合が起こるので、
	                 * どちらかが譲らないといけない。
	                 * uid が小さい方を優先(h_pricmdに)し、
	                 * uid が大きい方(l_pricmd)を変更する。
	                 */
				}
			}
		}
	}
}