@Override
			public GraphOperation next()
			{
				final byte opCode = this.opCodes.get(++opIndex);
				GraphOperation result = null;

				if (opCode == 2)
				{
					int arg0 = this.arguments.get(++argIndex);
					return GraphOperation.newCreateRemoveNodeOp(arg0);
				}
				else if (opCode >= 1 && opCode <= 6)
				{
					int arg0 = this.arguments.get(++argIndex);
					int arg1 = this.arguments.get(++argIndex);
					switch (opCode)
					{
						case ((byte) 1):
							result = GraphOperation.newCreateNodeOp(arg0, arg1);
							break;
						case ((byte) 3):
							result = GraphOperation.newCreateEdgeOp(arg0, arg1);
							break;
						case ((byte) 4):
							result = GraphOperation.newRemoveEdgeOp(arg0, arg1);
							break;
						case ((byte) 5):
							result = GraphOperation.newSetClusterOp(arg0, arg1);
							break;
						case ((byte) 6):
							result = GraphOperation.newSetRefClusterOp(arg0, arg1);
							break;
					}
				}
				else if (opCode == 7)
				{
					return GraphOperation.newNextStepOp();
				}

				return result;

			}