source: libcfa/src/containers/string_res.hfa@ 6f7aff3

ADT ast-experimental enum pthread-emulation qualifiedEnum
Last change on this file since 6f7aff3 was 7b0e8b7, checked in by Michael Brooks <mlbrooks@…>, 4 years ago

String heap growth implemented

  • Property mode set to 100644
File size: 4.9 KB
Line 
1//
2// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
3//
4// The contents of this file are covered under the licence agreement in the
5// file "LICENCE" distributed with Cforall.
6//
7// string_res -- variable-length, mutable run of text, with resource semantics
8//
9// Author : Michael L. Brooks
10// Created On : Fri Sep 03 11:00:00 2021
11// Last Modified By : Michael L. Brooks
12// Last Modified On : Fri Sep 03 11:00:00 2021
13// Update Count : 1
14//
15
16#pragma once
17
18#include <fstream.hfa>
19
20
21//######################### HandleNode #########################
22//private
23
24struct VbyteHeap;
25
26struct HandleNode {
27 HandleNode *flink; // forward link
28 HandleNode *blink; // backward link
29 VbyteHeap *ulink; // upward link
30
31 char *s; // pointer to byte string
32 unsigned int lnth; // length of byte string
33}; // HandleNode
34
35VbyteHeap * DEBUG_string_heap();
36size_t DEBUG_string_bytes_in_heap( VbyteHeap * heap );
37size_t DEBUG_string_bytes_avail_until_gc( VbyteHeap * heap );
38const char * DEBUG_string_heap_start( VbyteHeap * heap );
39
40
41//######################### String #########################
42
43// A dynamically-sized string
44struct string_res {
45 HandleNode Handle; // chars, start, end, global neighbours
46 bool shareEditSet_owns_ulink;
47 string_res * shareEditSet_prev;
48 string_res * shareEditSet_next;
49};
50
51
52//######################### charclass_res #########################
53
54struct charclass_res {
55 string_res chars;
56};
57
58void ?{}( charclass_res & ) = void;
59void ?{}( charclass_res &, charclass_res) = void;
60charclass_res ?=?( charclass_res &, charclass_res) = void;
61void ?{}( charclass_res &, const string_res & chars);
62void ?{}( charclass_res &, const char * chars );
63void ?{}( charclass_res &, const char * chars, size_t charssize );
64void ^?{}( charclass_res & );
65
66
67//######################### String #########################
68
69// Getters
70size_t size(const string_res &s);
71
72// Constructors, Assignment Operators, Destructor
73void ?{}(string_res &s); // empty string
74void ?{}(string_res &s, const char* initial); // copy from string literal (NULL-terminated)
75void ?{}(string_res &s, const char* buffer, size_t bsize); // copy specific length from buffer
76
77void ?{}(string_res &s, const string_res & s2) = void;
78void ?{}(string_res &s, string_res & s2) = void;
79
80enum StrResInitMode { COPY_VALUE, SHARE_EDITS };
81void ?{}(string_res &s, const string_res & src, StrResInitMode, size_t start, size_t end );
82static inline void ?{}(string_res &s, const string_res & src, StrResInitMode mode ) {
83 ?{}( s, src, mode, 0, size(src));
84}
85
86void assign(string_res &s, const char* buffer, size_t bsize); // copy specific length from buffer
87void ?=?(string_res &s, const char* other); // copy from string literal (NULL-terminated)
88void ?=?(string_res &s, const string_res &other);
89void ?=?(string_res &s, string_res &other);
90void ?=?(string_res &s, char other);
91
92void ^?{}(string_res &s);
93
94// IO Operator
95ofstream & ?|?(ofstream &out, const string_res &s);
96void ?|?(ofstream &out, const string_res &s);
97
98// Concatenation
99void ?+=?(string_res &s, char other); // append a character
100void ?+=?(string_res &s, const string_res &s2); // append-concatenate to first string
101void ?+=?(string_res &s, const char* other);
102void append(string_res &s, const char* buffer, size_t bsize);
103
104// Character access
105void assignAt(const string_res &s, size_t index, char val);
106char ?[?](const string_res &s, size_t index); // Mike changed to ret by val from Sunjay's ref, to match Peter's
107//char codePointAt(const string_res &s, size_t index); // revisit under Unicode
108
109// Comparisons
110bool ?==?(const string_res &s, const string_res &other);
111bool ?!=?(const string_res &s, const string_res &other);
112bool ?==?(const string_res &s, const char* other);
113bool ?!=?(const string_res &s, const char* other);
114
115// String search
116bool contains(const string_res &s, char ch); // single character
117
118int find(const string_res &s, char search);
119int find(const string_res &s, const string_res &search);
120int find(const string_res &s, const char* search);
121int find(const string_res &s, const char* search, size_t searchsize);
122
123bool includes(const string_res &s, const string_res &search);
124bool includes(const string_res &s, const char* search);
125bool includes(const string_res &s, const char* search, size_t searchsize);
126
127bool startsWith(const string_res &s, const string_res &prefix);
128bool startsWith(const string_res &s, const char* prefix);
129bool startsWith(const string_res &s, const char* prefix, size_t prefixsize);
130
131bool endsWith(const string_res &s, const string_res &suffix);
132bool endsWith(const string_res &s, const char* suffix);
133bool endsWith(const string_res &s, const char* suffix, size_t suffixsize);
134
135int include(const string_res &s, const charclass_res &mask);
136int exclude(const string_res &s, const charclass_res &mask);
137
138// Modifiers
139void padStart(string_res &s, size_t n);
140void padStart(string_res &s, size_t n, char padding);
141void padEnd(string_res &s, size_t n);
142void padEnd(string_res &s, size_t n, char padding);
143
Note: See TracBrowser for help on using the repository browser.