82 lines
1.9 KiB
ReStructuredText
82 lines
1.9 KiB
ReStructuredText
.. _implementation:
|
|
|
|
Components
|
|
==========
|
|
|
|
Library dependency tower for *xo-facet*:
|
|
|
|
.. ditaa::
|
|
|
|
+-----------------+
|
|
| xo_facet |
|
|
+-----------------+
|
|
| xo_arena |
|
|
+-----------------+
|
|
| xo_cmake |
|
|
+-----------------+
|
|
|
|
Abstraction tower for *xo-facet* components.
|
|
|
|
.. ditaa::
|
|
:--scale: 0.85
|
|
|
|
+--------------------------------+
|
|
| FacetRegistry |
|
|
+--------------------------------+
|
|
| obj(A,D) |
|
|
+--------------------------------+
|
|
| RRouter(A,D) |
|
|
+--------------------------------+
|
|
| OObject(A,D) |
|
|
+--------------------------------+
|
|
| FacetImplType(A,D) |
|
|
+----------------+---------------+
|
|
| facet [A] | data [D] |
|
|
+----------------+---------------+
|
|
|
|
.. list-table:: Descriptions
|
|
:header-rows: 1
|
|
:widths: 18 30 50
|
|
|
|
* - Component
|
|
- Use
|
|
- Description
|
|
* - ``FacetRegistry``
|
|
- ``FacetRegistry::convert_to<ATo>(obj<AFrom>)``
|
|
- polymorphic conversion between facets
|
|
* - ``obj<A,D>``
|
|
- ``x.foo()``
|
|
- convenience wrapper for interface A, with state D*
|
|
* - ``RRouter<A,D>``
|
|
- ``x.foo()``
|
|
- auto injects data pointer
|
|
* - ``OObject<A,D>``
|
|
- ``x.iface()->foo(x.data(), ..)``
|
|
- fat object pointer. combine i/face + data pointer.
|
|
* - ``FacetImplType<A,D>``
|
|
- ``x.foo(void* data, ..)``
|
|
- implement facet for a particular state datatype;
|
|
explicit type-erased state
|
|
* - facet
|
|
- ``x.foo(void* data, ..)=0``
|
|
- fully abstract interface; explicit type-erased state
|
|
|
|
.. uml::
|
|
:caption: fat-object-pointer layout
|
|
:scale: 99%
|
|
:align: center
|
|
|
|
object z1<<obj>>
|
|
z1 : iface = vt1
|
|
z1 : data = d1
|
|
|
|
object vt1<<interface>>
|
|
vt1 : foo()
|
|
vt1 : bar()
|
|
|
|
object d1<<data>>
|
|
d1 : x = 0.6
|
|
d1 : y = 0.8
|
|
|
|
z1 o-- vt1
|
|
z1 o-- d1
|