Mercurial > hg > Members > shoshi > jungle > jungle-core
diff src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/editor/jungleTreeEditor/RedBlackJungleTreeEditor.java @ 310:474728dcfdb8
add PathType
author | tatsuki |
---|---|
date | Thu, 26 Jan 2017 23:44:14 +0900 |
parents | f8e75ef7ac5d |
children | 5b9a3bc593a7 |
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/editor/jungleTreeEditor/RedBlackJungleTreeEditor.java Thu Jan 26 16:19:51 2017 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/editor/jungleTreeEditor/RedBlackJungleTreeEditor.java Thu Jan 26 23:44:14 2017 +0900 @@ -23,6 +23,7 @@ import static jp.ac.u_ryukyu.ie.cr.jungle.util.Error.JungleTreeError.INVALID_ARGUMENT; import static jp.ac.u_ryukyu.ie.cr.jungle.util.Error.JungleTreeError.NOT_USE_METHOD; +import static jp.ac.u_ryukyu.ie.cr.jungle.util.Error.TreeEditorError.UNDEFINE_NODEPATH; public class RedBlackJungleTreeEditor implements JungleTreeEditor { @@ -81,43 +82,55 @@ */ @Override public Either<Error, JungleTreeEditor> addNewChildAndPutAttribute(NodePath path, int pos, String key, ByteBuffer value) { + if (path.getPathType() != PathType.RedBlack) + return DefaultEither.newA(UNDEFINE_NODEPATH); AppendChildAndPutAttribute appendChildAndPutAttribute = new AppendChildAndPutAttribute(key, value, pos); - return _edit(path, appendChildAndPutAttribute); + NodePath newParh = path.setType(PathType.RedBlackNode); //回転処理を行わないで木の複製を行う設定のPathに変えている… ダサい… + return _edit(newParh, appendChildAndPutAttribute); } @Override public Either<Error, JungleTreeEditor> addNewChildAt(NodePath path, int _pos) { + if (path.getPathType() != PathType.RedBlack) + return DefaultEither.newA(UNDEFINE_NODEPATH); ByteBuffer value = ByteBuffer.wrap("defaultValue".getBytes()); return addNewChildAndPutAttribute(path, 0, balanceKey, value); } @Override public Either<Error, JungleTreeEditor> deleteChildAt(NodePath path, int pos) { + if (path.getPathType() != PathType.RedBlack) + return DefaultEither.newA(UNDEFINE_NODEPATH); String key = path.getKey(); if (!key.equals(balanceKey)) return DefaultEither.newA(INVALID_ARGUMENT); + NodePath newParh = path.setType(PathType.RedBlackNode); //回転処理を行わないで木の複製を行う設定のPathに変えている… ダサい… ByteBuffer value = path.getValue(); RedBlackTreeDeleteChildAt deleteChildAt = new RedBlackTreeDeleteChildAt(key, value); - return _edit(path, deleteChildAt); + return _edit(newParh, deleteChildAt); } @Override public Either<Error, JungleTreeEditor> putAttribute(NodePath path, String key, ByteBuffer value) { + if (path.getPathType() != PathType.RedBlack) + return DefaultEither.newA(UNDEFINE_NODEPATH); if (key.equals(balanceKey)) return DefaultEither.newA(INVALID_ARGUMENT); if (path.getPathType() != PathType.RedBlack) return DefaultEither.newA(INVALID_ARGUMENT); NodeEditor editor = new PutAttribute(key, value); - NodePath newParh = path.add(-1); //回転処理を行わないで木の複製を行う設定のPathに変えている… ダサい… + NodePath newParh = path.setType(PathType.RedBlackAttribute); //回転処理を行わないで木の複製を行う設定のPathに変えている… ダサい… return _edit(newParh, editor); } @Override public Either<Error, JungleTreeEditor> deleteAttribute(NodePath path, String _key) { + if (path.getPathType() != PathType.RedBlack) + return DefaultEither.newA(UNDEFINE_NODEPATH); if (_key.equals(balanceKey)) return DefaultEither.newA(INVALID_ARGUMENT); DeleteAttribute deleteAttribute = new DeleteAttribute(_key); - NodePath newParh = path.add(-1); //回転処理を行わないで木の複製を行う設定のPathに変えている… ダサい… + NodePath newParh = path.setType(PathType.RedBlackAttribute); //回転処理を行わないで木の複製を行う設定のPathに変えている… ダサい… return _edit(newParh, deleteAttribute); }