fltk/FL/Fl_String.H
ManoloFLTK a56c48079e Fix "\todo Complete documentation of class Fl_String"
Also
- fix "\todo Unicode?" in Fl_Text_Display::display_insert() after verification
- fix "\todo [Internal] The user_data value must be implemented using \p fl_intptr_t"
because that's now in place.
2023-02-06 10:34:47 +01:00

115 lines
3.3 KiB
C++

//
// Basic Fl_String header for the Fast Light Tool Kit (FLTK).
//
// Copyright 2021-2022 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 FL/Fl_String.H
Basic Fl_String class for FLTK.
*/
/**
Fl_String is the basic string class for FLTK.
In this version Fl_String can be used to store strings, copy strings,
and move strings. There are no string manipulation methods yet.
Fl_String can hold the value of an Fl_Input widget including \e nul bytes
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.
The string value() can be an empty string \c "" or \c NULL.
If value() is not \c NULL it is guaranteed that the string is terminated by
a trailing \c nul byte even if the string contains embedded \c nul bytes.
The method size() returns the full string size, whether the string contains
embedded \c nul bytes or not. The special method slen() returns 0 if value()
is \c NULL, otherwise the same as \c strlen() would do.
Examples:
\code
Fl_String np(NULL);
printf(" np : value = %p, size = %d, slen = %d\n", np.value(), np.size(), np.slen());
Fl_String empty("");
printf(" empty : value = %p, size = %d\n", empty.value(), empty.size());
Fl_String fltk("FLTK");
Fl_Input i(0, 0, 0, 0);
i.value("abc\0def", 7);
Fl_String str(i.value(), i.size());
printf(" str : strlen = %lu, size = %d, capacity = %d\n",
strlen(str.value()), str.size(), str.capacity());
Output:
np : value = (nil), size = 0, slen = 0
empty : value = 0x562840befbf0, size = 0
str : strlen = 3, size = 7, capacity = 15
\endcode
\since 1.4.0
*/
class Fl_String {
private:
int size_;
char *value_;
int capacity_;
public:
Fl_String();
Fl_String(const char *str);
Fl_String(const char *str, int size);
// copy constructor
Fl_String(const Fl_String &in);
// copy assignment operator
Fl_String& operator=(const Fl_String &in);
// assignment operator for 'const char *'
Fl_String& operator=(const char *in);
virtual ~Fl_String();
private:
void init();
void alloc_buf(int size, bool preserve_text=false);
void release();
public:
void value(const char *str);
void value(const char *str, int len);
/** Returns a pointer to the first character stored in the object */
const char *value() const { return value_; }
/** Returns a pointer to the first byte stored in the object */
char *buffer() { return value_; }
/** Returns the number of bytes currently stored in the object */
int size() const { return size_; }
int slen() const;
int capacity() const;
void capacity(int num_bytes);
void debug(const char *info = 0) const; // output string info
void hexdump(const char *info = 0) const; // output string info + hexdump
}; // class Fl_String
#endif // _FL_Fl_String_H_