public void traverse(RegionTraverser t) {

    int len3 = m_component.size() / 3;

    for (int i = 0, k = 0; k < len3; k++) {
      t.found((int) m_component.get(i++), (int) m_component.get(i++), (int) m_component.get(i++));
    }
  }
  public void traverseInterruptible(RegionTraverser t) {
    int len3 = m_component.size() / 3;

    for (int i = 0, k = 0; k < len3; k++) {
      if (!t.foundInterruptible(
          (int) m_component.get(i++), (int) m_component.get(i++), (int) m_component.get(i++)))
        return;
    }
  }
  /**
   * Checks whether a coordinate is in the region.
   *
   * @param vc The coordinate
   */
  public boolean contains(VoxelCoordinate vc) {

    // TODO: untested and slow
    int len3 = m_component.size() / 3;

    for (int i = 0; i < len3; i = i + 3) {
      if (vc.getX() == m_component.get(i)) {
        if (vc.getY() == m_component.get(i + 1)) {
          if (vc.getZ() == m_component.get(i + 2)) {
            return true;
          }
        }
      }
    }

    return false;
  }
  /** returns voxel coordinates */
  public int[] getVoxelCoord(int index, int[] coord) {

    if (m_component == null) return coord;
    //
    // coordinates are triplets
    //

    index *= 3;

    if (index + 2 > m_component.size()) return coord;

    coord[0] = (int) m_component.get(index++);
    coord[1] = (int) m_component.get(index++);
    coord[2] = (int) m_component.get(index++);

    return coord;
  }