public void serialize(final DataOutput output) { try { output.writeDouble(maxError); output.writeDouble(alpha); output.writeLong(landmarkInSeconds); output.writeLong(min); output.writeLong(max); output.writeInt(totalNodeCount); postOrderTraversal( root, new Callback() { @Override public boolean process(Node node) { try { serializeNode(output, node); } catch (IOException e) { Throwables.propagate(e); } return true; } }); } catch (IOException e) { Throwables.propagate(e); } }
private void serializeNode(DataOutput output, Node node) throws IOException { int flags = 0; if (node.left != null) { flags |= Flags.HAS_LEFT; } if (node.right != null) { flags |= Flags.HAS_RIGHT; } output.writeByte(flags); output.writeByte(node.level); output.writeLong(node.bits); output.writeDouble(node.weightedCount); }