1 /*
2 * Copyright (C) 2018-2022 Alexander Borisov
3 *
4 * Author: Alexander Borisov <borisov@lexbor.com>
5 */
6
7 #include "lexbor/dom/collection.h"
8 #include "lexbor/dom/interfaces/document.h"
9
10
11 lxb_dom_collection_t *
lxb_dom_collection_create(lxb_dom_document_t * document)12 lxb_dom_collection_create(lxb_dom_document_t *document)
13 {
14 lxb_dom_collection_t *col;
15
16 col = lexbor_calloc(1, sizeof(lxb_dom_collection_t));
17 if (col == NULL) {
18 return NULL;
19 }
20
21 col->document = document;
22
23 return col;
24 }
25
26 lxb_status_t
lxb_dom_collection_init(lxb_dom_collection_t * col,size_t start_list_size)27 lxb_dom_collection_init(lxb_dom_collection_t *col, size_t start_list_size)
28 {
29 if (col == NULL) {
30 return LXB_STATUS_ERROR_WRONG_ARGS;
31 }
32
33 if (col->document == NULL) {
34 return LXB_STATUS_ERROR_INCOMPLETE_OBJECT;
35 }
36
37 return lexbor_array_init(&col->array, start_list_size);
38 }
39
40 lxb_dom_collection_t *
lxb_dom_collection_destroy(lxb_dom_collection_t * col,bool self_destroy)41 lxb_dom_collection_destroy(lxb_dom_collection_t *col, bool self_destroy)
42 {
43 if (col == NULL) {
44 return NULL;
45 }
46
47 if (col->array.list != NULL) {
48 lexbor_array_destroy(&col->array, false);
49
50 col->array.list = NULL;
51 }
52
53 if (self_destroy) {
54 return lexbor_free(col);
55 }
56
57 return col;
58 }
59
60 /*
61 * No inline functions for ABI.
62 */
63 lxb_dom_collection_t *
lxb_dom_collection_make_noi(lxb_dom_document_t * document,size_t start_list_size)64 lxb_dom_collection_make_noi(lxb_dom_document_t *document, size_t start_list_size)
65 {
66 return lxb_dom_collection_make(document, start_list_size);
67 }
68
69 void
lxb_dom_collection_clean_noi(lxb_dom_collection_t * col)70 lxb_dom_collection_clean_noi(lxb_dom_collection_t *col)
71 {
72 lxb_dom_collection_clean(col);
73 }
74
75 lxb_status_t
lxb_dom_collection_append_noi(lxb_dom_collection_t * col,void * value)76 lxb_dom_collection_append_noi(lxb_dom_collection_t *col, void *value)
77 {
78 return lxb_dom_collection_append(col, value);
79 }
80
81 lxb_dom_element_t *
lxb_dom_collection_element_noi(lxb_dom_collection_t * col,size_t idx)82 lxb_dom_collection_element_noi(lxb_dom_collection_t *col, size_t idx)
83 {
84 return lxb_dom_collection_element(col, idx);
85 }
86
87 lxb_dom_node_t *
lxb_dom_collection_node_noi(lxb_dom_collection_t * col,size_t idx)88 lxb_dom_collection_node_noi(lxb_dom_collection_t *col, size_t idx)
89 {
90 return lxb_dom_collection_node(col, idx);
91 }
92
93 size_t
lxb_dom_collection_length_noi(lxb_dom_collection_t * col)94 lxb_dom_collection_length_noi(lxb_dom_collection_t *col)
95 {
96 return lxb_dom_collection_length(col);
97 }
98