X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=bluesky%2Fbluesky-private.h;h=d00f7c39c440b84a87006772ff4b67fa2682d872;hb=a8339d9810e470f59dffb3e186dd693b751ae04a;hp=9ca0658f69134e5f24983e9c3d2be84d9914bc12;hpb=ccd8dcd110e04b43ae1d04a3b1ab058cc1761d8b;p=bluesky.git diff --git a/bluesky/bluesky-private.h b/bluesky/bluesky-private.h index 9ca0658..d00f7c3 100644 --- a/bluesky/bluesky-private.h +++ b/bluesky/bluesky-private.h @@ -36,6 +36,7 @@ typedef enum { STORE_OP_GET, STORE_OP_PUT, STORE_OP_DELETE, + STORE_OP_BARRIER, // Waits for other selected operations to complete } BlueSkyStoreOp; typedef enum { @@ -45,6 +46,7 @@ typedef enum { ASYNC_COMPLETE, // Operation finished, results available } BlueSkyAsyncStatus; +struct BlueSkyNotifierList; typedef struct { BlueSkyStore *store; @@ -60,10 +62,22 @@ typedef struct { BlueSkyRCStr *data; /* Data read/to write */ int result; /* Result code; 0 for success. */ + struct BlueSkyNotifierList *notifiers; gpointer store_private; /* For use by the storage implementation */ } BlueSkyStoreAsync; +/* Support for notification lists. These are lists of one-shot functions which + * can be called when certain events--primarily, competed storage + * events--occur. Multiple notifiers can be added, but no particular order is + * guaranteed for the notification functions to be called. */ +struct BlueSkyNotifierList { + struct BlueSkyNotifierList *next; + GFunc func; + BlueSkyStoreAsync *async; + gpointer user_data; // Passed to the function when called +}; + /* The abstraction layer for storage, allowing multiple implementations. */ typedef struct { /* Create a new store instance and return a handle to it. */ @@ -87,10 +101,15 @@ BlueSkyStoreAsync *bluesky_store_async_new(BlueSkyStore *store); void bluesky_store_async_ref(BlueSkyStoreAsync *async); void bluesky_store_async_unref(BlueSkyStoreAsync *async); void bluesky_store_async_wait(BlueSkyStoreAsync *async); +void bluesky_store_async_add_notifier(BlueSkyStoreAsync *async, + GFunc func, gpointer user_data); void bluesky_store_async_mark_complete(BlueSkyStoreAsync *async); void bluesky_store_async_submit(BlueSkyStoreAsync *async); void bluesky_store_sync(BlueSkyStore *store); +void bluesky_store_add_barrier(BlueSkyStoreAsync *barrier, + BlueSkyStoreAsync *async); + #ifdef __cplusplus } #endif