LCOV - code coverage report
Current view: top level - DCPS - GuidBuilder.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 39 68 57.4 %
Date: 2023-04-30 01:32:43 Functions: 11 12 91.7 %

          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

Generated by: LCOV version 1.16