Line data Source code
1 : /* 2 : * 3 : * 4 : * Distributed under the OpenDDS License. 5 : * See: http://www.opendds.org/license.html 6 : */ 7 : 8 : #include "DCPS/DdsDcps_pch.h" //Only the _pch include should start with DCPS/ 9 : 10 : #include "GuidBuilder.h" 11 : 12 : #ifndef __ACE_INLINE__ 13 : # include "GuidBuilder.inl" 14 : #endif /* __ACE_INLINE__ */ 15 : 16 : namespace { 17 : 18 : inline void 19 99 : fill_guid(CORBA::Octet* begin, long value, std::size_t len) 20 : { 21 456 : for (std::size_t i = 0; i < len; ++i) { 22 357 : size_t shift = (len - i - 1) << 3; 23 357 : begin[i] = static_cast<CORBA::Octet>(0xff & (value >> shift)); 24 : } 25 99 : } 26 : 27 : } // namespace 28 : 29 : OPENDDS_BEGIN_VERSIONED_NAMESPACE_DECL 30 : 31 : namespace OpenDDS { 32 : namespace DCPS { 33 : 34 12 : GuidBuilder::GuidBuilder() 35 12 : : guid_cxx_(create()) 36 12 : , guid_(guid_cxx_) 37 : { 38 12 : } 39 : 40 14 : GuidBuilder::GuidBuilder(GUID_t& guid) 41 14 : : guid_cxx_() 42 14 : , guid_(guid) 43 : { 44 14 : } 45 : 46 26 : GuidBuilder::~GuidBuilder() 47 : { 48 26 : } 49 : 50 : GUID_t 51 12 : GuidBuilder::create() 52 : { 53 12 : GUID_t guid = { 54 : { VENDORID_OCI[0], 55 : VENDORID_OCI[1], 56 : 0, 57 : 0, 58 : 0, 59 : 0, 60 : 0, 61 : 0, 62 : 0, 63 : 0, 64 : 0, 65 : 0 66 : }, ENTITYID_UNKNOWN 67 : }; 68 12 : return guid; 69 : } 70 : 71 : void 72 12 : GuidBuilder::guidPrefix0(long p0) 73 : { 74 12 : fill_guid(guid_.guidPrefix, p0, 4); 75 12 : } 76 : 77 : void 78 24 : GuidBuilder::guidPrefix1(long p1) 79 : { 80 24 : fill_guid(guid_.guidPrefix + 4, p1, 4); 81 24 : } 82 : 83 : void 84 24 : GuidBuilder::guidPrefix2(long p2) 85 : { 86 24 : fill_guid(guid_.guidPrefix + 8, p2, 4); 87 24 : } 88 : 89 : void 90 0 : GuidBuilder::entityId(EntityId_t entityId) 91 : { 92 0 : guid_.entityId = entityId; 93 0 : } 94 : 95 : void 96 39 : GuidBuilder::entityKey(long entityKey) 97 : { 98 39 : fill_guid(guid_.entityId.entityKey, entityKey, 3); 99 39 : } 100 : 101 : void 102 10 : GuidBuilder::entityKind(CORBA::Octet entityKind) 103 : { 104 10 : guid_.entityId.entityKind = entityKind; 105 10 : } 106 : 107 : void 108 12 : GuidBuilder::entityKind(EntityKind kind, bool makeBuiltin) 109 : { 110 12 : switch (kind) { 111 : 112 : // User Entities 113 : 114 0 : case KIND_USER_WRITER: 115 0 : guid_.entityId.entityKind = makeBuiltin ? 116 : ENTITYKIND_BUILTIN_WRITER_WITH_KEY : ENTITYKIND_USER_WRITER_WITH_KEY; 117 0 : break; 118 : 119 0 : case KIND_USER_READER: 120 0 : guid_.entityId.entityKind = makeBuiltin ? 121 : ENTITYKIND_BUILTIN_READER_WITH_KEY : ENTITYKIND_USER_READER_WITH_KEY; 122 0 : break; 123 : 124 0 : case KIND_USER_TOPIC: 125 0 : guid_.entityId.entityKind = makeBuiltin ? 126 : ENTITYKIND_BUILTIN_TOPIC : ENTITYKIND_OPENDDS_TOPIC; 127 0 : break; 128 : 129 : // Builtin Entities 130 : 131 0 : case KIND_BUILTIN_WRITER: 132 0 : guid_.entityId.entityKind = ENTITYKIND_BUILTIN_WRITER_WITH_KEY; 133 0 : break; 134 : 135 0 : case KIND_BUILTIN_READER: 136 0 : guid_.entityId.entityKind = ENTITYKIND_BUILTIN_READER_WITH_KEY; 137 0 : break; 138 : 139 0 : case KIND_BUILTIN_TOPIC: 140 0 : guid_.entityId.entityKind = ENTITYKIND_BUILTIN_TOPIC; 141 0 : break; 142 : 143 : // OpenDDS specific Publisher Guid values 144 12 : case KIND_PUBLISHER: 145 12 : guid_.entityId.entityKind = 146 : ENTITYKIND_OPENDDS_PUBLISHER; 147 12 : break; 148 : 149 : // OpenDDS specific Subscriber Guid values 150 0 : case KIND_SUBSCRIBER: 151 0 : guid_.entityId.entityKind = 152 : ENTITYKIND_OPENDDS_SUBSCRIBER; 153 0 : break; 154 : 155 : // OpenDDS specific other Guid values 156 0 : case KIND_USER: 157 0 : guid_.entityId.entityKind = 158 : ENTITYKIND_OPENDDS_USER; 159 0 : break; 160 : 161 0 : default: 162 0 : guid_.entityId.entityKind = 163 : ENTITYKIND_USER_UNKNOWN; 164 : } 165 12 : } 166 : 167 : } // namespace DCPS 168 : } // namespace OpenDDS 169 : 170 : OPENDDS_END_VERSIONED_NAMESPACE_DECL