Rev 4364 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
3584 | sourcerer | 1 | /* |
2 | * This file is part of libdom. |
||
3 | * Licensed under the MIT License, |
||
4 | * http://www.opensource.org/licenses/mit-license.php |
||
5 | * Copyright 2007 John-Mark Bell |
||
6 | */ |
||
7 | |||
8 | #ifndef dom_string_h_ |
||
9 | #define dom_string_h_ |
||
10 | |||
11 | #include |
||
12 | #include |
||
13 | #include |
||
14 | |||
15 | #include |
||
16 | #include |
||
17 | |||
18 | typedef struct dom_string dom_string; |
||
19 | struct dom_string { |
||
20 | uint32_t refcnt; |
||
4821 | ashmew2 | 21 | }; |
22 | //dom_string _ALIGNED; |
||
3584 | sourcerer | 23 | |
24 | /* Claim a reference on a DOM string */ |
||
25 | static inline dom_string *dom_string_ref(dom_string *str) |
||
26 | { |
||
27 | if (str != NULL) |
||
28 | str->refcnt++; |
||
29 | return str; |
||
30 | } |
||
31 | |||
32 | /* Destroy a DOM string */ |
||
33 | void dom_string_destroy(dom_string *str); |
||
34 | |||
35 | /* Release a reference on a DOM string */ |
||
36 | static inline void dom_string_unref(dom_string *str) |
||
37 | { |
||
38 | if ((str != NULL) && (--(str->refcnt) == 0)) { |
||
39 | dom_string_destroy(str); |
||
40 | } |
||
41 | } |
||
42 | |||
43 | /* Create a DOM string from a string of characters */ |
||
44 | dom_exception dom_string_create(const uint8_t *ptr, size_t len, |
||
45 | dom_string **str); |
||
46 | dom_exception dom_string_create_interned(const uint8_t *ptr, size_t len, |
||
47 | dom_string **str); |
||
48 | |||
49 | /* Obtain an interned representation of a dom string */ |
||
50 | dom_exception dom_string_intern(dom_string *str, |
||
51 | struct lwc_string_s **lwcstr); |
||
52 | |||
53 | /* Case sensitively compare two DOM strings */ |
||
54 | bool dom_string_isequal(const dom_string *s1, const dom_string *s2); |
||
55 | /* Case insensitively compare two DOM strings */ |
||
56 | bool dom_string_caseless_isequal(const dom_string *s1, const dom_string *s2); |
||
57 | |||
58 | /* Case sensitively compare DOM string and lwc_string */ |
||
59 | bool dom_string_lwc_isequal(const dom_string *s1, lwc_string *s2); |
||
60 | /* Case insensitively compare DOM string and lwc_string */ |
||
61 | bool dom_string_caseless_lwc_isequal(const dom_string *s1, lwc_string *s2); |
||
62 | |||
63 | /* Get the index of the first occurrence of a character in a dom string */ |
||
64 | uint32_t dom_string_index(dom_string *str, uint32_t chr); |
||
65 | /* Get the index of the last occurrence of a character in a dom string */ |
||
66 | uint32_t dom_string_rindex(dom_string *str, uint32_t chr); |
||
67 | |||
68 | /* Get the length, in characters, of a dom string */ |
||
69 | uint32_t dom_string_length(dom_string *str); |
||
70 | |||
71 | /** |
||
72 | * Get the raw character data of the dom_string. |
||
73 | * @note: This function is just provided for the convenience of accessing the |
||
74 | * raw C string character, no change on the result string is allowed. |
||
75 | */ |
||
76 | const char *dom_string_data(const dom_string *str); |
||
77 | |||
78 | /* Get the byte length of this dom_string */ |
||
79 | size_t dom_string_byte_length(const dom_string *str); |
||
80 | |||
81 | /* Get the UCS-4 character at position index, the index should be in |
||
82 | * [0, length), and length can be get by calling dom_string_length |
||
83 | */ |
||
84 | dom_exception dom_string_at(dom_string *str, uint32_t index, |
||
85 | uint32_t *ch); |
||
86 | |||
87 | /* Concatenate two dom strings */ |
||
88 | dom_exception dom_string_concat(dom_string *s1, dom_string *s2, |
||
89 | dom_string **result); |
||
90 | |||
91 | /* Extract a substring from a dom string */ |
||
92 | dom_exception dom_string_substr(dom_string *str, |
||
93 | uint32_t i1, uint32_t i2, dom_string **result); |
||
94 | |||
95 | /* Insert data into a dom string at the given location */ |
||
96 | dom_exception dom_string_insert(dom_string *target, |
||
97 | dom_string *source, uint32_t offset, |
||
98 | dom_string **result); |
||
99 | |||
100 | /* Replace a section of a dom string */ |
||
101 | dom_exception dom_string_replace(dom_string *target, |
||
102 | dom_string *source, uint32_t i1, uint32_t i2, |
||
103 | dom_string **result); |
||
104 | |||
105 | /* Generate an uppercase version of the given string */ |
||
106 | dom_exception dom_string_toupper(dom_string *source, bool ascii_only, |
||
107 | dom_string **upper); |
||
108 | |||
109 | /* Generate an lowercase version of the given string */ |
||
110 | dom_exception dom_string_tolower(dom_string *source, bool ascii_only, |
||
111 | dom_string **lower); |
||
112 | |||
113 | /* Calculate a hash value from a dom string */ |
||
114 | uint32_t dom_string_hash(dom_string *str); |
||
115 | |||
116 | #endif |