source: libcfa/src/containers/string_res.hfa@ 804bf677

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

String hybrid: Basic cases of solo alloc now working

  • 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_avail_until_gc( VbyteHeap * heap );
37const char * DEBUG_string_heap_start( VbyteHeap * heap );
38
39
40//######################### String #########################
41
42// A dynamically-sized string
43struct string_res {
44 HandleNode Handle; // chars, start, end, global neighbours
45 bool shareEditSet_owns_ulink;
46 string_res * shareEditSet_prev;
47 string_res * shareEditSet_next;
48};
49
50
51//######################### charclass_res #########################
52
53struct charclass_res {
54 string_res chars;
55};
56
57void ?{}( charclass_res & ) = void;
58void ?{}( charclass_res &, charclass_res) = void;
59charclass_res ?=?( charclass_res &, charclass_res) = void;
60void ?{}( charclass_res &, const string_res & chars);
61void ?{}( charclass_res &, const char * chars );
62void ?{}( charclass_res &, const char * chars, size_t charssize );
63void ^?{}( charclass_res & );
64
65
66//######################### String #########################
67
68// Getters
69size_t size(const string_res &s);
70
71// Constructors, Assignment Operators, Destructor
72void ?{}(string_res &s); // empty string
73void ?{}(string_res &s, const char* initial); // copy from string literal (NULL-terminated)
74void ?{}(string_res &s, const char* buffer, size_t bsize); // copy specific length from buffer
75
76void ?{}(string_res &s, const string_res & s2) = void;
77void ?{}(string_res &s, string_res & s2) = void;
78
79enum StrResInitMode { COPY_VALUE, SHARE_EDITS };
80void ?{}(string_res &s, const string_res & src, StrResInitMode, size_t start, size_t end );
81static inline void ?{}(string_res &s, const string_res & src, StrResInitMode mode ) {
82 ?{}( s, src, mode, 0, size(src));
83}
84
85void assign(string_res &s, const char* buffer, size_t bsize); // copy specific length from buffer
86void ?=?(string_res &s, const char* other); // copy from string literal (NULL-terminated)
87void ?=?(string_res &s, const string_res &other);
88void ?=?(string_res &s, string_res &other);
89void ?=?(string_res &s, char other);
90
91void ^?{}(string_res &s);
92
93// IO Operator
94ofstream & ?|?(ofstream &out, const string_res &s);
95void ?|?(ofstream &out, const string_res &s);
96
97// Concatenation
98void ?+=?(string_res &s, char other); // append a character
99void ?+=?(string_res &s, const string_res &s2); // append-concatenate to first string
100void ?+=?(string_res &s, const char* other);
101void append(string_res &s, const char* buffer, size_t bsize);
102
103// Character access
104void assignAt(const string_res &s, size_t index, char val);
105char ?[?](const string_res &s, size_t index); // Mike changed to ret by val from Sunjay's ref, to match Peter's
106//char codePointAt(const string_res &s, size_t index); // revisit under Unicode
107
108// Comparisons
109bool ?==?(const string_res &s, const string_res &other);
110bool ?!=?(const string_res &s, const string_res &other);
111bool ?==?(const string_res &s, const char* other);
112bool ?!=?(const string_res &s, const char* other);
113
114// String search
115bool contains(const string_res &s, char ch); // single character
116
117int find(const string_res &s, char search);
118int find(const string_res &s, const string_res &search);
119int find(const string_res &s, const char* search);
120int find(const string_res &s, const char* search, size_t searchsize);
121
122bool includes(const string_res &s, const string_res &search);
123bool includes(const string_res &s, const char* search);
124bool includes(const string_res &s, const char* search, size_t searchsize);
125
126bool startsWith(const string_res &s, const string_res &prefix);
127bool startsWith(const string_res &s, const char* prefix);
128bool startsWith(const string_res &s, const char* prefix, size_t prefixsize);
129
130bool endsWith(const string_res &s, const string_res &suffix);
131bool endsWith(const string_res &s, const char* suffix);
132bool endsWith(const string_res &s, const char* suffix, size_t suffixsize);
133
134int include(const string_res &s, const charclass_res &mask);
135int exclude(const string_res &s, const charclass_res &mask);
136
137// Modifiers
138void padStart(string_res &s, size_t n);
139void padStart(string_res &s, size_t n, char padding);
140void padEnd(string_res &s, size_t n);
141void padEnd(string_res &s, size_t n, char padding);
142
Note: See TracBrowser for help on using the repository browser.