sptk2 logo
SPTK Home Page
Classes | Macros | Typedefs | Enumerations | Functions
Utility Classes

Classes

class  sptk::Base64
 Base64 encoding/decoding. More...
 
class  sptk::Buffer
 
class  sptk::BufferStorage
 
class  sptk::CaseInsensitiveCompare
 Case-insensitive string compare class. More...
 
class  sptk::CommandLine
 
class  sptk::DataSource
 
class  sptk::TimeZone
 
class  sptk::DateTime
 
class  sptk::Exception
 SPTK generic exception class. More...
 
class  sptk::TimeoutException
 Timeout exception. More...
 
class  sptk::ConnectionException
 Connection exception. More...
 
class  sptk::DatabaseException
 Database operation exception. More...
 
class  sptk::SOAPException
 SOAP exception. More...
 
class  sptk::HTTPException
 SOAP exception. More...
 
class  sptk::Field
 
class  sptk::FieldList
 
class  sptk::BaseMailConnect
 Base mail socket. More...
 
class  sptk::BaseSocket
 
class  sptk::Host
 
class  sptk::HostCompare
 Case-insensitive host compare class. More...
 
class  sptk::HttpConnect
 HTTP socket. More...
 
class  sptk::Url
 
class  sptk::HttpParams
 
class  sptk::ImapConnect
 
class  sptk::MailMessageBody
 
class  sptk::SmtpConnect
 SMTP socket. More...
 
class  sptk::SSLContext
 
class  sptk::SSLSocket
 
class  sptk::TCPSocketReader
 
class  sptk::TCPSocket
 
class  sptk::String
 
class  sptk::Strings
 
class  sptk::SystemException
 SPTK OS operation exception. More...
 
class  sptk::UniqueInstance
 Unique instance object. More...
 
class  sptk::BaseVariant
 
class  sptk::VariantAdaptors
 
class  sptk::Variant
 
struct  sptk::VariantType
 
class  sptk::MoneyData
 
class  sptk::VariantData
 

Macros

#define throwException(msg)
 Throws exception with file name and line number. More...
 
#define throwTimeoutException(msg)
 Throws timeout exception with file name and line number. More...
 
#define throwConnectionException(msg)
 Throws connection exception with file name and line number. More...
 
#define throwDatabaseException(msg)
 Throws database exception with file name and line number. More...
 
#define throwSOAPException(msg)
 Throws SOAP exception with file name and line number. More...
 
#define THROW_SOCKET_ERROR(msg)   sptk::throwSocketError(msg, __FILE__, __LINE__)
 
#define HAVE_FLTK   0
 Flag indicating if FLTK library is installed.
 
#define HAVE_ODBC   1
 Flag indicating if ODBC library is installed.
 
#define HAVE_SQLITE3   1
 Flag indicating if SQLite3 library is installed.
 
#define HAVE_POSTGRESQL   1
 Flag indicating if LibPQ (PostgreSQL client) library is installed.
 
#define HAVE_FIREBIRD   1
 Flag indicating if Firebird client library is installed.
 
#define HAVE_MYSQL   1
 Flag indicating if MySQL client library is installed.
 
#define HAVE_ORACLE   1
 Flag indicating if Oracle client library is installed.
 
#define HAVE_ASPELL   0
 Flag indicating if ASpell library is installed.
 
#define HAVE_PCRE   0
 Flag indicating if PCRE library is installed.
 
#define HAVE_PCRE2   1
 Flag indicating if PCRE library is installed.
 
#define HAVE_OPENSSL   1
 Flag indicating if OpenSSL library is installed.
 
#define HAVE_ZLIB   1
 Flag indicating if ZLib library is installed.
 
#define HAVE_BROTLI   1
 Flag indicating if BROTLI library is installed.
 
#define WORDS_BIG_ENDIAN
 Flag indicating if byte order for mashine is big endian.
 
#define BITNESS   64
 Number of machine bits.
 
#define USE_NEW_ABI   0
 Flag if new ABI is used.
 
#define USE_GTEST   1
 Flag indicating if GTest library is installed and used.
 
#define CXX_STANDARD   17
 Flag indicating if GTest library is installed and used.
 
#define TEST_DIRECTORY   "/var/www/sites/sptk/publish_version/sptk5/code/test"
 Directory that contains data, used in unit tests.
 

