xref: /netbsd-src/external/mpl/bind/dist/lib/dns/rdatasetiter.c (revision 06dfa8449cb5e76c0044ec0f3badf7d5180af0f5)
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