summaryrefslogtreecommitdiff
path: root/src/Fl_String.H
diff options
context:
space:
mode:
Diffstat (limited to 'src/Fl_String.H')
-rw-r--r--src/Fl_String.H133
1 files changed, 133 insertions, 0 deletions
diff --git a/src/Fl_String.H b/src/Fl_String.H
new file mode 100644
index 000000000..8c8569e8d
--- /dev/null
+++ b/src/Fl_String.H
@@ -0,0 +1,133 @@
+//
+// Basic Fl_String header for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 2021-2023 by Bill Spitzak and others.
+//
+// This library is free software. Distribution and use rights are outlined in
+// the file "COPYING" which should have been included with this file. If this
+// file is missing or damaged, see the license at:
+//
+// https://www.fltk.org/COPYING.php
+//
+// Please see the following page on how to report bugs and issues:
+//
+// https://www.fltk.org/bugs.php
+//
+
+#ifndef _FL_Fl_String_H_
+#define _FL_Fl_String_H_
+
+/** \file src/Fl_String.H
+ Basic Fl_String class for FLTK.
+*/
+
+#include <FL/Fl_Export.H>
+
+// See: https://en.cppreference.com/w/cpp/string/basic_string/basic_string
+
+/**
+ Fl_String is the basic string class for FLTK.
+
+ In this version Fl_String can be used to store strings, copy strings,
+ move strings, and do basic string manipulation. Fl_String implements a
+ subset of std::string with a couple of extensions. std::string should be
+ a drop-in if we ever decide to allow templates and the std library.
+
+ Fl_String always maintains a trailing \e nul byte, but can also contain
+ \e nul bytes inside the string if the constructor
+ Fl_String(const char *str, int size) is used.
+
+ Assignment and copy constructors \b copy the string value such that the
+ source string can be freed immediately after the assignment.
+
+ c_str() and data() can be an empty string \c "", but never be \c NULL.
+
+ The method size() returns the full string size, whether the string contains
+ embedded \c nul bytes or not. The special method Fl_String::strlen() returns
+ the length of the string up to the first \e nul.
+
+ All methods of Fl_String work on a byte level. They are not UTF-8 aware,
+ but may hold and manipulate UTF-8 strings if done with care.
+
+ \since 1.4.0
+*/
+class FL_EXPORT Fl_String {
+
+private:
+ /*
+ FLTK does no small string optimization.
+ If the string is empty and capacity is not set, buffer_ will be NULL.
+ */
+ char *buffer_;
+ int size_;
+ int capacity_;
+
+ void init_();
+ void grow_(int n);
+ void shrink_(int n);
+ Fl_String &replace_(int at, int n_del, const char *src, int n_ins);
+
+protected:
+ static const char NUL;
+
+public:
+ static const int npos;
+
+ // ---- Assignment
+ Fl_String();
+ Fl_String(const Fl_String &str);
+ Fl_String(const char *cstr);
+ Fl_String(const char *str, int size);
+ ~Fl_String();
+ Fl_String& operator=(const Fl_String &str);
+ Fl_String& operator=(const char *cstr);
+ Fl_String &assign(const Fl_String &str);
+ Fl_String &assign(const char *cstr);
+ Fl_String &assign(const char *str, int size);
+
+ // ---- Element Access
+ char at(int pos) const;
+ char operator[](int n) const;
+ char &operator[](int n);
+ const char *data() const;
+ char *data();
+ const char *c_str() const;
+
+ // ---- Capacity
+ bool empty() const;
+ int size() const;
+ void reserve(int n);
+ int capacity() const;
+ void shrink_to_fit();
+
+ // --- Operations
+ void clear();
+ Fl_String &insert(int at, const char *src, int n_ins=npos);
+ Fl_String &insert(int at, const Fl_String &src);
+ Fl_String &erase(int at, int n_del);
+ void push_back(char c);
+ void pop_back();
+ Fl_String &append(const char *src, int n_ins=npos);
+ Fl_String &append(const Fl_String &src);
+ Fl_String &append(char c);
+ Fl_String &operator+=(const char *src);
+ Fl_String &operator+=(const Fl_String &src);
+ Fl_String &operator+=(char c);
+ int find(const Fl_String &needle, int start_pos=0) const;
+ Fl_String &replace(int at, int n_del, const char *src, int n_ins=npos);
+ Fl_String &replace(int at, int n_del, const Fl_String &src);
+ Fl_String substr(int pos=0, int n=npos) const;
+ void resize(int n);
+
+ // --- Non Standard
+ int strlen() const;
+ void debug(const char *info = 0) const;
+ void hexdump(const char *info = 0) const;
+}; // class Fl_String
+
+// ---- Non-member functions
+FL_EXPORT Fl_String operator+(const Fl_String& lhs, const Fl_String& rhs);
+FL_EXPORT Fl_String operator+(const Fl_String& lhs, const char* rhs);
+FL_EXPORT bool operator==(const Fl_String & lhs, const Fl_String & rhs);
+
+#endif // _FL_Fl_String_H_