Typedefs

using sptk::SBuffer = std::shared_ptr< Buffer >
 
using sptk::SField = std::shared_ptr< Field >
 
using sptk::FieldList::iterator = std::vector< SField >::iterator
 
using sptk::FieldList::const_iterator = std::vector< SField >::const_iterator
 
using sptk::SHost = std::shared_ptr< Host >
 
using sptk::StringHttpFieldMap = std::map< sptk::String, sptk::String, CaseInsensitiveCompare >
 
using sptk::SharedSSLContext = std::shared_ptr< SSLContext >
 
using sptk::STCPSocket = std::shared_ptr< TCPSocket >
 
using sptk::VariantVector = std::vector< Variant >
 

Enumerations

enum class  sptk::MailMessageType : uint8_t { MailMessageType::PLAIN_TEXT_MESSAGE , MailMessageType::HTML_MESSAGE }
 
enum class  sptk::VariantDataType : uint16_t {
  VariantDataType::VAR_NONE = 0 , VariantDataType::VAR_INT = 1 , VariantDataType::VAR_FLOAT = 2 , VariantDataType::VAR_MONEY = 4 ,
  VariantDataType::VAR_STRING = 8 , VariantDataType::VAR_TEXT = 16 , VariantDataType::VAR_BUFFER = 32 , VariantDataType::VAR_DATE = 64 ,
  VariantDataType::VAR_DATE_TIME = 128 , VariantDataType::VAR_IMAGE_PTR = 256 , VariantDataType::VAR_IMAGE_NDX = 512 , VariantDataType::VAR_INT64 = 1024 ,
  VariantDataType::VAR_BOOL = 2048
}
 

Functions

SP_EXPORT std::ostream & sptk::operator<< (std::ostream &, const Buffer &buffer)
 
SP_EXPORT bool sptk::operator< (const sptk::DateTime &dt1, const sptk::DateTime &dt2)
 
SP_EXPORT bool sptk::operator<= (const sptk::DateTime &dt1, const sptk::DateTime &dt2)
 
SP_EXPORT bool sptk::operator> (const sptk::DateTime &dt1, const sptk::DateTime &dt2)
 
SP_EXPORT bool sptk::operator>= (const sptk::DateTime &dt1, const sptk::DateTime &dt2)
 
SP_EXPORT bool sptk::operator== (const sptk::DateTime &dt1, const sptk::DateTime &dt2)
 
SP_EXPORT bool sptk::operator!= (const sptk::DateTime &dt1, const sptk::DateTime &dt2)
 
SP_EXPORT sptk::DateTime sptk::operator+ (const sptk::DateTime &dt1, const sptk::DateTime::duration &duration)
 
SP_EXPORT sptk::DateTime sptk::operator- (const sptk::DateTime &dt1, const sptk::DateTime::duration &duration)
 
SP_EXPORT sptk::DateTime::duration sptk::operator- (const sptk::DateTime &dt1, const sptk::DateTime &dt2)
 
SP_EXPORT double sptk::duration2seconds (const sptk::DateTime::duration &duration)
 
 sptk::FieldList::FieldList (bool indexed)
 
 sptk::FieldList::FieldList (const FieldList &other)=delete
 
 sptk::FieldList::FieldList (FieldList &&other) noexcept=default
 
FieldListsptk::FieldList::operator= (const FieldList &other)=delete
 
FieldListsptk::FieldList::operator= (FieldList &&other) noexcept=default
 
void sptk::FieldList::clear ()
 
size_t sptk::FieldList::size () const
 
iterator sptk::FieldList::begin ()
 
const_iterator sptk::FieldList::begin () const
 
iterator sptk::FieldList::end ()
 
const_iterator sptk::FieldList::end () const
 
Fieldsptk::FieldList::push_back (const String &fname, bool checkDuplicates)
 
Fieldsptk::FieldList::push_back (const SField &fld)
 
SField sptk::FieldList::findField (const String &fname) const
 
SField sptk::FieldList::fieldByName (const String &fname) const
 
Fieldsptk::FieldList::operator[] (int index)
 
const Fieldsptk::FieldList::operator[] (int index) const
 
Fieldsptk::FieldList::operator[] (const String &fname)
 
const Fieldsptk::FieldList::operator[] (const String &fname) const
 
