public Operation IT_DeleteDelete(Operation op1, Operation op2) { if (op1.getPosition() < op2.getPosition()) return op1; else if (op1.getPosition() > op2.getPosition()) { op1.setPosition(op1.getPosition() - op2.getObj().getLength()); return op1; } else { op1.setIdentity(true); return op1; } /* String-Wise * if (op2.getPosition() >= op1.getPosition() + op1.getObj().getLength()) return op1; else if (op1.getPosition() >= op2.getPosition() + op2.getObj().getLength()){ //Delete (L(op1, P(op1) - L(op1)) return op1; } else{ if (op2.getPosition() <= op1.getPosition() && (op1.getPosition() + op1.getObj().getLength() <= op2.getPosition() + op2.getObj().getLength())) //Delete (0, L(op1)) return null; else if (op2.getPosition() <= op1.getPosition() && (op1.getPosition() + op1.getObj().getLength() > op2.getPosition() + op2.getObj().getLength())){ //Delete (P(op1) + L(op1) - (P(op2) + L(op2)), P(op2)) return op1; } else if (op2.getPosition() > op1.getPosition() && (op1.getPosition() + op1.getObj().getLength() <= op2.getPosition() + op2.getObj().getLength())){ //Delete (P(op2) - P(op1), P(op1)) return op1; } else{ //Delete (L(op1) - L(op2), P(op1)) return op1; } }*/ }
/** * (see) Page 27 Direccionamiento de Datos & OT FAQ <br> * Conditions: op2 has already been executed, op1 has not and its parameters are from the state * before op2 was executed op1 is executed as if op2 was executed so its included */ @Override public Operation transform(Operation op1, Operation op2) { // TODO Auto-generated method stub Operation opAux = op1.cloneOperation(); if (!op2.isIdentity()) opAux.setIdentity(op1.getIdentity()); if (opAux.isInsert() && op2.isInsert()) { return IT_InsertInsert(opAux, op2); } else if (opAux.isInsert() && op2.isDelete()) { return IT_InsertDelete(opAux, op2); } else if (opAux.isDelete() && op2.isInsert()) { return IT_DeleteInsert(opAux, op2); } else if (opAux.isDelete() && op2.isDelete()) { return IT_DeleteDelete(opAux, op2); } return null; }