Mercurial > hg > Members > tatsuki > bench > jungle-core
view src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingChildren.java @ 153:20af7f25ef32
miner change
author | one |
---|---|
date | Tue, 25 Nov 2014 17:52:41 +0900 |
parents | 371b6ddb78f2 |
children |
line wrap: on
line source
package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.AppendChildAtOperation; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DeleteChildAtOperation; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; public class LoggingChildren { private final TreeNode wrap; private final OperationLog log; public LoggingChildren(TreeNode _wrap,OperationLog _log) { wrap = _wrap; log = _log; } public int size() { Children children = wrap.getChildren(); return children.size(); } public Either<Error,LoggingNode> edit(NodeOperation _op) { Either<Error,TreeNode> either = _op.invoke(wrap); if(either.isA()){ return DefaultEither.newA(either.a()); } TreeNode newWrap = either.b(); OperationLog newLog = log.add(_op); LoggingNode newLoggingNode = new LoggingNode(newWrap,newLog); return DefaultEither.newB(newLoggingNode); } public Either<Error,LoggingNode> addNewChildAt(final int _pos) { NodeOperation addNewChildAt = new AppendChildAtOperation(_pos); return edit(addNewChildAt); } public Either<Error,LoggingNode> deleteChildAt(final int _pos) { NodeOperation deleteChildAt = new DeleteChildAtOperation(_pos); return edit(deleteChildAt); } public Either<Error,LoggingNode> at(int _pos) { Children children = wrap.getChildren(); Either<Error,TreeNode> either = children.at(_pos); if(either.isA()){ return DefaultEither.newA(either.a()); } TreeNode node = either.b(); LoggingNode logNode = new LoggingNode(node); return DefaultEither.newB(logNode); } }