void sptk::FieldList::exportTo (const xdoc::SNode &node, bool compactMode, bool nullLargeData=false) const
 
SP_EXPORT void sptk::throwSocketError (const String &message, const char *file, int line)
 
 sptk::String::String ()
 
 sptk::String::String (const String &other)=default
 
 sptk::String::String (String &&src) noexcept=default
 
 sptk::String::String (const std::string &str, int64_t id=0)
 
 sptk::String::String (const char *str)
 
 sptk::String::String (const char *str, size_t len, int64_t id=0)
 
 sptk::String::String (size_t len, char ch, int64_t id=0)
 
 sptk::String::~String () noexcept=default
 
Stringsptk::String::operator= (const std::string &si)
 
Stringsptk::String::operator= (const String &other)=default
 
Stringsptk::String::operator= (String &&other) noexcept=default
 
Stringsptk::String::operator= (const char *str)
 
int64_t sptk::String::ident () const
 
void sptk::String::ident (int64_t id)
 
bool sptk::String::in (std::initializer_list< String > list) const
 
bool sptk::String::matches (const String &pattern, const String &options=String()) const
 
Strings sptk::String::split (const String &pattern) const
 
String sptk::String::replace (const String &pattern, const String &replacement) const
 
String sptk::String::toUpperCase () const
 
String sptk::String::toLowerCase () const
 
int sptk::String::toInt () const
 
bool sptk::String::startsWith (const String &subject) const
 
bool sptk::String::contains (const String &subject) const
 
bool sptk::String::endsWith (const String &subject) const
 
String sptk::String::trim () const
 
String SP_EXPORT sptk::upperCase (const sptk::String &str)
 
String SP_EXPORT sptk::lowerCase (const sptk::String &str)
 
String SP_EXPORT sptk::trim (const sptk::String &str)
 
String SP_EXPORT sptk::int2string (int32_t)
 
String SP_EXPORT sptk::int2string (uint32_t)
 
String SP_EXPORT sptk::int2string (int64_t)
 
String SP_EXPORT sptk::int2string (uint64_t)
 
int SP_EXPORT sptk::string2int (const sptk::String &str, int defaultValue=0)
 
int64_t SP_EXPORT sptk::string2int64 (const sptk::String &str, int64_t defaultValue=0)
 
String SP_EXPORT sptk::double2string (double value)
 
double SP_EXPORT sptk::string2double (const sptk::String &str)
 
double SP_EXPORT sptk::string2double (const sptk::String &str, double defaultValue)
 
String SP_EXPORT sptk::capitalizeWords (const sptk::String &str)
 

Detailed Description

Macro Definition Documentation

◆ throwConnectionException

#define throwConnectionException (   msg)
Value:
{ \
std::stringstream err; \
err << msg; \
throw sptk::ConnectionException(err.str(), __FILE__, __LINE__); \
}
Connection exception.
Definition: Exception.h:148

Throws connection exception with file name and line number.

◆ throwDatabaseException

#define throwDatabaseException (   msg)
Value:
{ \
std::stringstream err; \
err << msg; \
throw sptk::DatabaseException(err.str(), __FILE__, __LINE__); \
}
Database operation exception.
Definition: Exception.h:172

Throws database exception with file name and line number.

◆ throwException

#define throwException (   msg)
Value:
{ \
std::stringstream err; \
err << msg; \
throw sptk::Exception(err.str(), __FILE__, __LINE__); \
}
SPTK generic exception class.
Definition: Exception.h:56

Throws exception with file name and line number.

Defines a handy macros that automatically registers filename and line number for the place an exception is thrown from

◆ throwSOAPException

#define throwSOAPException (   msg)
Value:
{ \
std::stringstream err; \
err << msg; \
throw sptk::SOAPException(err.str(), __FILE__, __LINE__); \
}
SOAP exception.
Definition: Exception.h:196

Throws SOAP exception with file name and line number.

◆ throwTimeoutException

#define throwTimeoutException (   msg)
Value:
{ \
std::stringstream err; \
err << msg; \
throw sptk::TimeoutException(err.str(), __FILE__, __LINE__); \
}
Timeout exception.
Definition: Exception.h:124

Throws timeout exception with file name and line number.

Typedef Documentation

◆ const_iterator

using sptk::FieldList::const_iterator = std::vector<SField>::const_iterator

Field const iterator

◆ iterator

