GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages


Manual Reference Pages  -  DYNCALLBACK (3)

NAME

dyncallback - callback interface of dyncall

CONTENTS

Synopsis
Description
Example
See Also
Authors

SYNOPSIS


.In dyncall_callback.h DCCallback * dcbNewCallback const char * signature DCCallbackHandler * funcptr void * userdata void dcbInitCallback DCCallback * pcb const char * signature DCCallbackHandler * funcptr void * userdata void dcbFreeCallback DCCallback * pcb void dcbGetUserData DCCallback * pcb

DESCRIPTION

The dyncallback dyncall library has an interface to create callback objects, that can be passed to functions as callback arguments. In other words, a pointer to the callback object can be "called", directly. The callback handler then allows iterating dynamically over the arguments once called back.

dcbNewCallback creates a new callback object, where signature is a signature string describing the function to be called back (see manual for format). This is needed for dyncallback dyncallback to correctly prepare the arguments passed in by the function that calls the callback handler. Note that the handler doesn’t return the value specified in the signature, directly, but simply ’i’ or ’f’ depending on whether it is a integral or floating point type. The return value itself is stored where the handler’s 3rd parameter points to (see example). funcptr is a pointer to the dyncallback dyncallback callback handler (see below), and userdata a pointer to arbitrary user data you want to use in the callback handler. Use the returned pointer as callback argument in functions requiring a callback function pointer.

dcbInitCallback (re)initialize the callback object.

dcbFreeCallback destroys and frees the callback handler.

dcbGetUserData returns a pointer to the userdata passed to the callback object on creation or initialization.

Declaration of a dyncallback handler (following function pointer definition in dyncallback/dyncall_callback.h):

char cbHandler(DCCallback* cb,
               DCArgs*     args,
               DCValue*    result,
               void*       userdata);

cb is a pointer to the DCCallback object in use dyncallback result is a pointer to a DCValue object in order to store the callback’s return value (output, to be set by handler). Finally, userdata is a pointer to some user defined data that can be set when creating the callback object. The handler itself returns a signature character (see manual for format) specifying the data type used for result.

EXAMPLE

Let’s say, we want to create a callback object and call it. For simplicity, this example will omit passing it as a function pointer to a function (e.g. compar in qsort(), etc.) and demonstrate calling it, directly. First, we need to define our callback handler - the following handler illustrates how to access the passed- in arguments:
char cbHandler(DCCallback* cb,
               DCArgs*     args,
               DCValue*    result,
               void*       userdata)
{
  int* ud = (int*)userdata;
  int       arg1 = dcbArgInt     (args);
  float     arg2 = dcbArgFloat   (args);
  short     arg3 = dcbArgShort   (args);
  double    arg4 = dcbArgDouble  (args);
  long long arg5 = dcbArgLongLong(args);

// .. do something ..

result->s = 1244; return ’i’; }

Note that the return value of the handler is a signature character, not the actual return value, itself, and note that the actual return value is of type short. Now, let’s call it through a DCCallback object:

  DCCallback* cb;
  short result = 0;
  int userdata = 1337;
  cb = dcbNewCallback("ifsdl)s", &cbHandler, &userdata);
  result = ((short(*)(int, float, short, double, long long))cb)
    (123, 23.f, 3, 1.82, 9909ll);
  dcbFreeCallback(cb);

SEE ALSO

dyncall(3), dynload(3) and the dyncall manual (available in PDF format) for a way more detailed documentation of this library.

AUTHORS


.An Daniel Adler Aq dadler@uni-goettingen.de
.An Tassilo Philipp Aq tphilipp@potion-studios.com
Search for    or go to Top of page |  Section 3 |  Main Index


Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with manServer 1.07.