blob: 97dce29fb87f8a39b98b3df2662a295c28ffb020 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008 IBM Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - Initial API and implementation
*******************************************************************************/
#ifndef SDM_H_
#define SDM_H_
#define SDM_AGGREGATE_UPSTREAM 0x00000001
#define SDM_AGGREGATE_DOWNSTREAM 0x00000002
#define SDM_AGGREGATE_INIT 0x00000004
#define SDM_AGGREGATE_TIMEOUT 0x00000008
struct sdm_idset;
struct sdm_message;
struct sdm_aggregate;
typedef int sdm_id;
typedef struct sdm_idset * sdm_idset;
typedef struct sdm_message * sdm_message;
typedef struct sdm_aggregate * sdm_aggregate;
extern sdm_id SDM_MASTER;
#include "routing_table.h"
/*
* Startup/Initialization
*/
extern int sdm_init(int argc, char *argv[]);
extern int sdm_connect(const sdm_idset ids);
extern void sdm_finalize(void);
extern void sdm_progress(void);
/*
* Communication
*/
extern int sdm_message_init(int argc, char *argv[]);
extern void sdm_message_finalize(void);
extern sdm_message sdm_message_new(char *buf, int len);
extern void sdm_message_free(sdm_message msg);
extern unsigned int sdm_message_get_id(const sdm_message msg);
extern void sdm_message_set_id(const sdm_message msg, const unsigned int id);
extern sdm_idset sdm_message_get_destination(const sdm_message msg);
extern sdm_aggregate sdm_message_get_aggregate(const sdm_message msg);
extern sdm_idset sdm_message_get_source(const sdm_message msg);
extern void sdm_message_set_source(const sdm_message msg, const sdm_idset src);
extern void sdm_message_get_payload(const sdm_message msg, char **buf, int *len);
extern int sdm_message_send(const sdm_message msg);
extern void sdm_message_set_send_callback(const sdm_message msg, void (*callback)(const sdm_message msg));
extern void sdm_message_set_recv_callback(void (*callback)(const sdm_message msg));
extern void sdm_message_set_deliver_callback(void (*callback)(const sdm_message msg));
extern int sdm_message_progress(void);
extern void sdm_message_deliver(const sdm_message msg);
/*
* Set operations
*/
extern sdm_idset sdm_set_new(void);
extern void sdm_set_free(sdm_idset set);
extern sdm_idset sdm_set_clear(sdm_idset set);
extern int sdm_set_size(const sdm_idset set);
extern sdm_idset sdm_set_add_element(const sdm_idset set, const sdm_id id);
extern sdm_idset sdm_set_remove_element(const sdm_idset set, const sdm_id id);
extern sdm_idset sdm_set_add_all(const sdm_idset set, const sdm_id id);
extern int sdm_set_is_subset(const sdm_idset set1, const sdm_idset set2);
extern int sdm_set_is_empty(const sdm_idset set);
extern int sdm_set_compare(const sdm_idset set1, const sdm_idset set2);
extern sdm_idset sdm_set_union(const sdm_idset set1, const sdm_idset set2);
extern sdm_idset sdm_set_intersect(const sdm_idset set1, const sdm_idset set2);
extern sdm_idset sdm_set_diff(const sdm_idset set1, const sdm_idset set2);
extern int sdm_set_contains(const sdm_idset set, const sdm_id id);
extern sdm_id sdm_set_max(const sdm_idset set);
extern sdm_id sdm_set_first(const sdm_idset set);
extern sdm_id sdm_set_next(const sdm_idset set);
extern int sdm_set_done(const sdm_idset set);
extern int sdm_set_serialize(const sdm_idset set, char *buf, char **end);
extern int sdm_set_serialized_length(const sdm_idset set);
extern int sdm_set_deserialize(sdm_idset set, char *str, char **end);
extern char *_set_to_str(const sdm_idset set);
/*
* Routing
*/
extern int sdm_route_init(int argc, char *argv[]);
extern void sdm_route_finalize(void);
extern sdm_id sdm_route_get_parent(void);
extern sdm_id sdm_route_get_id(void);
extern void sdm_route_set_id(sdm_id id);
extern int sdm_route_get_size(void);
extern void sdm_route_set_size(int s);
extern sdm_idset sdm_route_get_route(const sdm_idset dest);
extern sdm_idset sdm_route_reachable(const sdm_idset dest);
/*
* Aggregation
*/
extern int sdm_aggregate_init(int argc, char *argv[]);
extern void sdm_aggregate_finalize(void);
extern sdm_aggregate sdm_aggregate_new(void);
extern void sdm_aggregate_free(sdm_aggregate a);
extern int sdm_aggregate_serialize(const sdm_aggregate a, char *buf, char **end);
extern int sdm_aggregate_serialized_length(const sdm_aggregate a);
extern int sdm_aggregate_deserialize(sdm_aggregate a, char *str, char **end);
extern void sdm_aggregate_copy(const sdm_aggregate a1, const sdm_aggregate a2);
extern void sdm_aggregate_set_completion_callback(int (*callback)(const sdm_message msg));
extern void sdm_aggregate_set_value(const sdm_aggregate a, int type, ...);
extern void sdm_aggregate_message(const sdm_message msg, unsigned int flags);
extern void sdm_aggregate_progress(void);
extern char * _aggregate_to_str(sdm_aggregate a);
/*
* I/O forwarding
*/
extern int sdm_iof_set_stdin_handler(int fd_in, int fd_out, int (*stdin_handler)(int fd_in, int fd_out));
extern int sdm_iof_set_stdout_handler(int fd_in, int fd_out, int (*stdout_handler)(int fd_in, int fd_out));
extern int sdm_iof_set_stderr_handler(int fd_in, int fd_out, int (*stderr_handler)(int fd_in, int fd_out));
#endif /* SDM_H_ */