packages feed

hs-bindgen-1.0.0.0: test-artefacts/headers/golden/functions/callbacks.h

// ----------------------------------------------------------------------------
// Basic Callbacks - Direct function pointers (no typedef)
// ----------------------------------------------------------------------------
int readFileWithProcessor(void (*processLine)(int lineNumber), int fileId);
void watchTemperature(void (*onTempChange)(int degrees), int sensorId);

// ----------------------------------------------------------------------------
// Simple Callback Types - Using typedef for clarity
// ----------------------------------------------------------------------------
typedef void (*FileOpenedNotification)(void);
typedef void (*ProgressUpdate)(int percentComplete);
typedef int (*DataValidator)(int value);

void onFileOpened(FileOpenedNotification notify);
void onProgressChanged(ProgressUpdate update);
int validateInput(DataValidator validator, int rawValue);

// ----------------------------------------------------------------------------
// Callbacks with Structs - Processing structured data
// ----------------------------------------------------------------------------
struct Measurement {
  double value;
  double timestamp;
};

typedef void (*MeasurementReceived)(struct Measurement *data);
void onNewMeasurement(MeasurementReceived handler);

typedef void (*MeasurementReceived2)(struct Measurement data);
void onNewMeasurement2(MeasurementReceived2 handler);

typedef void (*SampleBufferFull)(int samples[10]);
void onBufferReady(SampleBufferFull handler);

// ----------------------------------------------------------------------------
// Higher-Order Callbacks - Functions taking function pointers as arguments
// ----------------------------------------------------------------------------
void transformMeasurement(
    struct Measurement *data,
    void (*transformer)(struct Measurement *m, double (*scale)(double, int), int factor)
);

void processWithCallbacks(
    void (*handler)(struct Measurement *m, FileOpenedNotification notify, int priority)
);

// ----------------------------------------------------------------------------
// Structs with Function Pointers - Handler registration pattern
// ----------------------------------------------------------------------------
struct MeasurementHandler {
  void (*onReceived)(struct Measurement *data);
  int (*validate)(struct Measurement *data);
  void (*onError)(int errorCode);
};

void registerHandler(struct MeasurementHandler *handler);

struct DataPipeline {
  void (*preProcess)(struct Measurement *m, DataValidator validator);
  void (*process)(struct Measurement *m);
  void (*postProcess)(struct Measurement *m, ProgressUpdate update);
};

void executePipeline(struct Measurement *data, struct DataPipeline *pipeline);

// ----------------------------------------------------------------------------
// Union with Function Pointers - Mode-based callback selection
// ----------------------------------------------------------------------------
union ProcessorCallback {
  void (*simple)(struct Measurement *data);
  void (*withValidator)(struct Measurement *data, DataValidator validator);
  void (*withProgress)(struct Measurement *data, ProgressUpdate progress);
};

struct Processor {
  enum { MODE_SIMPLE, MODE_VALIDATED, MODE_PROGRESS } mode;
  union ProcessorCallback callback;
};

void runProcessor(struct Measurement *data, struct Processor *processor);

// ----------------------------------------------------------------------------
// Third-Order Function - Deeply nested callback chain
// ----------------------------------------------------------------------------
void processMeasurementWithValidation(
    struct Measurement *data,
    void (*processor)(
        struct Measurement *m,
        void (*transformer)(struct Measurement *m, DataValidator validator, int threshold),
        DataValidator validator
    )
);

typedef int foo;
typedef int foo2;
void f(void (*callback)(foo x));
void f2(void (*handler)(const foo2 x));

// ----------------------------------------------------------------------------
// Callbacks in a global variable
// ----------------------------------------------------------------------------
typedef int A;
extern void (*globalVar[3])(A);

// ----------------------------------------------------------------------------
// Callbacks in a struct field
// ----------------------------------------------------------------------------
typedef int B;
struct S {
  void (* const fn)(B);
};

// ----------------------------------------------------------------------------
// Callbacks in a union field
// ----------------------------------------------------------------------------
typedef int C;
union U {
  void (*fn[3])(C);
};

// ----------------------------------------------------------------------------
// Nested callback in a typedef
// ----------------------------------------------------------------------------
typedef int D;
typedef void (T)(void(*callback)(D));