LTP GCOV extension - code coverage report
Current view: directory - src/cpp/prod/lib - stubmgr.cpp
Test: YAORB-0.2.info
Date: 2006-02-27 Instrumented lines: 34
Code covered: 79.4 % Executed lines: 27

       1                 : //==============================================================================
       2                 : // File <$/src/cpp/prod/lib/stubmgr.cpp>
       3                 : // This file is part of YaOrb : Yet Another Object Request Broker,
       4                 : // Copyright (c) 2000-2003, Marc Alff.
       5                 : //
       6                 : // This program is free software; you can redistribute it and/or
       7                 : // modify it under the terms of the GNU General Public License
       8                 : // as published by the Free Software Foundation; either version 2
       9                 : // of the License, or (at your option) any later version.
      10                 : //
      11                 : // This program is distributed in the hope that it will be useful,
      12                 : // but WITHOUT ANY WARRANTY; without even the implied warranty of
      13                 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14                 : // GNU General Public License for more details.
      15                 : //
      16                 : // You should have received a copy of the GNU General Public License
      17                 : // along with this program; if not, write to the Free Software
      18                 : // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
      19                 : //
      20                 : //==============================================================================
      21                 : 
      22                 : #include <yaorb/CORBA.h>
      23                 : #include <yaorb/YAORB.h>
      24                 : 
      25                 : #include "src/cpp/prod/lib/dimensioning.h"
      26                 : #include "src/cpp/prod/tool/DEVELOPMENT.h"
      27                 : #include "src/cpp/prod/tool/Assert.h"
      28                 : #include "src/cpp/prod/tool/Hash.h"
      29                 : #include "src/cpp/prod/tool/Log.h"
      30                 : 
      31                 : //=============================================================================
      32                 : // StubInfo Hash table
      33                 : //=============================================================================
      34                 : 
      35                 : class StubInfoHash : public THash<YAORB::StubInfo, YAORB::RepositoryID>
      36                 : {
      37                 :    public :
      38                 :       StubInfoHash(int size) ;
      39               0 :       ~StubInfoHash() {}
      40                 : 
      41                 :    private :
      42                 :       static int myHashFn(const YAORB::RepositoryID* key) ;
      43                 :       static bool myCmpFn(const YAORB::StubInfo* obj,
      44                 :                           const YAORB::RepositoryID *key) ;
      45                 : 
      46                 : } ;
      47                 : 
      48              49 : StubInfoHash::StubInfoHash(int size)
      49              98 : : THash<YAORB::StubInfo, YAORB::RepositoryID> ( & myHashFn, & myCmpFn, size)
      50                 : {
      51                 : }
      52                 : 
      53                 : int
      54                 : StubInfoHash::myHashFn(
      55              12 :    const YAORB::RepositoryID* key)
      56                 : {
      57              12 :    return key->hash() ;
      58                 : }
      59                 : 
      60                 : bool
      61                 : StubInfoHash::myCmpFn(
      62                 :    const YAORB::StubInfo* obj,
      63               4 :    const YAORB::RepositoryID *key)
      64                 : {
      65                 :    ASSERT(obj != NULL) ;
      66                 :    ASSERT(key != NULL) ;
      67                 : 
      68               4 :    const YAORB::ClassInfo* info = obj->GetClassInfo() ;
      69               4 :    const YAORB::RepositoryID* id = info->GetRepositoryID() ;
      70                 : 
      71               4 :    if (id == key)
      72                 :    {
      73                 :       return true ;
      74                 :    }
      75                 : 
      76               4 :    if (*id == *key)
      77                 :    {
      78                 :       return true ;
      79                 :    }
      80                 : 
      81                 :    return false ;
      82                 : }
      83                 : 
      84              49 : static StubInfoHash _hash(YAORB::DIM_STUB_INFO_HASH_TABLE) ;
      85                 : 
      86                 : //=============================================================================
      87                 : // StubInfo link list
      88                 : //=============================================================================
      89                 : 
      90                 : // Note : this pointer is **statically** initialized by
      91                 : // the **linker**, not dynamically initialized by __main in crt0.o !
      92                 : 
      93                 : static YAORB::StubInfo * g_allStubInfo = NULL ;
      94                 : 
      95                 : //=============================================================================
      96                 : // StubMgr
      97                 : //=============================================================================
      98                 : 
      99                 : void
     100               4 : YAORB::StubMgr::RegisterAll(void)
     101                 : {
     102                 :    // FIXME : not MT-safe.
     103                 : 
     104               4 :    YAORB::StubInfo *current = g_allStubInfo ;
     105                 :    const YAORB::ClassInfo *info ;
     106                 :    const YAORB::RepositoryID *id ;
     107               4 :    String message ;
     108                 : 
     109              12 :    while (current != NULL)
     110                 :    {
     111               8 :       info = current->GetClassInfo() ;
     112               8 :       id = info->GetRepositoryID() ;
     113                 :       _hash.Insert(current, id) ;
     114                 : 
     115               8 :       message = "Registering Stub : " ;
     116               8 :       message += id->getId() ;
     117               8 :       DEBUGLOG(message) ;
     118                 : 
     119               8 :       current = current->_next ;
     120               0 :    }
     121                 : }
     122                 : 
     123                 : void
     124                 : YAORB::StubMgr::RegisterStubInfo(
     125               8 :    YAORB::StubInfo* info)
     126                 : {
     127                 :    // FIXME : not MT-safe.
     128                 :    // Note : Safe during initialization in __main.
     129               8 :    info->_next = g_allStubInfo ;
     130               8 :    g_allStubInfo = info ;
     131                 : }
     132                 : 
     133                 : YAORB::StubInfo*
     134                 : YAORB::StubMgr::FindStubInfo(
     135               4 :    const YAORB::RepositoryID* id)
     136                 : {
     137                 :    YAORB::StubInfo *info = NULL ;
     138                 :    info = _hash.FindByKey(id) ;
     139                 : 
     140               4 :    if (info == NULL)
     141                 :    {
     142               0 :       String message ;
     143               0 :       message = "Unknown Stub : " ;
     144               0 :       message += id->getId() ;
     145               0 :       DEBUGLOG(message) ;
     146                 :    }
     147                 : 
     148                 :    return info ;
     149              49 : }
     150              49 : 

Generated by: LTP GCOV extension version 1.4