*/\r
public abstract class InstructionsSerializer {\r
\r
+ private static final byte GOTO_TABLE_TYPE = 1;\r
+ private static final byte WRITE_METADATA_TYPE = 2;\r
+ private static final byte WRITE_ACTIONS_TYPE = 3;\r
+ private static final byte APPLY_ACTIONS_TYPE = 4;\r
+ private static final byte CLEAR_ACTIONS_TYPE = 5;\r
+ private static final byte METER_TYPE = 6;\r
+ private static final byte EXPERIMENTER_TYPE = 7;\r
+ private static final byte GOTO_TABLE_LENGTH = 8;\r
+ private static final byte WRITE_METADATA_LENGTH = 24;\r
+ private static final byte WRITE_ACTIONS_LENGTH = 8;\r
+ private static final byte APPLY_ACTIONS_LENGTH = 8;\r
+ private static final byte CLEAR_ACTIONS_LENGTH = 8;\r
+ private static final byte METER_LENGTH = 8;\r
+ private static final byte EXPERIMENTER_LENGTH = 8;\r
+ private static final byte PADDING_IN_GOTO_TABLE = 3;\r
+ private static final byte PADDING_IN_WRITE_METADATA = 4;\r
+ private static final byte PADDING_IN_CLEAR_ACTIONS = 4;\r
+ \r
/**\r
* Encodes instructions\r
* @param instructions List of instructions\r
for (Instructions instruction : instructions) {\r
Class<? extends Instruction> type = instruction.getType();\r
if (type.isAssignableFrom(GotoTable.class)) {\r
- final byte GOTO_TABLE_TYPE = 1;\r
- final byte GOTO_TABLE_LENGTH = 8;\r
- final byte PADDING_IN_GOTO_TABLE = 3;\r
writeTypeAndLength(out, GOTO_TABLE_TYPE, GOTO_TABLE_LENGTH);\r
out.writeByte(instruction.getAugmentation(TableIdInstruction.class).getTableId());\r
ByteBufUtils.padBuffer(PADDING_IN_GOTO_TABLE, out);\r
} else if (type.isAssignableFrom(WriteMetadata.class)) {\r
- final byte WRITE_METADATA_TYPE = 2;\r
- final byte WRITE_METADATA_LENGTH = 24;\r
- final byte PADDING_IN_WRITE_METADATA = 4;\r
writeTypeAndLength(out, WRITE_METADATA_TYPE, WRITE_METADATA_LENGTH);\r
ByteBufUtils.padBuffer(PADDING_IN_WRITE_METADATA, out);\r
MetadataInstruction metadata = instruction.getAugmentation(MetadataInstruction.class);\r
out.writeBytes(metadata.getMetadata());\r
out.writeBytes(metadata.getMetadataMask());\r
} else if (type.isAssignableFrom(WriteActions.class)) {\r
- final byte WRITE_ACTIONS_TYPE = 3;\r
writeActionsInstruction(out, instruction, WRITE_ACTIONS_TYPE);\r
} else if (type.isAssignableFrom(ApplyActions.class)) {\r
- final byte APPLY_ACTIONS_TYPE = 4;\r
writeActionsInstruction(out, instruction, APPLY_ACTIONS_TYPE);\r
} else if (type.isAssignableFrom(ClearActions.class)) {\r
- final byte CLEAR_ACTIONS_TYPE = 5;\r
- final byte CLEAR_ACTIONS_LENGTH = 8;\r
- final byte PADDING_IN_CLEAR_ACTIONS = 4;\r
writeTypeAndLength(out, CLEAR_ACTIONS_TYPE, CLEAR_ACTIONS_LENGTH);\r
ByteBufUtils.padBuffer(PADDING_IN_CLEAR_ACTIONS, out);\r
} else if (type.isAssignableFrom(Meter.class)) {\r
- final byte METER_TYPE = 6;\r
- final byte METER_LENGTH = 8;\r
writeTypeAndLength(out, METER_TYPE, METER_LENGTH);\r
out.writeInt(instruction.getAugmentation(MeterIdInstruction.class).getMeterId().intValue());\r
} else if (type.isAssignableFrom(Experimenter.class)) {\r
- final byte EXPERIMENTER_TYPE = 7;\r
- final byte EXPERIMENTER_LENGTH = 8;\r
ExperimenterInstruction experimenter = instruction.getAugmentation(ExperimenterInstruction.class);\r
byte[] data = experimenter.getData();\r
writeTypeAndLength(out, EXPERIMENTER_TYPE, EXPERIMENTER_LENGTH + data.length);\r
for (Instructions instruction : instructions) {\r
Class<? extends Instruction> type = instruction.getType();\r
if (type.isAssignableFrom(GotoTable.class)) {\r
- final byte GOTO_TABLE_LENGTH = 8;\r
length += GOTO_TABLE_LENGTH;\r
} else if (type.isAssignableFrom(WriteMetadata.class)) {\r
- final byte WRITE_METADATA_LENGTH = 24;\r
length += WRITE_METADATA_LENGTH;\r
} else if (type.isAssignableFrom(WriteActions.class)) {\r
- final byte WRITE_ACTIONS_LENGTH = 8;\r
length += WRITE_ACTIONS_LENGTH + ActionsSerializer.computeLengthOfActions(\r
instruction.getAugmentation(ActionsInstruction.class).getActionsList());\r
} else if (type.isAssignableFrom(ApplyActions.class)) {\r
- final byte APPLY_ACTIONS_LENGTH = 8;\r
length += APPLY_ACTIONS_LENGTH + ActionsSerializer.computeLengthOfActions(\r
instruction.getAugmentation(ActionsInstruction.class).getActionsList());\r
} else if (type.isAssignableFrom(ClearActions.class)) {\r
- final byte CLEAR_ACTIONS_LENGTH = 8;\r
length += CLEAR_ACTIONS_LENGTH;\r
} else if (type.isAssignableFrom(Meter.class)) {\r
- final byte METER_LENGTH = 8;\r
length += METER_LENGTH;\r
} else if (type.isAssignableFrom(Experimenter.class)) {\r
- final byte EXPERIMENTER_LENGTH = 8;\r
ExperimenterInstruction experimenter = instruction.getAugmentation(ExperimenterInstruction.class);\r
byte[] data = experimenter.getData();\r
length += EXPERIMENTER_LENGTH + data.length;\r