using sptk::FieldList::iterator = std::vector<SField>::iterator

Field iterator

◆ StringHttpFieldMap

HTTP fields are implemented as case-insensitive map

◆ VariantVector

using sptk::VariantVector = typedef std::vector<Variant>

Vector of Variant objects

Enumeration Type Documentation

◆ MailMessageType

enum class sptk::MailMessageType : uint8_t
strong

Defines the type of the mail message

Enumerator
PLAIN_TEXT_MESSAGE 

Message has plain text only.

HTML_MESSAGE 

Message has plain text and HTML parts.

◆ VariantDataType

enum class sptk::VariantDataType : uint16_t
strong

Variant types

Enumerator
VAR_NONE 

Undefined.

VAR_INT 

Integer.

VAR_FLOAT 

Floating-point (double)

VAR_MONEY 

Special (integer quantity and scale) money.

VAR_STRING 

String pointer.

VAR_TEXT 

String pointer, corresponding to BLOBS in database.

VAR_BUFFER 

Data pointer, corresponding to BLOBS in database.

VAR_DATE 

DateTime (double)

VAR_DATE_TIME 

DateTime (double)

VAR_IMAGE_PTR 

Image pointer.

VAR_IMAGE_NDX 

Image index in object-specific table of image pointers.

VAR_INT64 

64bit integer

VAR_BOOL 

Boolean.

Function Documentation

◆ begin() [1/2]

iterator sptk::FieldList::begin ( )
inline

Begin iterator

◆ begin() [2/2]

const_iterator sptk::FieldList::begin ( ) const
inline

Begin const iterator

◆ capitalizeWords()

String SP_EXPORT sptk::capitalizeWords ( const sptk::String str)

Capitalizes all the words in string

◆ clear()

void sptk::FieldList::clear ( )

Clears the field list

◆ contains()

bool sptk::String::contains ( const String subject) const

Returns true if the string contains subject

Parameters
subjectSubject to look for

◆ double2string()

String SP_EXPORT sptk::double2string ( double  value)

Converts double to string, using fixed format. Any trailing zeros are truncated.

Parameters
valueDouble value
Returns
string presentation of double

◆ duration2seconds()

SP_EXPORT double sptk::duration2seconds ( const sptk::DateTime::duration duration)

Convert duration into seconds, with 1 msec accuracy

◆ end() [1/2]

iterator sptk::FieldList::end ( )
inline

End iterator

◆ end() [2/2]

const_iterator sptk::FieldList::end ( ) const
inline

End const iterator

◆ endsWith()

bool sptk::String::endsWith ( const String subject) const

Returns true if the string ends with subject

Parameters
subjectSubject to look for

◆ exportTo()

void sptk::FieldList::exportTo ( const xdoc::SNode &  node,
bool  compactMode,
bool  nullLargeData = false 
) const

Exports data into XDoc node

The compact XML modes means that fields values are stored as attributes, w/o type information. Otherwise, fields are stored as subnodes, with the field information stored as attributes.

Parameters
nodeXDoc node to store fields into
compactCompact XML export flag
nullLargeDataSet text fileds to null if data length is 256 bytes or longer

◆ fieldByName()

SField sptk::FieldList::fieldByName ( const String fname) const
inline

Finds a field by the field name

Fast field lookup using std::map.

Parameters
fnameField name
Returns
CField pointer, or throw exception not found

◆ FieldList() [1/3]

sptk::FieldList::FieldList ( bool  indexed)
explicit

Default constructor

Parameters
indexedIf you want to have a field index by name added. Such index speeds up the search of the field by name, but increases the occupied memory.
compactXmlModeCompact XML export flag,
See also
xmlMode for details

◆ FieldList() [2/3]

sptk::FieldList::FieldList ( const FieldList other)
delete

Copy constructor

Parameters
otherOther field list

◆ FieldList() [3/3]

sptk::FieldList::FieldList ( FieldList &&  other)
defaultnoexcept

Move constructor

Parameters
otherOther field list

◆ findField()

SField sptk::FieldList::findField ( const String fname) const

Finds a field by the field name

Fast field lookup using std::map.

Parameters
fnameField name
Returns
CField pointer, or 0L if not found

◆ ident() [1/2]

int64_t sptk::String::ident ( ) const
inline

Returns string ID

◆ ident() [2/2]

