/**
* @file kc_iterator.h
* @brief KC Iterator モジュール
* @copyright 2003 - 2023 Nomura Kei
* @depends
* kc.h
*/
#ifndef KC_ITERATOR_H
#define KC_ITERATOR_H
#include <kc.h>
#ifdef __cplusplus
extern "C"
{
namespace kc
{
using namespace std;
#endif
/**
* Iterator オブジェクト
*/
typedef struct KcIterator_
{
/**
* 次の要素の有無を取得します。
*
* @param ite Iterator オブジェクト
* @return true/false (次の要素がある/次の要素がない)
*/
bool (*hasNext)(struct KcIterator_ *ite);
/**
* 次の要素を取得します。
*
* @param ite Iterator オブジェクト
* @param size 取得したオブジェクトのサイズ格納用
* @return 次のオブジェクト
*/
const void *(*next)(struct KcIterator_ *ite, size_t *size);
/** 内部情報 */
void *_info;
} KcIterator;
void KcIterator_delete(KcIterator *ite);
#ifdef __cplusplus
} // namespace kc
} // extern "C"
#endif
#endif // KC_ITERATOR_H