distObjLibP.h
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:3k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* distObjLibP.h - distributed objects library header file */
  2. /* Copyright 1984-1992 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01d,28may99,drm  Changing DIST_OBJ_VERIFY to check that the ID is a
  7.                  distributed message queue ID.
  8. 01c,24may99,drm  added vxfusion to VxFusion related includes
  9. 01b,08may98,ur   removed 8 bit node id restriction
  10. 01a,12Jun97,ur   written.
  11. */
  12. #ifndef __INCdistObjLibPh
  13. #define __INCdistObjLibPh
  14. #include "vxWorks.h"
  15. #include "hashLib.h"
  16. #include "vxfusion/distLib.h"
  17. #include "private/distObjTypeP.h"
  18. #ifdef __cplusplus
  19. extern "C" {
  20. #endif
  21. #define distInqLockInit() semBInit (&distInqLock, SEM_Q_PRIORITY, SEM_FULL)
  22. #define distInqLock() semTake (&distInqLock, WAIT_FOREVER)
  23. #define distInqUnlock() semGive (&distInqLock)
  24. #define DIST_INQ_HASH_TBL_SZ_LOG2 7 /* 2^7 = 128 */
  25. #define DIST_MSG_Q_INQ DIST_ID_MSG_Q_SERV
  26. #define DIST_MSG_Q_GRP_INQ DIST_ID_MSG_Q_GRP_SERV
  27. #define TBL_IX_TO_DIST_OBJ_ID(tblIx) 
  28. ((DIST_OBJ_ID) TBL_IX_TO_DIST_MSG_Q_ID (tblIx))
  29. #define DIST_MSG_Q_GRP_ID_TO_DIST_OBJ_ID(grpId) 
  30. ((DIST_OBJ_ID) DIST_MSG_Q_GRP_ID_TO_DIST_MSG_Q_ID (grpId))
  31. #define DIST_OBJ_ID_TO_DIST_MSG_Q_ID(objId) 
  32. ((DIST_MSG_Q_ID) (objId))
  33. #define DIST_MSG_Q_ID_TO_DIST_OBJ_ID(dMsgQId) 
  34. ((DIST_OBJ_ID) (dMsgQId))
  35. #define DIST_OBJ_VERIFY(msgQId)  (ID_IS_DISTRIBUTED (msgQId) ? OK : ERROR )
  36. #define DIST_OBJ_TYPE_GRP 0x1
  37. #define IS_DIST_OBJ_LOCAL(pObjNode) 
  38. ((pObjNode)->objNodeReside == distNodeLocalGetId())
  39. typedef uint32_t DIST_OBJ_ID; /* DIST_OBJ_ID */
  40. typedef struct /* DIST_OBJ_NODE */
  41. {
  42. DIST_NODE_ID objUniqReside; /* node where object resides */
  43. DIST_OBJ_ID objUniqId; /* id of object */
  44. /* Note: <objNodeReside> is only valid, if <objNodeId> is a non-group id */
  45. } DIST_OBJ_UNIQ_ID;
  46. typedef struct /* DIST_OBJ_NODE */
  47. {
  48. u_long objNodeVerify; /* for verification */
  49. int objNodeType; /* type of object */
  50. DIST_OBJ_UNIQ_ID objNodeUniqId; /* system unique object id */
  51. } DIST_OBJ_NODE;
  52. #define objNodeReside objNodeUniqId.objUniqReside
  53. #define objNodeId objNodeUniqId.objUniqId
  54. typedef uint32_t DIST_INQ_ID; /* DIST_INQ_ID */
  55. typedef int DIST_INQ_TYPE; /* DIST_INQ_TYPE */
  56. typedef struct /* DIST_INQ */
  57. {
  58. HASH_NODE inqHNode;
  59. DIST_INQ_ID inqId;
  60. DIST_INQ_TYPE inqType;
  61. } DIST_INQ;
  62. #if defined(__STDC__) || defined(__cplusplus)
  63. DIST_OBJ_NODE *distObjNodeGet (void);
  64. STATUS distInqInit (int hashTblSzLog2);
  65. DIST_INQ_ID distInqRegister (DIST_INQ *pInqRegister);
  66. DIST_INQ *distInqFind (DIST_INQ_ID InqIdFind);
  67. DIST_INQ_ID distInqGetId (DIST_INQ *pInqGetIdOf);
  68. void distInqCancel (DIST_INQ *pInqCancel);
  69. #else /* __STDC__ */
  70. DIST_OBJ_NODE *distObjNodeGet ();
  71. STATUS distInqInit ();
  72. DIST_INQ_ID distInqRegister ();
  73. DIST_INQ *distInqFind ();
  74. DIST_INQ_ID distInqGetId ();
  75. void distInqCancel ();
  76. #endif /* __STDC__ */
  77. #ifdef __cplusplus
  78. }
  79. #endif
  80. #endif /* __INCdistObjLibPh */