h3_iterators.h (22 lines of code) (raw):
/*
* Copyright 2021 Uber Technologies, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/** @file iterators.h
* @brief Iterator structs and functions for the children of a cell,
* or cells at a given resolution.
*/
#ifndef ITERATORS_H
#define ITERATORS_H
#include <stdint.h>
#include "h3_h3api.h"
/**
* IterCellsChildren: struct for iterating through the descendants of
* a given cell.
*
* Constructors:
*
* Initialize with either `iterInitParent` or `iterInitBaseCellNum`.
* `iterInitParent` sets up an iterator for all the children of a given
* parent cell at a given resolution.
*
* `iterInitBaseCellNum` sets up an iterator for children cells, given
* a base cell number (0--121).
*
* Iteration:
*
* Step iterator with `iterStepChild`.
* During the lifetime of the `IterCellsChildren`, the current iterate
* is accessed via the `IterCellsChildren.h` member.
* When the iterator is exhausted or if there was an error in initialization,
* `IterCellsChildren.h` will be `H3_NULL` even after calling `iterStepChild`.
*/
typedef struct {
H3Index h;
int _parentRes; // parent resolution
int _skipDigit; // this digit skips `1` for pentagons
} IterCellsChildren;
DECLSPEC IterCellsChildren iterInitParent(H3Index h, int childRes);
void _iterInitParent(H3Index h, int childRes, IterCellsChildren *iter);
DECLSPEC IterCellsChildren iterInitBaseCellNum(int baseCellNum, int childRes);
DECLSPEC void iterStepChild(IterCellsChildren *iter);
/**
* IterCellsResolution: struct for iterating through all cells at a given
* resolution
*
* Constructor:
*
* Initialize with `IterCellsResolution`.
*
* Iteration:
*
* Step iterator with `iterStepRes`.
* During the lifetime of the iterator the current iterate
* is accessed via the `IterCellsResolution.h` member.
* When the iterator is exhausted or if there was an error in initialization,
* `IterCellsResolution.h` will be `H3_NULL` even after calling `iterStepRes`.
*/
typedef struct {
H3Index h;
int _baseCellNum;
int _res;
IterCellsChildren _itC;
} IterCellsResolution;
DECLSPEC IterCellsResolution iterInitRes(int res);
DECLSPEC void iterStepRes(IterCellsResolution *iter);
#endif