Show AtomicMessages.h syntax highlighted
/****************************************************************************************
AtomicMessages.h $Revision: 18 $
<http://rentzsch.com/atomicMessages>
Copyright © 1999-2002 Red Shed Software. All rights reserved.
by Jonathan 'Wolf' Rentzsch (jon at redshed dot net)
************************************************************************************/
#ifndef _AtomicMessages_
#define _AtomicMessages_
#include "atomicity.h"
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
/**************************
*
* Types
*
**************************/
#pragma mark (Types)
typedef long AtomicMessage;
typedef struct AtomicMessageElement AtomicMessageElement;
typedef struct AtomicMessageQueue AtomicMessageQueue;
typedef AtomicMessageElement* (*AtomicMessageProc)( AtomicMessageElement *message,
AtomicMessageQueue *queue );
struct AtomicMessageElement { // Offset Size Total
GuardedAtomicElement element; // 0 8 8 (must be 4 byte aligned)
AtomicMessageProc disposer; // 8 4 12
AtomicMessage message; // 12 4 16
long data1; // 16 4 20
long data2; // 20 4 24
long data3; // 24 4 28
};
struct AtomicMessageQueue { // Offset Size Total
AtomicQueue queue; // 0 8 8 (must be 4 byte aligned)
AtomicMessageProc incoming; // 8 4 12
AtomicMessageProc allocator; // 12 4 16
void *refCon; // 16 4 20
};
/**************************
*
* Constants
*
**************************/
#pragma mark -
#pragma mark (Constants)
#define kNoAtomicMessage (AtomicMessage)0
#define kFilterFoundAtomicMessage (AtomicMessageElement*)1
#define kFilterNextAtomicMessage (AtomicMessageElement*)2
/**************************
*
* Interfaces
*
**************************/
#pragma mark -
#pragma mark (Interfaces)
extern
void
InitializeAtomicMessageQueue(
AtomicMessageQueue *queue );
extern
Boolean
SendAtomicMessage(
AtomicMessageQueue *queue,
AtomicMessageElement *message );
extern
OSErr
NewAtomicMessage(
AtomicMessageQueue *queue,
AtomicMessage message,
long data1,
long data2,
long data3 );
extern
AtomicMessage
PeekAtomicMessage(
AtomicMessageQueue *queue,
AtomicMessageProc filterProc,
AtomicMessage filterValue,
long *data1,
long *data2,
long *data3 );
extern
AtomicMessage
ReceiveAtomicMessage(
AtomicMessageQueue *queue,
AtomicMessageProc filterProc,
AtomicMessage filterValue,
long *data1,
long *data2,
long *data3 );
extern
void
DumpAtomicMessages(
AtomicMessageQueue *queue );
#ifdef __cplusplus
}
#endif
#endif // _AtomicMessages_
See more files for this project here