xref: /php-src/ext/dom/lexbor/lexbor/dom/collection.c (revision f0934090)
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