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