private void sendNodes() {
    // mark all nodes as required
    ReleasableIterator<WayContainer> wayIterator = allWays.iterate();
    while (wayIterator.hasNext()) {
      Way way = wayIterator.next().getEntity();

      if (!isRequiredWay(way)) continue;

      for (WayNode nodeReference : way.getWayNodes()) {
        long nodeId = nodeReference.getNodeId();
        requiredNodes.set(nodeId);
      }
    }
    wayIterator.release();

    ReleasableIterator<NodeContainer> nodeIterator = allNodes.iterate();
    while (nodeIterator.hasNext()) {
      NodeContainer nodeContainer = nodeIterator.next();
      if (!isRequiredNode(nodeContainer.getEntity())) {
        continue;
      }
      sink.process(nodeContainer);
    }

    nodeIterator.release();
  }
 private void sendRelations() {
   ReleasableIterator<RelationContainer> relationIterator = allRelations.iterate();
   while (relationIterator.hasNext()) {
     sink.process(relationIterator.next());
   }
   relationIterator.release();
 }
  private void sendWays() {
    ReleasableIterator<WayContainer> wayIterator = allWays.iterate();
    while (wayIterator.hasNext()) {
      WayContainer wayContainer = wayIterator.next();

      if (!isRequiredWay(wayContainer.getEntity())) continue;

      sink.process(wayContainer);
    }
    wayIterator.release();
  }