This is an abstract base class to implement an ALib string formatter. A string formatter uses a "format string" to transform arguments into formatted text. The format string defines how the arguments are transformed by offering a "placeholder syntax".
With this information, it becomes clear that different formatter types (derived types that offer a concrete placeholder syntax) all can have the same interface methods. This class defines this abstract interface.
Built-in formatters, provided by module ALib BaseCamp and derived from this class, are FormatterPythonStyle and FormatterJavaStyle.
class lang::basecamp::BaseCamp.
Definition at line 43 of file formatter.hpp.
#include <formatter.hpp>
Public Static Field Index: | |
static ALIB_API SPFormatter | Default |
static ALIB_API threads::RecursiveLock | DefaultLock |
Public Static Field Index: inherited from DbgCriticalSections | |
static ALIB_API const char * | ASSERTION_FORMAT |
Public Field Index: | |
NumberFormat | AlternativeNumberFormat |
NumberFormat | DefaultNumberFormat |
SharedPtr< Formatter > | Next |
Public Field Index: inherited from DbgCriticalSections | |
CallerInfo | DCSAcq |
Source location of acquirement. | |
AssociatedLock * | DCSLock {nullptr} |
const char * | DCSName |
The name of this DCS. Used for debug-output. | |
std::atomic< int > | DCSReaderCnt {0} |
Tracks enter/exit calls of readers. | |
CallerInfo | DCSRel |
Source location of the last "reader" seen. | |
CallerInfo | DCSSAcq |
Source location of acquirement. | |
CallerInfo | DCSSRel |
Source location of the last "reader" seen. | |
std::atomic< int > | DCSWriterCnt {0} |
Tracks enter/exit calls (including readers) | |
int | DCSYieldOrSleepTimeInNS = -1 |
Public Method Index: | |
Formatter () | |
Default Constructor. | |
virtual | ~Formatter () |
virtual SPFormatter | Clone ()=0 |
virtual ALIB_API void | CloneSettings (Formatter &reference) |
template<typename... TArgs> | |
Formatter & | Format (AString &target, TArgs &&... args) |
Formatter & | FormatArgs (AString &target) |
template<typename TAllocator > | |
Formatter & | FormatArgs (AString &target, const boxing::TBoxes< TAllocator > &args) |
virtual BoxesMA & | GetArgContainer () |
virtual BoxesMA & | Reset () |
Public Method Index: inherited from DbgCriticalSections | |
ALIB_FORCE_INLINE | DbgCriticalSections (const char *name) |
ALIB_FORCE_INLINE | ~DbgCriticalSections () |
Destructor. Checks that this instance is unused. | |
ALIB_API void | Acquire (const CallerInfo &ci) const |
ALIB_API void | AcquireShared (const CallerInfo &ci) const |
ALIB_API void | doAssert (bool cond, const CallerInfo &ciAssert, const CallerInfo &ci, const char *headline) const |
ALIB_API void | Release (const CallerInfo &ci) const |
ALIB_API void | ReleaseShared (const CallerInfo &ci) const |
ALIB_FORCE_INLINE void | yieldOrSleep () const |
Protected Field Index: | |
MonoAllocator | allocator |
This allocator is (exclusively) used for field boxes. | |
BoxesMA | boxes |
AString | formatStringBuffer |
A buffer used for conversion of the next argument if it is not of a string-type. | |
Protected Method Index: | |
virtual int | format (AString &target, const String &formatString, const BoxesMA &args, int startArgument)=0 |
template<typename TAllocator > | |
Formatter & | formatLoop (AString &target, const boxing::TBoxes< TAllocator > &args) |
virtual void | initializeFormat () |
|
protected |
This allocator is (exclusively) used for field boxes.
Definition at line 57 of file formatter.hpp.
NumberFormat AlternativeNumberFormat |
This number format is used to store alternative attributes. Likewise DefaultNumberFormat, it is never used directly for formatting. Instead, when processing the placeholder syntax, alternatives get copied from either this object or from DefaultNumberFormat.
This object is initialized in the constructor (of descendants) once to meet the formatting defaults of the corresponding specification.
With the implementations of this class provided with ALib, not all fields in this object are used. The fields used are:
Locale-specific versions of floating point separators:
These are retrieved according to the current locale once in the constructor. To change the locale, these fields can be changed.
Definition at line 112 of file formatter.hpp.
|
protected |
A list of boxes. This is reset with every new invocation of variadic template method Format
Definition at line 61 of file formatter.hpp.
|
static |
A publicly accessible static singleton instance which is can be freely used. Racing conditions in multithreaded applications have to be avoided by locking mutex DefaultLock.
Definition at line 265 of file formatter.hpp.
|
static |
The lock to be set with multithreaded use of Default. If compiler symbol ALIB_DEBUG_CRITICAL_SECTIONS is set, this lock will be attached to the DbgCriticalSections instance in Default during bootstrap. Thus, an assertion will be raised if Default is used without locking this.
Definition at line 276 of file formatter.hpp.
NumberFormat DefaultNumberFormat |
Stores default attributes for formatting numbers. Likewise AlternativeNumberFormat, it usually is not used directly for formatting by descendants. Instead, at the beginning of parsing a next placeholder field, values are copied to a local copy. During the parsing process, values are then modified only in this local copy, probably taken from AlternativeNumberFormat.
This object is to be initialized in the constructor (of descendants) once to meet the formatting defaults of the corresponding specification. If after construction, attribute values of this object are changed, such changes are applied to all number formatting.
Definition at line 83 of file formatter.hpp.
|
protected |
A buffer used for conversion of the next argument if it is not of a string-type.
Definition at line 64 of file formatter.hpp.
An optional, next formatter. If set, this formatter will be invoked for a format string that does not contain recognized placeholders.
Definition at line 120 of file formatter.hpp.
|
inline |
Default Constructor.
Definition at line 127 of file formatter.hpp.
|
inlinevirtual |
Destructs an object of this class. Note that concatenated formatters are not deleted automatically.
Definition at line 141 of file formatter.hpp.
|
pure virtual |
Clones and returns a copy of this formatter.
If a formatter is attached to field Formatter::Next, it is cloned as well (recursively).
Implemented in FormatterJavaStyle, and FormatterPythonStyle.
|
virtual |
Clones the settings from the given formatter.
reference | The formatter to copy settings from. |
Definition at line 95 of file formatter.cpp.
Variadic template method that accepts a target AString and a list of arguments. This is a convenience method to allow single-line format invocations.
static_assert
to disallow the invocation with one variadic argument of type TBoxes or a derived type. This is to ensure that for these box containers, the more efficient method FormatArgs is used.TArgs | Variadic template type list. |
target | An AString that takes the result. |
args | The variadic list of arguments to be used with formatters. |
Definition at line 164 of file formatter.hpp.
|
protectedpure virtual |
The abstract format method that needs to be implemented by descendants. Note that parameter startIdx and the demanded return value together comprise the possibility to use more than one formatter in parallel and to perform multiple format operations on suitable argument lists. This demands the implementation of this method to not copy the format string to the target in the case that no 'escape sequence' was found. For further information, see the general documentation of this class.
target | The AString that takes the result. |
formatString | The format string. |
args | The objects to be used with formatters. |
startArgument | The first object in args to convert. |
Implemented in FormatterStdImpl.
Formats the internal list of arguments that is returned by methods GetArgContainer and Reset.
This method may be more efficient than using inlined variadic method Format and should be preferred if:
target | An AString that takes the result. |
Definition at line 329 of file formatter.hpp.
|
inline |
Same as Format(AString&) but allows specifying an external list of arguments instead of the internally allocated object, which is returned by methods GetArgContainer and Reset.
args | The arguments to be used with formatters. |
target | An AString that takes the result. |
Definition at line 212 of file formatter.hpp.
|
protected |
The format loop implementation. Searches format strings in args and tests if this
or Next is capable of processing it.
target | An AString that takes the result. |
args | The objects to be used with formatters. |
|
inlinevirtual |
Returns an empty vector of arguments, which can be passed to the format interface.
Note: This is nothing more than a recycling strategy.
Definition at line 255 of file formatter.hpp.
|
inlineprotectedvirtual |
Virtual method which is invoked with each invocation of Format. The default implementation does nothing.
Reimplemented in FormatterPythonStyle.
Definition at line 287 of file formatter.hpp.
|
inlinevirtual |
Virtual method used to reset internal states.
It is formatter-depended, which state information is reset. As a sample, derived type FormatterPythonStyle clears its auto-tab and auto-width positions.
The default implementation does nothing.
Reimplemented in FormatterPythonStyle.
Definition at line 247 of file formatter.hpp.