Previously `_textCache` relied on static constructor inside base classes
`AcediaObject` / `AceduaActor` to be created and filled with necessary
data. This was faulty approach, since their static constructor was only
ever supposed to be called once.
This patch moves `_textCache` creation into `_constructor()` and `T()`,
`P()`, `C()`, `F()` methods.
Make decoder work with byte arrays containing a single complete text,
instead of byte streams with several separate texts.
Moved codecs into "Text" category.
This patch changes how `Feature`s configs work - they are now required
to use a separate config object (each `Feature` their own class, derived
from `FeatureConfig`) that is to be used as a `perconfigobject` storage.
`Feature`s themselves are not supposed to interact with their config
objects directly, instead using JSON-serializable type, which should
allow us a universal way to change `Feature`'s config variables during
execution.
Now Acedia collections provide functionality of `Get...ByPointer()`
method (that allows to fetch values nested into several collection by
JSON pointers) for both `JSONPointer` and `Text` classes.
Previously, each use of `Get...ByPointer()` method caused convertion of
a `Text` into `JSONPointer`, even if used `Text` value did not change.
This patch allows to create `JSONPointer` once and them use that as a
parameter, which should be much faster.
Add method for checking whether certain `Text` is empty (`none` or has
zero recorded characters).
Add methods for converting and deallocation (in the same action) passed
`Text` value into the `string`.
Refactor signal/slots system for more efficieny and better user
interface that allows to disconnect receiver like so:
`OnEvent(receiver).Disconnect()`.
`Feature` is now derived from `AcediaObject` and has an optional ability
to spawn an auxiliary service to compensate (service provides it with a
relatively easy access to an `AcediaActor` object, which can store other
`Actor`s).
`AssociativeArray` by design does not manage keys, automatically
deallocating them, like it can with stored values. This patch adds a
parameter to `Empty()` method that allows it to deallocate all of the
used keys when deallocation all of the values.
As a side effect this patch also fixes a bug that broke
`AssociativeArray` after using `Empty()` method.