/**
* Replication Benchmarker
* https://github.com/score-team/replication-benchmarker/
* Copyright (C) 2013 LORIA / Inria / SCORE Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package jbenchmarker.logootsplit;
import crdt.CRDT;
import crdt.Operation;
import crdt.simulator.IncorrectTraceException;
import java.util.ArrayList;
import java.util.List;
import jbenchmarker.core.MergeAlgorithm;
import crdt.Operation;
import jbenchmarker.core.SequenceOperation;
public class LogootSAlgorithm<T> extends MergeAlgorithm{
public LogootSAlgorithm(){
super(null,0);
}
public LogootSAlgorithm(LogootSDocument doc, int siteId){
super(doc,siteId);
doc.setReplicaNumber(siteId);
}
@Override
public void setReplicaNumber(int r){
super.setReplicaNumber(r);
((LogootSDocument)getDoc()).setReplicaNumber(r);
}
@Override
protected void integrateRemote(Operation op) throws IncorrectTraceException {
this.getDoc().apply(op);
}
@Override
protected List<Operation> localInsert(SequenceOperation opt) throws IncorrectTraceException {
List<Operation> list=new ArrayList<Operation>();
list= ((LogootSDocument)this.getDoc()).generateInsertion(opt);
for(int i=0;i<list.size();i++){
this.getDoc().apply(list.get(i));
}
return list;
}
@Override
protected List<Operation> localDelete(SequenceOperation opt) throws IncorrectTraceException {
List<Operation> list=new ArrayList<Operation>();
list= ((LogootSDocument)this.getDoc()).generateDeletion(opt);
for(int i=0;i<list.size();i++){
this.getDoc().apply(list.get(i));
}
return list;
}
@Override
protected List<Operation> localUpdate(SequenceOperation opt) throws IncorrectTraceException {
List<Operation> list=new ArrayList<Operation>();
list= ((LogootSDocument)this.getDoc()).generateDeletion(opt);
list.addAll(((LogootSDocument)this.getDoc()).generateInsertion(opt));
for(int i=0;i<list.size();i++){
this.getDoc().apply(list.get(i));
}
return list;
}
/*@Override
protected List<Operation> generateLocal(SequenceOperation opt) {
List<Operation> list=new ArrayList<Operation>();
if(opt.getType()==SequenceOperation.OpType.ins){
list= ((LogootSDocument)this.getDoc()).generateInsertion(opt);
}
else {
if(opt.getType()==SequenceOperation.OpType.del){
list =((LogootSDocument)this.getDoc()).generateDeletion(opt);
}
else{
if(opt.getType()==SequenceOperation.OpType.update){
list =((LogootSDocument)this.getDoc()).generateDeletion(opt);
list.addAll(((LogootSDocument)this.getDoc()).generateInsertion(opt));
}
}
}
for(int i=0;i<list.size();i++){
this.getDoc().apply(list.get(i));
}
return list;
}*/
@Override
public CRDT<String> create() {
return new LogootSAlgorithm(new LogootSDocument<String>(100), 1);
}
}