void sptk::String::ident ( int64_t  id)
inline

Sets string ID

◆ in()

bool sptk::String::in ( std::initializer_list< String list) const

Check if string is in the list

Parameters
listList of values
Returns
true if string is in the list

◆ int2string() [1/4]

String SP_EXPORT sptk::int2string ( int32_t  )

Converts int32_t to string

Referenced by sptk::CLocation::toString().

◆ int2string() [2/4]

String SP_EXPORT sptk::int2string ( int64_t  )

Converts uint64_t to string

◆ int2string() [3/4]

String SP_EXPORT sptk::int2string ( uint32_t  )

Converts uint32_t to string

◆ int2string() [4/4]

String SP_EXPORT sptk::int2string ( uint64_t  )

Converts uint64_t to string

◆ lowerCase()

String SP_EXPORT sptk::lowerCase ( const sptk::String str)

Converts string to lower case

◆ matches()

bool sptk::String::matches ( const String pattern,
const String options = String() 
) const

Checks if string is matching with regular expression pattern

Parameters
patternRegular expression pattern
optionsRegular expression options (
See also
class CRegExp)

◆ operator!=()

SP_EXPORT bool sptk::operator!= ( const sptk::DateTime dt1,
const sptk::DateTime dt2 
)

Compares DateTime values

◆ operator+()

SP_EXPORT sptk::DateTime sptk::operator+ ( const sptk::DateTime dt1,
const sptk::DateTime::duration duration 
)

Adds two DateTime values

◆ operator-() [1/2]

SP_EXPORT sptk::DateTime::duration sptk::operator- ( const sptk::DateTime dt1,
const sptk::DateTime dt2 
)

Subtracts two DateTime values

◆ operator-() [2/2]

SP_EXPORT sptk::DateTime sptk::operator- ( const sptk::DateTime dt1,
const sptk::DateTime::duration duration 
)

Adds two DateTime values

◆ operator<()

SP_EXPORT bool sptk::operator< ( const sptk::DateTime dt1,
const sptk::DateTime dt2 
)

Compares DateTime values

◆ operator<<()

SP_EXPORT std::ostream & sptk::operator<< ( std::ostream &  ,
const Buffer buffer 
)

Print buffer to ostream as hexadecimal dump

◆ operator<=()

SP_EXPORT bool sptk::operator<= ( const sptk::DateTime dt1,
const sptk::DateTime dt2 
)

Compares DateTime values

◆ operator=() [1/6]

String & sptk::String::operator= ( const char *  str)
inline

Assignment operator

Parameters
strSource string

◆ operator=() [2/6]

FieldList & sptk::FieldList::operator= ( const FieldList other)
delete

Copy assignment

Parameters
otherOther field list

◆ operator=() [3/6]

String & sptk::String::operator= ( const std::string &  si)
inline

Assignment operator

Parameters
siSource string

◆ operator=() [4/6]

String & sptk::String::operator= ( const String other)
default

Copy assignment operator

Parameters
otherSource string

◆ operator=() [5/6]

FieldList & sptk::FieldList::operator= ( FieldList &&  other)
defaultnoexcept

Copy assignment

Parameters
otherOther field list

◆ operator=() [6/6]

String & sptk::String::operator= ( String &&  other)
defaultnoexcept

Copy assignment operator

Parameters
otherSource string Move assignment operator
otherSource string

◆ operator==()

SP_EXPORT bool sptk::operator== ( const sptk::DateTime dt1,
const sptk::DateTime dt2 
)

Compares DateTime values

◆ operator>()

SP_EXPORT bool sptk::operator> ( const sptk::DateTime dt1,
const sptk::DateTime dt2 
)

Compares DateTime values

◆ operator>=()

SP_EXPORT bool sptk::operator>= ( const sptk::DateTime dt1,
const sptk::DateTime dt2 
)

Compares DateTime values

◆ operator[]() [1/4]

Field & sptk::FieldList::operator[] ( const String fname)
inline

Field access by field name, non-const version

Parameters
fnameField name
Returns
field reference

◆ operator[]() [2/4]

const Field & sptk::FieldList::operator[] ( const String fname) const
inline

Field access by field name, const version

Parameters
fnameField name
Returns
field reference

◆ operator[]() [3/4]

Field & sptk::FieldList::operator[] ( int  index)
inline

