annotate doc/manual/manual_dyncallback_api.tex @ 467:b47168dacba6

manual: - adding aggregate passing and returning info for x64 (win and sysv, however, *only* w/ respect to types supported by dyncall) - python binding text cleanup and sync with current binding version - added suite_aggrs description and cleaned up other test suite descriptions a bit - update list of calling convention modes - cleanup and minor other fixes (e.g. changed \newpage in many places to \clearpage to avoid hitting float limit, crlf->cr, ...)
author Tassilo Philipp
date Fri, 04 Feb 2022 23:54:42 +0100
parents 1d68b4778979
children 17287342e273
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
467
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
1 %//////////////////////////////////////////////////////////////////////////////
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
2 %
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
3 % Copyright (c) 2007,2013 Daniel Adler <dadler@uni-goettingen.de>,
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
4 % Tassilo Philipp <tphilipp@potion-studios.com>
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
5 %
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
6 % Permission to use, copy, modify, and distribute this software for any
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
7 % purpose with or without fee is hereby granted, provided that the above
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
8 % copyright notice and this permission notice appear in all copies.
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
9 %
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
10 % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
11 % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
12 % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
13 % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
14 % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
15 % ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
16 % OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
17 %
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
18 %//////////////////////////////////////////////////////////////////////////////
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
19
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
20 \clearpage
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
21 \section{\emph{Dyncallback} C library API}
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
22
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
23 This library extends \product{dyncall} with function callback support, allowing
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
24 the user to dynamically create a callback object that can be called directly,
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
25 or passed to functions expecting a function-pointer as argument.\\
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
26 \\
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
27 Invoking a \product{dyncallback} calls into a user-defined unified handler that
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
28 permits iteration and thus dynamic handling over the called-back-function's
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
29 parameters.\\
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
30 \\
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
31 The flexibility is constrained by the set of supported types, though.\\
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
32 \\
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
33 For style conventions and supported types, see \product{dyncall} API section.
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
34 In order to use \product{dyncallback}, include {\tt "dyncall\_callback.h"}.
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
35
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
36 \subsection{Callback Object}
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
37
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
38 The \emph{Callback Object} is the core component to this library.
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
39
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
40 \paragraph{Types}
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
41
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
42 \begin{lstlisting}[language=c]
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
43 typedef struct DCCallback DCCallback;
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
44 \end{lstlisting}
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
45
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
46 \paragraph{Details}
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
47 The \emph{Callback Object} is an object that mimics a fully typed function
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
48 call to another function (a generic callback handler, in this case).\\
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
49 \\
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
50 This means, a pointer to this object is passed to a function accepting a pointer
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
51 to a callback function \emph{as the very callback function pointer itself}.
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
52 Or, if called directly, cast a pointer to this object to a function pointer and
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
53 issue a call.
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
54
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
55
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
56 \subsection{Allocation}
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
57
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
58 \paragraph{Functions}
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
59
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
60 \begin{lstlisting}[language=c]
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
61 DCCallback* dcbNewCallback(const char* signature,
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
62 DCCallbackHandler* funcptr,
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
63 void* userdata,
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
64 DCaggr** aggrs);
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
65 void dcbFreeCallback(DCCallback* pcb);
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
66 \end{lstlisting}
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
67
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
68 \lstinline{dcbNewCallback} creates and initializes a new \emph{Callback} object,
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
69 where \lstinline{signature} is the needed function signature (format is the
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
70 one outlined in the language bindings-section of this manual, see Table \ref{sigchar})
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
71 of the function to mimic, \lstinline{funcptr} is a pointer to a callback handler,
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
72 and \lstinline{userdata} a pointer to custom data that might be useful in the
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
73 handler.
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
74 Use \lstinline{dcbFreeCallback} to destroy the \emph{Callback} object.\\
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
75 \\
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
76 As with \capi{dcNewCallVM}/\capi{dcFree}, this will allocate memory using the
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
77 system allocators or custom overrides.
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
78
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
79
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
80 \subsection{Callback handler}
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
81
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
82 The unified callback handler's declaration used when creating a \capi{DCCallback}
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
83 is:
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
84
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
85 \begin{lstlisting}
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
86 char cbHandler(DCCallback* cb,
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
87 DCArgs* args,
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
88 DCValue* result,
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
89 void* userdata);
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
90 \end{lstlisting}
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
91
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
92 \capi{cb} is a pointer to the \capi{DCCallback} object in use, \capi{args} allows
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
93 for dynamic iteration over the called-back-function's arguments (input) and
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
94 \capi{result} is a pointer to a \capi{DCValue} object in order to store the
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
95 callback's return value (output, to be set by handler).\\
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
96 Finally, \capi{userdata} is a pointer to some user defined data that can be
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
97 set when creating the callback object.
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
98 The handler itself returns a signature character (see Table \ref{sigchar}) specifying the
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
99 data type used for \capi{result}.
b47168dacba6 manual:
Tassilo Philipp
parents: 67
diff changeset
100