Me@11: /* Me@11: * Copyright 2009 OpenSourceStewardshipFoundation.org Me@11: * Licensed under GNU General Public License version 2 Me@11: * Me@11: * Author: seanhalle@yahoo.com Me@11: * Me@11: */ Me@11: Me@11: #ifndef _SSR_H Me@11: #define _SSR_H Me@11: Me@11: #include "VMS/Queue_impl/PrivateQueue.h" Me@11: #include "VMS/Hash_impl/PrivateHash.h" Me@11: #include "VMS/VMS.h" Me@11: Me@11: /*This header defines everything specific to the SSR semantic plug-in Me@11: */ Me@11: typedef struct _SSRSemReq SSRSemReq; Me@11: Me@11: Me@11: /*Semantic layer-specific data sent inside a request from lib called in app Me@11: * to request handler called in MasterLoop Me@11: */ Me@11: enum SSRReqType Me@11: { Me@11: send_type = 1, Me@11: send_from_to, Me@11: receive_any, //order and grouping matter -- send before receive Me@11: receive_type, // and receive_any first of the receives -- Handlers Me@11: receive_from_to,// rely upon this ordering of enum Me@11: transfer_to, Me@11: transfer_out Me@11: }; Me@11: Me@11: struct _SSRSemReq Me@11: { enum SSRReqType reqType; Me@11: VirtProcr *sendPr; Me@11: VirtProcr *receivePr; Me@11: int32 msgType; Me@11: void *msg; Me@11: SSRSemReq *nextReqInHashEntry; Me@11: } Me@11: /* SSRSemReq */; Me@11: Me@11: typedef struct Me@11: { Me@11: PrivQueueStruc *readyVirtProcrQ; Me@11: HashTable *commHashTbl; Me@11: int numVirtPr; Me@11: } Me@11: SSRSemEnv; Me@11: Me@11: Me@11: //=========================================================================== Me@11: Me@11: void Me@11: SSR__create_seed_procr_and_do_work( VirtProcrFnPtr fn, void *initData ); Me@11: Me@11: //======================= Me@11: Me@11: void Me@11: SSR__init(); Me@11: Me@11: void Me@11: SSR__cleanup_after_shutdown(); Me@11: Me@11: //======================= Me@11: Me@11: inline VirtProcr * Me@11: SSR__create_procr_with( VirtProcrFnPtr fnPtr, void *initData, Me@11: VirtProcr *creatingPr ); Me@11: Me@11: void Me@11: SSR__dissipate_procr( VirtProcr *procrToDissipate ); Me@11: Me@11: //======================= Me@11: void * Me@11: SSR__malloc_size_to( int numBytes, VirtProcr *ownerPr ); Me@11: Me@11: void Me@11: SSR__transfer_ownership_of_from_to( void *data, VirtProcr *oldOwnerPr, Me@11: VirtProcr *newOwnerPr ); Me@11: Me@11: void Me@11: SSR__add_ownership_by_to( VirtProcr *newOwnerPr, void *data ); Me@11: Me@11: void Me@11: SSR__remove_ownership_by_from( VirtProcr *loserPr, void *dataLosing ); Me@11: Me@11: void Me@11: SSR__transfer_ownership_to_outside( void *dataToTransferOwnershipOf ); Me@11: Me@11: Me@11: Me@11: //======================= Me@11: void Me@11: SSR__send_of_type_to( VirtProcr *sendPr, void *msg, const int type, Me@11: VirtProcr *receivePr); Me@11: Me@11: void Me@11: SSR__send_from_to( void *msg, VirtProcr *sendPr, VirtProcr *receivePr); Me@11: Me@11: void * Me@11: SSR__receive_type_to( const int type, VirtProcr *receivePr ); Me@11: Me@11: void * Me@11: SSR__receive_from_to( VirtProcr *sendPr, VirtProcr *receivePr ); Me@11: Me@11: Me@11: //======================= Me@11: Me@11: void Me@11: SSR__free_semantic_request( SSRSemReq *semReq ); Me@11: Me@11: Me@11: //========================= Internal use only ============================= Me@11: void Me@11: SSR__Request_Handler( VirtProcr *requestingPr, void *_semEnv ); Me@11: Me@11: VirtProcr * Me@11: SSR__schedule_virt_procr( void *_semEnv ); Me@11: Me@11: Me@11: #endif /* _SSR_H */ Me@11: