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