mirror of
https://github.com/warmcat/libwebsockets.git
synced 2025-03-30 00:00:16 +01:00
docs: lws_dll and lws_dll2 documentation 3
This commit is contained in:
parent
49d78fd0de
commit
9bcbefea26
2 changed files with 263 additions and 0 deletions
130
READMEs/README.lws_dll.md
Normal file
130
READMEs/README.lws_dll.md
Normal file
|
@ -0,0 +1,130 @@
|
|||
# lws_dll Doubly-linked list
|
||||
|
||||
## Introduction
|
||||
|
||||
Lws supports two kinds of doubly-linked list, `lws_dll` and `lws_dll2`.
|
||||
|
||||
Unless memory is at a big premium, or it has to work on lws < v3.2, it's
|
||||
best to simply use `lws_dll2`.
|
||||
|
||||

|
||||
|
||||
## How to use
|
||||
|
||||
The basics are the same for lws_dll and lws_dll2.
|
||||
|
||||
The list objects point only to themselves, and you use the `lws_container_of`
|
||||
macro to get a pointer to your struct that contains the list object. Doing
|
||||
it this way
|
||||
|
||||
- the list object does not have to be the first thing in your struct
|
||||
|
||||
- your struct can contain multiple list objects and appear on lists belonging
|
||||
to multiple owners simultaenously,
|
||||
|
||||
### lws_dll Minimal example
|
||||
|
||||
```
|
||||
struct mystruct {
|
||||
....
|
||||
lws_dll list;
|
||||
...
|
||||
};
|
||||
|
||||
lws_dll owner;
|
||||
```
|
||||
|
||||
Adding a mystruct to the owner list (...add_tail() works the same way but adds
|
||||
to the other end of the list)
|
||||
|
||||
```
|
||||
struct mystruct *p;
|
||||
|
||||
...
|
||||
|
||||
lws_dll_add_head(&p->list, &owner);
|
||||
```
|
||||
|
||||
Removing the list object from its owner
|
||||
|
||||
```
|
||||
lws_dll2_remove(&p->list, &owner);
|
||||
```
|
||||
|
||||
If you have a `struct lws_dll *d` pointing to `list` in struct mystruct, you can
|
||||
convert it to a `struct mystruct *p` ike this
|
||||
|
||||
```
|
||||
struct mystruct *p = lws_container_of(d, struct lws_dll, list);
|
||||
```
|
||||
|
||||
### lws_dll2 Minimal example
|
||||
|
||||
|
||||
```
|
||||
struct mystruct {
|
||||
....
|
||||
lws_dll2 list;
|
||||
...
|
||||
};
|
||||
|
||||
lws_dll2_owner owner;
|
||||
```
|
||||
|
||||
Adding a mystruct to the owner list (...add_tail() works the same way but adds
|
||||
to the other end of the list)
|
||||
|
||||
```
|
||||
struct mystruct *p;
|
||||
|
||||
...
|
||||
|
||||
lws_dll2_add_head(&p->list, &owner);
|
||||
```
|
||||
|
||||
Removing the list object from its owner (notice compared to lws_dll, it doesn't
|
||||
need to be told the owner)
|
||||
|
||||
```
|
||||
lws_dll2_remove(&p->list);
|
||||
```
|
||||
|
||||
If you have a `struct lws_dll2 *d` pointing to `list` in struct mystruct, you
|
||||
can convert it to a `struct mystruct *p` ike this
|
||||
|
||||
```
|
||||
struct mystruct *p = lws_container_of(d, struct lws_dll2, list);
|
||||
```
|
||||
|
||||
## Summary Comparing lws_dll and lws_dll2
|
||||
|
||||
- both offer a doubly-linked list object, and (since v3.2) track both the
|
||||
head and tail in an "list owner" object
|
||||
|
||||
- both are initalized by memsetting to 0
|
||||
|
||||
- for `lws_dll`, it reuses an `lws_dll` as the "owner", for `lws_dll2`, there's a
|
||||
specific `lws_dll2_owner` structure for that
|
||||
|
||||
- `lws_dll2_owner` also keeps count of the number of list elements
|
||||
|
||||
- `lws_dll2` knows which owner's list it is participating on. So it can remove
|
||||
itself and update the owner without the caller needing to know its owner.
|
||||
In the case there are several potential owners list objects may be on, this
|
||||
is very convenient.
|
||||
|
||||
- `lws_dll` is simpler and has a smaller footprint (two pointers per entry vs
|
||||
three). But you have to know the exact list owner to perform operations on
|
||||
it.
|
||||
|
||||
## apis
|
||||
|
||||
|function|lws_dll|lws_dll2|
|
||||
|---|---|---|
|
||||
|add entry at head|`void lws_dll_add_head(struct lws_dll *d, struct lws_dll *phead)`|`void lws_dll2_add_head(struct lws_dll2 *d, struct lws_dll2_owner *owner)`|
|
||||
|add entry at tail|`void lws_dll_add_tail(struct lws_dll *d, struct lws_dll *phead);`|`void lws_dll2_add_tail(struct lws_dll2 *d, struct lws_dll2_owner *owner)`|
|
||||
|remove entry from its owning list|`void lws_dll_remove_track_tail(struct lws_dll *d, struct lws_dll *phead)`|`void lws_dll2_add_tail(struct lws_dll2 *d, struct lws_dll2_owner *owner)`|
|
||||
|get owner|(not supported)|`struct lws_dll2_owner * lws_dll2_owner(const struct lws_dll2 *d)`|
|
||||
|check if item is detached from any list|`lws_dll_is_detached(struct lws_dll *d, struct lws_dll *phead)|int lws_dll2_is_detached(const struct lws_dll2 *d)`|
|
||||
|iterate through items on list|`int lws_dll_foreach_safe(struct lws_dll *phead, void *user, int (*cb)(struct lws_dll *d, void *user))|int lws_dll2_foreach_safe(struct lws_dll2_owner *owner, void *user, int (*cb)(struct lws_dll2 *d, void *user))`|
|
||||
|
133
doc-assets/lws_dll.svg
Normal file
133
doc-assets/lws_dll.svg
Normal file
|
@ -0,0 +1,133 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="168.92mm" height="91.174mm" version="1.1" viewBox="0 0 168.92 91.174" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<marker id="a" overflow="visible" orient="auto">
|
||||
<path transform="matrix(-.3 0 0 -.3 .69 0)" d="m8.7186 4.0337-10.926-4.0177 10.926-4.0177c-1.7455 2.3721-1.7354 5.6175-6e-7 8.0354z" fill-rule="evenodd" stroke="#000" stroke-linejoin="round" stroke-width=".625"/>
|
||||
</marker>
|
||||
<marker id="b" overflow="visible" orient="auto">
|
||||
<path transform="matrix(-.3 0 0 -.3 .69 0)" d="m8.7186 4.0337-10.926-4.0177 10.926-4.0177c-1.7455 2.3721-1.7354 5.6175-6e-7 8.0354z" fill-rule="evenodd" stroke="#000" stroke-linejoin="round" stroke-width=".625"/>
|
||||
</marker>
|
||||
<marker id="c" overflow="visible" orient="auto">
|
||||
<path transform="matrix(-.3 0 0 -.3 .69 0)" d="m8.7186 4.0337-10.926-4.0177 10.926-4.0177c-1.7455 2.3721-1.7354 5.6175-6e-7 8.0354z" fill="#a80" fill-rule="evenodd" stroke="#a80" stroke-linejoin="round" stroke-width=".625"/>
|
||||
</marker>
|
||||
<marker id="d" overflow="visible" orient="auto">
|
||||
<path transform="matrix(-.3 0 0 -.3 .69 0)" d="m8.7186 4.0337-10.926-4.0177 10.926-4.0177c-1.7455 2.3721-1.7354 5.6175-6e-7 8.0354z" fill="#a80" fill-rule="evenodd" stroke="#a80" stroke-linejoin="round" stroke-width=".625"/>
|
||||
</marker>
|
||||
<marker id="g" overflow="visible" orient="auto">
|
||||
<path transform="matrix(-.3 0 0 -.3 .69 0)" d="m8.7186 4.0337-10.926-4.0177 10.926-4.0177c-1.7455 2.3721-1.7354 5.6175-6e-7 8.0354z" fill-rule="evenodd" stroke="#000" stroke-linejoin="round" stroke-width=".625"/>
|
||||
</marker>
|
||||
<marker id="j" overflow="visible" orient="auto">
|
||||
<path transform="matrix(-.3 0 0 -.3 .69 0)" d="m8.7186 4.0337-10.926-4.0177 10.926-4.0177c-1.7455 2.3721-1.7354 5.6175-6e-7 8.0354z" fill-rule="evenodd" stroke="#000" stroke-linejoin="round" stroke-width=".625"/>
|
||||
</marker>
|
||||
<marker id="e" overflow="visible" orient="auto">
|
||||
<path transform="matrix(-.3 0 0 -.3 .69 0)" d="m8.7186 4.0337-10.926-4.0177 10.926-4.0177c-1.7455 2.3721-1.7354 5.6175-6e-7 8.0354z" fill-rule="evenodd" stroke="#000" stroke-linejoin="round" stroke-width=".625"/>
|
||||
</marker>
|
||||
<marker id="f" overflow="visible" orient="auto">
|
||||
<path transform="matrix(-.3 0 0 -.3 .69 0)" d="m8.7186 4.0337-10.926-4.0177 10.926-4.0177c-1.7455 2.3721-1.7354 5.6175-6e-7 8.0354z" fill-rule="evenodd" stroke="#000" stroke-linejoin="round" stroke-width=".625"/>
|
||||
</marker>
|
||||
<marker id="i" overflow="visible" orient="auto">
|
||||
<path transform="matrix(-.3 0 0 -.3 .69 0)" d="m8.7186 4.0337-10.926-4.0177 10.926-4.0177c-1.7455 2.3721-1.7354 5.6175-6e-7 8.0354z" fill-rule="evenodd" stroke="#000" stroke-linejoin="round" stroke-width=".625"/>
|
||||
</marker>
|
||||
<marker id="h" overflow="visible" orient="auto">
|
||||
<path transform="matrix(-.3 0 0 -.3 .69 0)" d="m8.7186 4.0337-10.926-4.0177 10.926-4.0177c-1.7455 2.3721-1.7354 5.6175-6e-7 8.0354z" fill-rule="evenodd" stroke="#000" stroke-linejoin="round" stroke-width=".625"/>
|
||||
</marker>
|
||||
<filter id="k" x="-.034384" y="-.067675" width="1.0688" height="1.1353" color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur stdDeviation="12.065"/>
|
||||
</filter>
|
||||
</defs>
|
||||
<g transform="translate(641.6 -54.865)">
|
||||
<rect transform="matrix(.18769 0 0 .18769 -587.78 290.31)" x="-257.78" y="-1225.5" width="842.13" height="427.87" filter="url(#k)"/>
|
||||
<rect x="-637.02" y="59.307" width="158.06" height="80.305" fill="#fff"/>
|
||||
<path d="m-591.76 83.208c19.337 4.4099 14.374 18.712 10.783 24.758" fill="none" marker-end="url(#h)" stroke="#000" stroke-width="1.5888"/>
|
||||
<path d="m-606.65 83.917c-19.337 4.4099-14.374 18.712-10.783 24.758" fill="none" marker-end="url(#i)" stroke="#000" stroke-width="1.5888"/>
|
||||
<g>
|
||||
<rect x="-577.19" y="114.93" width="6.6215" height="3.9628" fill="#f00"/>
|
||||
<text x="-573.70239" y="118.16439" dominant-baseline="auto" fill="#ffffff" font-family="'Open Sans Condensed'" font-size="3.2562px" letter-spacing="0px" stroke-width=".24422" text-align="center" text-anchor="middle" word-spacing="0px" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-573.70239" y="118.16439" fill="#ffffff" stroke-width=".24422">NULL</tspan></text>
|
||||
<rect x="-627.56" y="115.28" width="6.6215" height="3.9628" fill="#f00"/>
|
||||
<text x="-624.07019" y="118.519" dominant-baseline="auto" fill="#ffffff" font-family="'Open Sans Condensed'" font-size="3.2562px" letter-spacing="0px" stroke-width=".24422" text-align="center" text-anchor="middle" word-spacing="0px" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-624.07019" y="118.519" fill="#ffffff" stroke-width=".24422">NULL</tspan></text>
|
||||
</g>
|
||||
<path d="m-512.11 120.77c-3.7306 3.3935-9.0532 4.1311-13.833 3.1214" fill="none" marker-end="url(#f)" stroke="#000" stroke-width="1.5888"/>
|
||||
<g>
|
||||
<rect x="-497.19" y="115.83" width="6.6215" height="3.9628" fill="#f00"/>
|
||||
<text x="-493.70251" y="119.06271" dominant-baseline="auto" fill="#ffffff" font-family="'Open Sans Condensed'" font-size="3.2562px" letter-spacing="0px" stroke-width=".24422" text-align="center" text-anchor="middle" word-spacing="0px" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-493.70251" y="119.06271" fill="#ffffff" stroke-width=".24422">NULL</tspan></text>
|
||||
<rect x="-548.05" y="115.15" width="6.6215" height="3.9628" fill="#f00"/>
|
||||
<circle cx="-612.22" cy="117.26" r="7.5197" fill="#ccc"/>
|
||||
<g>
|
||||
<circle cx="-616.73" cy="117.16" r="4.5456" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".62205" stroke-width=".1248"/>
|
||||
<text x="-616.78351" y="118.60555" dominant-baseline="auto" fill="#ffffff" font-family="'Open Sans Condensed'" font-size="4.346px" letter-spacing="0px" stroke-width=".32595" text-align="center" text-anchor="middle" word-spacing="0px" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-616.78351" y="118.60555" fill="#ffffff" font-weight="bold" stroke-width=".32595">prev</tspan></text>
|
||||
<circle cx="-606.9" cy="117.19" r="4.5456" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".62205" stroke-width=".1248"/>
|
||||
<text x="-606.95825" y="118.64108" dominant-baseline="auto" fill="#ffffff" font-family="'Open Sans Condensed'" font-size="4.346px" letter-spacing="0px" stroke-width=".32595" text-align="center" text-anchor="middle" word-spacing="0px" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-606.95825" y="118.64108" fill="#ffffff" font-weight="bold" stroke-width=".32595">next</tspan></text>
|
||||
<text x="-612.91266" y="130.14314" dominant-baseline="auto" fill="#000000" font-family="'Open Sans Condensed'" font-size="4.346px" letter-spacing="0px" stroke-width=".32595" text-align="center" text-anchor="middle" word-spacing="0px" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-612.91266" y="130.14314" fill="#000000" font-weight="bold" stroke-width=".32595">lws_dll</tspan></text>
|
||||
</g>
|
||||
<circle cx="-506.47" cy="117.75" r="7.5197" fill="#2a7fff"/>
|
||||
<g>
|
||||
<circle cx="-510.98" cy="117.64" r="4.5456" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".62205" stroke-width=".1248"/>
|
||||
<text x="-511.02988" y="119.08846" dominant-baseline="auto" fill="#ffffff" font-family="'Open Sans Condensed'" font-size="4.346px" letter-spacing="0px" stroke-width=".32595" text-align="center" text-anchor="middle" word-spacing="0px" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-511.02988" y="119.08846" fill="#ffffff" font-weight="bold" stroke-width=".32595">prev</tspan></text>
|
||||
<circle cx="-501.15" cy="117.67" r="4.5456" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".62205" stroke-width=".1248"/>
|
||||
<text x="-501.20462" y="119.12399" dominant-baseline="auto" fill="#ffffff" font-family="'Open Sans Condensed'" font-size="4.346px" letter-spacing="0px" stroke-width=".32595" text-align="center" text-anchor="middle" word-spacing="0px" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-501.20462" y="119.12399" fill="#ffffff" font-weight="bold" stroke-width=".32595">next</tspan></text>
|
||||
<text x="-507.15903" y="130.62617" dominant-baseline="auto" fill="#000000" font-family="'Open Sans Condensed'" font-size="4.346px" letter-spacing="0px" stroke-width=".32595" text-align="center" text-anchor="middle" word-spacing="0px" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-507.15903" y="130.62617" fill="#000000" font-weight="bold" stroke-width=".32595">lws_dll2</tspan></text>
|
||||
</g>
|
||||
<circle cx="-518.67" cy="84.947" r="7.5197" fill="#a80"/>
|
||||
<g>
|
||||
<circle cx="-523.17" cy="84.84" r="4.5456" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".62205" stroke-width=".1248"/>
|
||||
<text x="-523.22449" y="86.289391" dominant-baseline="auto" fill="#ffffff" font-family="'Open Sans Condensed'" font-size="4.346px" letter-spacing="0px" stroke-width=".32595" text-align="center" text-anchor="middle" word-spacing="0px" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-523.22449" y="86.289391" fill="#ffffff" font-weight="bold" stroke-width=".32595">head</tspan></text>
|
||||
<text x="-518.72443" y="70.31234" dominant-baseline="auto" fill="#000000" font-family="'Open Sans Condensed'" font-size="4.346px" letter-spacing="0px" stroke-width=".32595" text-align="center" text-anchor="middle" word-spacing="0px" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-518.72443" y="70.31234" fill="#000000" font-weight="bold" stroke-width=".32595">lws_dll2_owner</tspan></text>
|
||||
</g>
|
||||
<circle cx="-518.46" cy="76.37" r="4.5456" fill="#786721"/>
|
||||
<text x="-518.44611" y="77.61422" dominant-baseline="auto" fill="#ffffff" font-family="'Open Sans Condensed'" font-size="3.5001px" letter-spacing="0px" stroke-width=".26251" text-align="center" text-anchor="middle" word-spacing="0px" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-518.44611" y="77.61422" fill="#ffffff" font-weight="bold" stroke-width=".26251">count</tspan></text>
|
||||
<circle cx="-532.76" cy="117.24" r="7.5197" fill="#2a7fff"/>
|
||||
<g>
|
||||
<circle cx="-537.26" cy="117.14" r="4.5456" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".62205" stroke-width=".1248"/>
|
||||
<text x="-537.315" y="118.58688" dominant-baseline="auto" fill="#ffffff" font-family="'Open Sans Condensed'" font-size="4.346px" letter-spacing="0px" stroke-width=".32595" text-align="center" text-anchor="middle" word-spacing="0px" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-537.315" y="118.58688" fill="#ffffff" font-weight="bold" stroke-width=".32595">prev</tspan></text>
|
||||
<circle cx="-527.44" cy="117.17" r="4.5456" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".62205" stroke-width=".1248"/>
|
||||
</g>
|
||||
<g font-family="'Open Sans Condensed'" letter-spacing="0px" text-anchor="middle" word-spacing="0px">
|
||||
<text x="-527.48981" y="118.6224" dominant-baseline="auto" fill="#ffffff" font-size="4.346px" stroke-width=".32595" text-align="center" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-527.48981" y="118.6224" fill="#ffffff" font-weight="bold" stroke-width=".32595">next</tspan></text>
|
||||
<text x="-533.44415" y="130.12459" dominant-baseline="auto" fill="#000000" font-size="4.346px" stroke-width=".32595" text-align="center" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-533.44415" y="130.12459" fill="#000000" font-weight="bold" stroke-width=".32595">lws_dll2</tspan></text>
|
||||
<text x="-544.56732" y="118.38558" dominant-baseline="auto" fill="#ffffff" font-size="3.2562px" stroke-width=".24422" text-align="center" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-544.56732" y="118.38558" fill="#ffffff" stroke-width=".24422">NULL</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<path d="m-526.89 114.31c3.7306-3.3935 9.0532-4.1311 13.833-3.1214" fill="none" marker-end="url(#e)" stroke="#000" stroke-width="1.5888"/>
|
||||
<g>
|
||||
<circle cx="-532.24" cy="109.04" r="4.5456" fill="#a80"/>
|
||||
<text x="-532.22772" y="110.2806" dominant-baseline="auto" fill="#ffffff" font-family="'Open Sans Condensed'" font-size="3.5001px" letter-spacing="0px" stroke-width=".26251" text-align="center" text-anchor="middle" word-spacing="0px" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-532.22772" y="110.2806" fill="#ffffff" font-weight="bold" stroke-width=".26251">owner</tspan></text>
|
||||
<circle cx="-506.49" cy="109.25" r="4.5456" fill="#a80"/>
|
||||
<text x="-506.47632" y="110.49337" dominant-baseline="auto" fill="#ffffff" font-family="'Open Sans Condensed'" font-size="3.5001px" letter-spacing="0px" stroke-width=".26251" text-align="center" text-anchor="middle" word-spacing="0px" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-506.47632" y="110.49337" fill="#ffffff" font-weight="bold" stroke-width=".26251">owner</tspan></text>
|
||||
</g>
|
||||
<g stroke="#000">
|
||||
<path d="m-527.5 85.113c-19.337 4.4099-14.374 18.712-10.783 24.758" fill="none" marker-end="url(#j)" stroke-width="1.5888"/>
|
||||
<path d="m-511.31 85.478c19.337 4.4099 14.374 18.712 10.783 24.758" fill="none" marker-end="url(#g)" stroke-width="1.5888"/>
|
||||
<circle cx="-513.34" cy="84.876" r="4.5456" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".62205" stroke-width=".1248"/>
|
||||
</g>
|
||||
<g>
|
||||
<text x="-513.39923" y="86.324791" dominant-baseline="auto" fill="#ffffff" font-family="'Open Sans Condensed'" font-size="4.346px" letter-spacing="0px" stroke-width=".32595" text-align="center" text-anchor="middle" word-spacing="0px" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-513.39923" y="86.324791" fill="#ffffff" font-weight="bold" stroke-width=".32595">tail</tspan></text>
|
||||
<path d="m-532.42 105.53c1.9571-5.5217 5.719-6.0465 10.286-12.627" fill="none" marker-end="url(#d)" stroke="#a80" stroke-width="1.5888"/>
|
||||
<path d="m-506.07 105.39c-1.9571-5.5218-5.719-6.0466-10.286-12.628" fill="none" marker-end="url(#c)" stroke="#a80" stroke-width="1.5888"/>
|
||||
</g>
|
||||
<g>
|
||||
<circle cx="-586.46" cy="116.88" r="7.5197" fill="#ccc"/>
|
||||
<g>
|
||||
<circle cx="-590.97" cy="116.78" r="4.5456" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".62205" stroke-width=".1248"/>
|
||||
<text x="-591.02338" y="118.22713" dominant-baseline="auto" fill="#ffffff" font-family="'Open Sans Condensed'" font-size="4.346px" letter-spacing="0px" stroke-width=".32595" text-align="center" text-anchor="middle" word-spacing="0px" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-591.02338" y="118.22713" fill="#ffffff" font-weight="bold" stroke-width=".32595">prev</tspan></text>
|
||||
<circle cx="-581.14" cy="116.81" r="4.5456" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".62205" stroke-width=".1248"/>
|
||||
<text x="-581.19806" y="118.26266" dominant-baseline="auto" fill="#ffffff" font-family="'Open Sans Condensed'" font-size="4.346px" letter-spacing="0px" stroke-width=".32595" text-align="center" text-anchor="middle" word-spacing="0px" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-581.19806" y="118.26266" fill="#ffffff" font-weight="bold" stroke-width=".32595">next</tspan></text>
|
||||
<text x="-587.15247" y="129.76485" dominant-baseline="auto" fill="#000000" font-family="'Open Sans Condensed'" font-size="4.346px" letter-spacing="0px" stroke-width=".32595" text-align="center" text-anchor="middle" word-spacing="0px" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-587.15247" y="129.76485" fill="#000000" font-weight="bold" stroke-width=".32595">lws_dll</tspan></text>
|
||||
</g>
|
||||
<circle cx="-599.4" cy="84.001" r="7.5197" fill="#ccc"/>
|
||||
<circle cx="-603.9" cy="83.895" r="4.5456" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".62205" stroke-width=".1248"/>
|
||||
<circle cx="-594.08" cy="83.93" r="4.5456" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".62205" stroke-width=".1248"/>
|
||||
<g font-family="'Open Sans Condensed'" font-size="4.346px" letter-spacing="0px" stroke-width=".32595" text-anchor="middle" word-spacing="0px">
|
||||
<text x="-604.2782" y="85.308311" dominant-baseline="auto" fill="#ffffff" text-align="center" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-604.2782" y="85.308311" fill="#ffffff" font-weight="bold" stroke-width=".32595">next</tspan></text>
|
||||
<text x="-599.28552" y="71.560875" dominant-baseline="auto" fill="#000000" text-align="center" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-599.28552" y="71.560875" fill="#000000" font-weight="bold" stroke-width=".32595">lws_dll</tspan></text>
|
||||
<text x="-593.88544" y="85.272911" dominant-baseline="auto" fill="#ffffff" text-align="center" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-593.88544" y="85.272911" fill="#ffffff" font-weight="bold" stroke-width=".32595">prev</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path d="m-605.77 112.84c3.7306-3.3936 9.0532-4.1312 13.833-3.1214" fill="none" marker-end="url(#b)" stroke="#000" stroke-width="1.5888"/>
|
||||
<path d="m-592.68 120.8c-3.7306 3.3935-9.0532 4.1311-13.833 3.1214" fill="none" marker-end="url(#a)" stroke="#000" stroke-width="1.5888"/>
|
||||
<text x="-620.91577" y="82.28817" dominant-baseline="auto" fill="#4d4d4d" font-family="'Open Sans Condensed'" font-size="4.346px" letter-spacing="0px" stroke-width=".32595" text-align="center" text-anchor="middle" word-spacing="0px" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-620.91577" y="82.28817" fill="#4d4d4d" font-weight="bold" stroke-width=".32595">(head)</tspan></text>
|
||||
<text x="-577.56561" y="82.463707" dominant-baseline="auto" fill="#4d4d4d" font-family="'Open Sans Condensed'" font-size="4.346px" letter-spacing="0px" stroke-width=".32595" text-align="center" text-anchor="middle" word-spacing="0px" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;line-height:1.25;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal" xml:space="preserve"><tspan x="-577.56561" y="82.463707" fill="#4d4d4d" font-weight="bold" stroke-width=".32595">(tail)</tspan></text>
|
||||
</g>
|
||||
<path d="m-559.27 67.394v66.684" fill="none" stroke="#000" stroke-dasharray="0.29795014, 0.29795014" stroke-width=".049658"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 27 KiB |
Loading…
Add table
Reference in a new issue