Field access by field index, non-const version

Parameters
indexField index
Returns
field reference

◆ operator[]() [4/4]

const Field & sptk::FieldList::operator[] ( int  index) const
inline

Field access by field index, const version

Parameters
indexField index
Returns
field reference

◆ push_back() [1/2]

Field & sptk::FieldList::push_back ( const SField &  fld)

Adds a new field int the list without creating a new copy of the field.

This method is useful if you create a new field with the new() operator. You shouldn't delete such fields manually - they would be maintained by CFieldList class.

Parameters
fldField name
Returns
new field reference

◆ push_back() [2/2]

Field & sptk::FieldList::push_back ( const String fname,
bool  checkDuplicates 
)

Adds a new field int the list

Creates and returns a new field.

Parameters
fnameField name
checkDuplicatesIf true check if the field already exists in the list
Returns
new field reference

◆ replace()

String sptk::String::replace ( const String pattern,
const String replacement 
) const

Returns string with regular expression pattern replaced to replacement string

Replacement string may optionally use references to pattern's group

Returns
Processed string
Parameters
patternRegular expression pattern
replacementReplacement string

◆ size()

size_t sptk::FieldList::size ( ) const
inline

Returns the nummber of fields in the list

◆ split()

Strings sptk::String::split ( const String pattern) const

Returns strings produced from current string by splitting it using regular expression pattern

Parameters
patternRegular expression pattern

◆ startsWith()

bool sptk::String::startsWith ( const String subject) const

Returns true if the string starts from subject

Parameters
subjectSubject to look for

◆ String() [1/7]

sptk::String::String ( )
inline

Default constructor

◆ String() [2/7]

sptk::String::String ( const char *  str)
inline

Constructor

Parameters
strSource string
lenOptional string id

◆ String() [3/7]

sptk::String::String ( const char *  str,
size_t  len,
int64_t  id = 0 
)
inline

Constructor

Parameters
strSource string
lenString length
idString id

◆ String() [4/7]

sptk::String::String ( const std::string &  str,
int64_t  id = 0 
)
inline

Constructor

Parameters
strSource string
idOptional string id

◆ String() [5/7]

sptk::String::String ( const String other)
default

Copy constructor

Parameters
strOther object

◆ String() [6/7]

sptk::String::String ( size_t  len,
char  ch,
int64_t  id = 0 
)
inline

Constructor

Parameters
lenString length
chFill character
idOptional string id

◆ String() [7/7]

sptk::String::String ( String &&  src)
defaultnoexcept

Move constructor

Parameters
srcOther object

◆ string2double() [1/2]

double SP_EXPORT sptk::string2double ( const sptk::String str)

Converts string to double. The exception is thrown for unsuccessful conversion

◆ string2double() [2/2]

double SP_EXPORT sptk::string2double ( const sptk::String str,
double  defaultValue 
)

Converts string to double. The optional default value is used for unsuccessful conversion

◆ string2int()

int SP_EXPORT sptk::string2int ( const sptk::String str,
int  defaultValue = 0 
)

Converts string to integer. The optional default value is used for unsuccessful conversion

◆ string2int64()

int64_t SP_EXPORT sptk::string2int64 ( const sptk::String str,
int64_t  defaultValue = 0 
)

Converts string to int64. The optional default value is used for unsuccessful conversion

◆ throwSocketError()

SP_EXPORT void sptk::throwSocketError ( const String message,
const char *  file,
int  line 
)

Throws socket exception with error description retrieved from socket state

Parameters
messageError message
fileSource file name
lineSource file line number

◆ toInt()

int sptk::String::toInt ( ) const

Converts string to integer

◆ toLowerCase()

String sptk::String::toLowerCase ( ) const

Returns upper case version of the string

◆ toUpperCase()

String sptk::String::toUpperCase ( ) const

Returns upper case version of the string

◆ trim() [1/2]

String sptk::String::trim ( ) const

Returns trimmed string

◆ trim() [2/2]

String SP_EXPORT sptk::trim ( const sptk::String str)

Trims string to remove leading and trailing spaces

◆ upperCase()

String SP_EXPORT sptk::upperCase ( const sptk::String str)

Converts string to upper case

◆ ~String()

sptk::String::~String ( )
defaultnoexcept

Destructor


Fri Oct 14 2022 09:58:32: SPTK 5.4.1