1 /* $NetBSD: rdatasetiter.c,v 1.5 2022/09/23 12:15:30 christos Exp $ */ 2 3 /* 4 * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 5 * 6 * SPDX-License-Identifier: MPL-2.0 7 * 8 * This Source Code Form is subject to the terms of the Mozilla Public 9 * License, v. 2.0. If a copy of the MPL was not distributed with this 10 * file, you can obtain one at https://mozilla.org/MPL/2.0/. 11 * 12 * See the COPYRIGHT file distributed with this work for additional 13 * information regarding copyright ownership. 14 */ 15 16 /*! \file */ 17 18 #include <stddef.h> 19 20 #include <isc/util.h> 21 22 #include <dns/rdataset.h> 23 #include <dns/rdatasetiter.h> 24 25 void 26 dns_rdatasetiter_destroy(dns_rdatasetiter_t **iteratorp) { 27 /* 28 * Destroy '*iteratorp'. 29 */ 30 31 REQUIRE(iteratorp != NULL); 32 REQUIRE(DNS_RDATASETITER_VALID(*iteratorp)); 33 34 (*iteratorp)->methods->destroy(iteratorp); 35 36 ENSURE(*iteratorp == NULL); 37 } 38 39 isc_result_t 40 dns_rdatasetiter_first(dns_rdatasetiter_t *iterator) { 41 /* 42 * Move the rdataset cursor to the first rdataset at the node (if any). 43 */ 44 45 REQUIRE(DNS_RDATASETITER_VALID(iterator)); 46 47 return (iterator->methods->first(iterator)); 48 } 49 50 isc_result_t 51 dns_rdatasetiter_next(dns_rdatasetiter_t *iterator) { 52 /* 53 * Move the rdataset cursor to the next rdataset at the node (if any). 54 */ 55 56 REQUIRE(DNS_RDATASETITER_VALID(iterator)); 57 58 return (iterator->methods->next(iterator)); 59 } 60 61 void 62 dns_rdatasetiter_current(dns_rdatasetiter_t *iterator, 63 dns_rdataset_t *rdataset) { 64 /* 65 * Return the current rdataset. 66 */ 67 68 REQUIRE(DNS_RDATASETITER_VALID(iterator)); 69 REQUIRE(DNS_RDATASET_VALID(rdataset)); 70 REQUIRE(!dns_rdataset_isassociated(rdataset)); 71 72 iterator->methods->current(iterator, rdataset); 73 } 74