LCOV - code coverage report
Current view: top level - libreoffice/autodoc/source/ary/idl - ia_ce.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 191 203 94.1 %
Date: 2012-12-27 Functions: 38 44 86.4 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <precomp.h>
      21             : #include "ia_ce.hxx"
      22             : 
      23             : 
      24             : // NOT FULLY DEFINED SERVICES
      25             : #include <algorithm>
      26             : #include <cosv/tpl/tpltools.hxx>
      27             : #include <ary/idl/i_attribute.hxx>
      28             : #include <ary/idl/i_constant.hxx>
      29             : #include <ary/idl/i_constgroup.hxx>
      30             : #include <ary/idl/i_enum.hxx>
      31             : #include <ary/idl/i_enumvalue.hxx>
      32             : #include <ary/idl/i_exception.hxx>
      33             : #include <ary/idl/i_function.hxx>
      34             : #include <ary/idl/i_interface.hxx>
      35             : #include <ary/idl/i_module.hxx>
      36             : #include <ary/idl/i_namelookup.hxx>
      37             : #include <ary/idl/i_property.hxx>
      38             : #include <ary/idl/i_service.hxx>
      39             : #include <ary/idl/i_singleton.hxx>
      40             : #include <ary/idl/i_siservice.hxx>
      41             : #include <ary/idl/i_sisingleton.hxx>
      42             : #include <ary/idl/i_struct.hxx>
      43             : #include <ary/idl/i_structelem.hxx>
      44             : #include <ary/idl/i_traits.hxx>
      45             : #include <ary/idl/i_typedef.hxx>
      46             : #include <idsort.hxx>
      47             : #include "ia_type.hxx"
      48             : #include "is_ce.hxx"
      49             : #include "it_tplparam.hxx"
      50             : 
      51             : 
      52             : 
      53             : 
      54             : namespace ary
      55             : {
      56             : namespace idl
      57             : {
      58             : 
      59             : inline Module &
      60       39451 : CeAdmin::lhf_Access_Module( Ce_id i_nId )
      61       39451 :     { return ary_cast<Module>(Storage()[i_nId]); }
      62             : 
      63             : inline void
      64       19526 : CeAdmin::lhf_Put2Storage_and_AssignId( CodeEntity & pass_io_rCe )
      65             :     { // This also assigns an ID to pass_io_rCe:
      66       19526 :       Storage().Store_Entity(pass_io_rCe);
      67       19526 :       my_NameDictionary().Add_Name( pass_io_rCe.LocalName(),
      68             :                                     pass_io_rCe.CeId(),
      69             :                                     pass_io_rCe.AryClass(),
      70       39052 :                                     pass_io_rCe.Owner() );
      71       19526 :     }
      72             : 
      73             : inline void
      74        4252 : CeAdmin::lhf_Store_NewEntity( DYN CodeEntity &  pass_io_rCe,
      75             :                                    Module &          i_rOwner )
      76             : {
      77        4252 :     lhf_Put2Storage_and_AssignId(pass_io_rCe);
      78        4252 :     i_rOwner.Add_Name(pass_io_rCe.LocalName(), pass_io_rCe.CeId());
      79        4252 : }
      80             : 
      81             : inline void
      82        4134 : CeAdmin::lhf_Store_NewEntity( DYN CodeEntity &  pass_io_rCe,
      83             :                                    Ce_id             i_nOwnerModule )
      84             : {
      85        4134 :     lhf_Store_NewEntity(pass_io_rCe, lhf_Access_Module(i_nOwnerModule));
      86        4134 : }
      87             : 
      88             : 
      89             : 
      90           1 : CeAdmin::CeAdmin( NameLookup &        io_rNameDictionary,
      91             :                   TypeAdmin &         io_rTypePilot )
      92           1 :     :   pStorage(new Ce_Storage),
      93             :         pGlobalNamespace(0),
      94             :         pNameDictionary(&io_rNameDictionary),
      95           2 :         pTypePilot(&io_rTypePilot)
      96             : {
      97           1 :     Storage().Set_Reserved(
      98             :                     predefined::ce_GlobalNamespace,
      99           2 :                     *new Module );
     100           1 :     pGlobalNamespace = &lhf_Access_Module(Ce_id(predefined::ce_GlobalNamespace));
     101           1 : }
     102             : 
     103           2 : CeAdmin::~CeAdmin()
     104             : {
     105           2 : }
     106             : 
     107             : 
     108             : 
     109             : Module &
     110       17717 : CeAdmin::CheckIn_Module( Ce_id               i_nParentId,
     111             :                             const String &      i_sName )
     112             : {
     113       17717 :     Module & rOwner  = lhf_Access_Module(i_nParentId);
     114       17717 :     Ce_id    nId     = rOwner.Search_Name(i_sName);
     115       17717 :     if (nId.IsValid())
     116             :     {
     117       17599 :         return lhf_Access_Module(nId);
     118             :     }
     119             : 
     120             :     Module & ret = *new Module( i_sName,
     121         118 :                                 rOwner );
     122         118 :     lhf_Store_NewEntity(ret, rOwner);
     123         118 :     return ret;
     124             : }
     125             : 
     126             : Service &
     127        1075 : CeAdmin::Store_Service( Ce_id           i_nOwner,
     128             :                         const String &  i_sName )
     129             : {
     130             :     Service & ret = *new Service( i_sName,
     131        1075 :                                   i_nOwner );
     132        1075 :     lhf_Store_NewEntity(ret, i_nOwner);
     133        1075 :     return ret;
     134             : }
     135             : 
     136             : SglIfcService &
     137         221 : CeAdmin::Store_SglIfcService( Ce_id               i_nOwner,
     138             :                                    const String &      i_sName,
     139             :                                    Type_id             i_nBaseInterface )
     140             : {
     141             :     SglIfcService &
     142             :         ret = *new SglIfcService( i_sName,
     143             :                                   i_nOwner,
     144         221 :                                   i_nBaseInterface );
     145         221 :     lhf_Store_NewEntity(ret, i_nOwner);
     146         221 :     return ret;
     147             : }
     148             : 
     149             : Interface &
     150        1644 : CeAdmin::Store_Interface( Ce_id               i_nOwner,
     151             :                                   const String &      i_sName,
     152             :                                   Type_id             i_nBase )
     153             : {
     154             :     Interface & ret = *new Interface( i_sName,
     155        1644 :                                       i_nOwner );
     156        1644 :     lhf_Store_NewEntity(ret, i_nOwner);
     157        1644 :     if (i_nBase.IsValid())
     158        1413 :         ret.Add_Base(i_nBase, 0);
     159        1644 :     return ret;
     160             : }
     161             : 
     162             : Struct &
     163         381 : CeAdmin::Store_Struct( Ce_id               i_nOwner,
     164             :                                const String &      i_sName,
     165             :                                Type_id             i_nBase,
     166             :                                const String &      i_sTemplateParam )
     167             : {
     168         381 :     if (NOT i_sTemplateParam.empty())
     169             :     {
     170             :         return lhf_Store_TplStruct( i_nOwner,
     171             :                                     i_sName,
     172             :                                     i_nBase,
     173           3 :                                     i_sTemplateParam );
     174             :     }
     175             : 
     176             :     Struct & ret = *new Struct( i_sName,
     177             :                                 i_nOwner,
     178             :                                 i_nBase,
     179             :                                 String::Null_(),
     180         378 :                                 Type_id::Null_() );
     181         378 :     lhf_Store_NewEntity(ret, i_nOwner);
     182             : 
     183         378 :     return ret;
     184             : }
     185             : 
     186             : Exception &
     187         243 : CeAdmin::Store_Exception( Ce_id               i_nOwner,
     188             :                                   const String &      i_sName,
     189             :                                   Type_id             i_nBase )
     190             : {
     191             :     Exception & ret = *new Exception( i_sName,
     192             :                                       i_nOwner,
     193         243 :                                       i_nBase );
     194         243 :     lhf_Store_NewEntity(ret, i_nOwner);
     195         243 :     return ret;
     196             : }
     197             : 
     198             : Enum &
     199         190 : CeAdmin::Store_Enum( Ce_id               i_nOwner,
     200             :                              const String &      i_sName )
     201             : {
     202             :     Enum & ret = *new Enum( i_sName,
     203         190 :                             i_nOwner );
     204         190 :     lhf_Store_NewEntity(ret, i_nOwner);
     205         190 :     return ret;
     206             : }
     207             : 
     208             : Typedef &
     209          18 : CeAdmin::Store_Typedef( Ce_id               i_nOwner,
     210             :                                 const String &      i_sName,
     211             :                                 Type_id             i_nDefiningType )
     212             : {
     213             :     Typedef & ret = *new Typedef( i_sName,
     214             :                                   i_nOwner,
     215          18 :                                   i_nDefiningType );
     216          18 :     lhf_Store_NewEntity(ret, i_nOwner);
     217          18 :     return ret;
     218             : }
     219             : 
     220             : 
     221             : ConstantsGroup &
     222         347 : CeAdmin::Store_ConstantsGroup( Ce_id               i_nOwner,
     223             :                                        const String &      i_sName )
     224             : {
     225             :     ConstantsGroup & ret = *new ConstantsGroup( i_sName,
     226         347 :                                                 i_nOwner );
     227         347 :     lhf_Store_NewEntity(ret, i_nOwner);
     228         347 :     return ret;
     229             : }
     230             : 
     231             : Singleton &
     232           4 : CeAdmin::Store_Singleton( Ce_id               i_nOwner,
     233             :                                   const String &      i_sName )
     234             : {
     235             :     Singleton & ret = *new Singleton( i_sName,
     236           4 :                                       i_nOwner );
     237           4 :     lhf_Store_NewEntity(ret, i_nOwner);
     238           4 :     return ret;
     239             : }
     240             : 
     241             : SglIfcSingleton &
     242          11 : CeAdmin::Store_SglIfcSingleton( Ce_id               i_nOwner,
     243             :                                      const String &      i_sName,
     244             :                                      Type_id             i_nBaseInterface )
     245             : {
     246             :     SglIfcSingleton &
     247             :         ret = *new SglIfcSingleton( i_sName,
     248             :                                     i_nOwner,
     249          11 :                                     i_nBaseInterface );
     250          11 :     lhf_Store_NewEntity(ret, i_nOwner);
     251          11 :     return ret;
     252             : }
     253             : 
     254             : Constant &
     255        3220 : CeAdmin::Store_Constant( Ce_id               i_nOwner,
     256             :                                  const String &      i_sName,
     257             :                                  Type_id             i_nType,
     258             :                                  const String &      i_sValue )
     259             : {
     260             :     ConstantsGroup &
     261        3220 :         rOwner  = ary_cast<ConstantsGroup>(Storage()[i_nOwner]);
     262             :     Constant & ret = *new Constant( i_sName,
     263             :                                     i_nOwner,
     264        3220 :                                     rOwner.NameRoom(),
     265             :                                     i_nType,
     266        6440 :                                     i_sValue );
     267        3220 :     lhf_Put2Storage_and_AssignId(ret);
     268        3220 :     rOwner.Add_Constant(ret.CeId());
     269        3220 :     return ret;
     270             : }
     271             : 
     272             : Property &
     273        3166 : CeAdmin::Store_Property( Ce_id                  i_nOwner,
     274             :                                  const String &         i_sName,
     275             :                                  Type_id                i_nType,
     276             :                                  Property::Stereotypes  i_stereotypes )
     277             : {
     278             :     Service &
     279        3166 :         rOwner = ary_cast<Service>(Storage()[i_nOwner]);
     280             :     Property & ret = *new Property( i_sName,
     281             :                                     i_nOwner,
     282        3166 :                                     rOwner.NameRoom(),
     283             :                                     i_nType,
     284        6332 :                                     i_stereotypes );
     285        3166 :     lhf_Put2Storage_and_AssignId(ret);
     286        3166 :     rOwner.Add_Property(ret.CeId());
     287        3166 :     return ret;
     288             : }
     289             : 
     290             : Function &
     291        5502 : CeAdmin::Store_Function( Ce_id               i_nOwner,
     292             :                                  const String &      i_sName,
     293             :                                  Type_id             i_nReturnType,
     294             :                                  bool                i_bOneWay )
     295             : {
     296             :     Interface &
     297        5502 :         rOwner = ary_cast<Interface>(Storage()[i_nOwner]);
     298             :     Function & ret = *new Function( i_sName,
     299             :                                     i_nOwner,
     300        5502 :                                     rOwner.NameRoom(),
     301             :                                     i_nReturnType,
     302       11004 :                                       i_bOneWay);
     303        5502 :     lhf_Put2Storage_and_AssignId(ret);
     304        5502 :     rOwner.Add_Function(ret.CeId());
     305        5502 :     return ret;
     306             : }
     307             : 
     308             : Function &
     309          93 : CeAdmin::Store_ServiceConstructor( Ce_id               i_nOwner,
     310             :                                         const String &      i_sName )
     311             : {
     312             :     SglIfcService &
     313          93 :                 rOwner = ary_cast<SglIfcService>(Storage()[i_nOwner]);
     314             :     Function &  ret = *new Function( i_sName,
     315             :                                      i_nOwner,
     316          93 :                                      rOwner.NameRoom() );
     317          93 :     lhf_Put2Storage_and_AssignId(ret);
     318          93 :     rOwner.Add_Constructor(ret.CeId());
     319          93 :     return ret;
     320             : }
     321             : 
     322             : StructElement &
     323        1331 : CeAdmin::Store_StructMember( Ce_id               i_nOwner,
     324             :                                      const String &      i_sName,
     325             :                                      Type_id             i_nType )
     326             : {
     327             :     Struct &
     328        1331 :         rOwner = ary_cast<Struct>(Storage()[i_nOwner]);
     329             :     StructElement & ret = *new StructElement( i_sName,
     330             :                                               i_nOwner,
     331        1331 :                                               rOwner.NameRoom(),
     332        2662 :                                               i_nType );
     333        1331 :     lhf_Put2Storage_and_AssignId(ret);
     334        1331 :     rOwner.Add_Member(ret.CeId());
     335        1331 :     return ret;
     336             : }
     337             : 
     338             : StructElement &
     339         152 : CeAdmin::Store_ExceptionMember( Ce_id               i_nOwner,
     340             :                                         const String &      i_sName,
     341             :                                         Type_id             i_nType )
     342             : {
     343             :     Exception &
     344         152 :         rOwner = ary_cast<Exception>(Storage()[i_nOwner]);
     345             :     StructElement & ret = *new StructElement( i_sName,
     346             :                                               i_nOwner,
     347         152 :                                               rOwner.NameRoom(),
     348         304 :                                               i_nType );
     349         152 :     lhf_Put2Storage_and_AssignId(ret);
     350         152 :     rOwner.Add_Member(ret.CeId());
     351         152 :     return ret;
     352             : }
     353             : 
     354             : EnumValue &
     355        1297 : CeAdmin::Store_EnumValue( Ce_id               i_nOwner,
     356             :                                   const String &      i_sName,
     357             :                                   const String &      i_sValue )
     358             : {
     359             :     Enum &
     360        1297 :         rOwner = ary_cast<Enum>(Storage()[i_nOwner]);
     361             :     EnumValue & ret = *new EnumValue( i_sName,
     362             :                                       i_nOwner,
     363        1297 :                                       rOwner.NameRoom(),
     364        2594 :                                       i_sValue );
     365        1297 :     lhf_Put2Storage_and_AssignId(ret);
     366        1297 :     rOwner.Add_Value(ret.CeId());
     367        1297 :     return ret;
     368             : }
     369             : 
     370             : Attribute &
     371         513 : CeAdmin::Store_Attribute( Ce_id               i_nOwner,
     372             :                                   const String &      i_sName,
     373             :                                   Type_id             i_nType,
     374             :                                   bool                i_bReadOnly,
     375             :                                   bool                i_bBound )
     376             : {
     377             :     Interface &
     378         513 :         rOwner = ary_cast<Interface>(Storage()[i_nOwner]);
     379             : 
     380             :     Attribute & ret = *new Attribute ( i_sName,
     381             :                                        i_nOwner,
     382         513 :                                        rOwner.NameRoom(),
     383             :                                        i_nType,
     384             :                                        i_bReadOnly,
     385        1026 :                                        i_bBound );
     386         513 :     lhf_Put2Storage_and_AssignId(ret);
     387         513 :     rOwner.Add_Attribute(ret.CeId());
     388         513 :     return ret;
     389             : }
     390             : 
     391             : const Module &
     392        3084 : CeAdmin::GlobalNamespace() const
     393             : {
     394             :     csv_assert(pGlobalNamespace);
     395        3084 :     return *pGlobalNamespace;
     396             : }
     397             : 
     398             : const CodeEntity &
     399      122386 : CeAdmin::Find_Ce( Ce_id i_nId ) const
     400             : {
     401      122386 :     return Storage()[i_nId];
     402             : 
     403             : }
     404             : 
     405             : const Module &
     406       27876 : CeAdmin::Find_Module( Ce_id i_nId ) const
     407             : {
     408       27876 :     return ary_cast<Module>(Storage()[i_nId]);
     409             : }
     410             : 
     411             : const Module *
     412       14075 : CeAdmin::Search_Module( Ce_id i_nId ) const
     413             : {
     414       14075 :     if (NOT i_nId.IsValid())
     415         282 :         return 0;
     416       13793 :     return ary_cast<Module>( & Storage()[i_nId] );
     417             : }
     418             : 
     419             : const Function &
     420           0 : CeAdmin::Find_Function( Ce_id i_nId ) const
     421             : {
     422           0 :     return ary_cast<Function>(Storage()[i_nId]);
     423             : }
     424             : 
     425             : const Property &
     426           0 : CeAdmin::Find_Property( Ce_id i_nId ) const
     427             : {
     428           0 :     return ary_cast<Property>(Storage()[i_nId]);
     429             : }
     430             : 
     431             : const EnumValue &
     432           0 : CeAdmin::Find_EnumValue( Ce_id i_nId ) const
     433             : {
     434           0 :     return ary_cast<EnumValue>(Storage()[i_nId]);
     435             : }
     436             : 
     437             : const Constant &
     438           0 : CeAdmin::Find_Constant( Ce_id i_nId ) const
     439             : {
     440           0 :     return ary_cast<Constant>(Storage()[i_nId]);
     441             : }
     442             : 
     443             : const StructElement &
     444           0 : CeAdmin::Find_StructElement( Ce_id i_nId ) const
     445             : {
     446           0 :     return ary_cast<StructElement>(Storage()[i_nId]);
     447             : }
     448             : 
     449             : void
     450       87757 : CeAdmin::Get_Text( StringVector &      o_module,
     451             :                             String &            o_ce,
     452             :                             String &            o_member,
     453             :                             const CodeEntity &  i_ce ) const
     454             : {
     455       87757 :     const CodeEntity * pCe = &i_ce;
     456       87757 :     csv::erase_container(o_module);
     457       87757 :     o_ce.clear();
     458       87757 :     o_member.clear();
     459             : 
     460       87757 :     switch ( pCe->SightLevel() )
     461             :     {
     462             :         // Here are intentionally no breaks!
     463             :         case sl_Member:
     464       22021 :                         if ( is_type<Function>(*pCe) )
     465       22994 :                             o_member = StreamLock(200)()
     466       22994 :                                             << pCe->LocalName()
     467       11497 :                                             << "()"
     468       11497 :                                             << c_str;
     469             :                         else
     470       10524 :                             o_member = pCe->LocalName();
     471       22021 :                         pCe = & Storage()[pCe->Owner()];
     472             :         case sl_File:
     473       82378 :                         o_ce = pCe->LocalName();
     474       82378 :                         pCe = & Storage()[pCe->NameRoom()];
     475             :         case sl_Module:
     476       87757 :                         get_ModuleText(o_module,*pCe);
     477       87757 :                         break;
     478             :         default:
     479             :                         csv_assert(false);
     480             :     }   // end switch
     481       87757 : }
     482             : 
     483             : const NameLookup &
     484           0 : CeAdmin::NameDictionary() const
     485             : {
     486           0 :     return *pNameDictionary;
     487             : }
     488             : 
     489             : 
     490             : void
     491          27 : CeAdmin::Get_AlphabeticalIndex( std::vector<Ce_id> &            o_rResult,
     492             :                                 alphabetical_index::E_Letter    i_cLetter ) const
     493             : {
     494          27 :     const int C_nLowerUpperDiff = 'a'-'A';
     495             : 
     496             :     // Establishing filter:
     497             :     UINT8 filter[256];
     498             : 
     499          27 :     UINT8 nLetter = static_cast<UINT8>(i_cLetter);
     500          27 :     memset(filter, 0, 256);
     501          27 :     filter[nLetter] = 1;
     502          27 :     if ( i_cLetter != alphabetical_index::non_alpha )
     503          26 :         filter[nLetter - C_nLowerUpperDiff] = 1;
     504             : 
     505             :     // Gather entities which start with i_cLetter:
     506          27 :     o_rResult.reserve(1000);
     507             :     idl::Ce_Storage::c_iter
     508          27 :         itEnd = Storage().End();
     509     1581687 :     for ( idl::Ce_Storage::c_iter it = Storage().BeginUnreserved();
     510     1054458 :           it != itEnd;
     511             :           ++it )
     512             :     {
     513      527202 :         if ( filter[ static_cast<UINT8>(*(*it).LocalName().c_str()) ] == 1 )
     514       19526 :             o_rResult.push_back( (*it).CeId() );
     515          27 :     }
     516             : 
     517             :     std::sort( o_rResult.begin(),
     518             :                o_rResult.end(),
     519          27 :                IdSorter<Ce_Compare>() );
     520          27 : }
     521             : 
     522             : 
     523             : Module &
     524           4 : CeAdmin::GlobalNamespace()
     525             : {
     526             :     csv_assert(pGlobalNamespace);
     527           4 :     return *pGlobalNamespace;
     528             : }
     529             : 
     530             : CodeEntity &
     531           3 : CeAdmin::Find_Ce( Ce_id i_nId )
     532             : {
     533           3 :     return Storage()[i_nId];
     534             : }
     535             : 
     536             : void
     537      451811 : CeAdmin::get_ModuleText( StringVector &      o_module,
     538             :                               const CodeEntity &  i_ce ) const
     539             : {
     540      451811 :     if (i_ce.NameRoom().IsValid())
     541             :     {
     542             :         const CodeEntity &
     543      364054 :             rParent = Storage()[i_ce.NameRoom()];
     544      364054 :         get_ModuleText(o_module, rParent);
     545      364054 :         o_module.push_back(i_ce.LocalName());
     546             :     }
     547      451811 : }
     548             : 
     549             : Struct &
     550           3 : CeAdmin::lhf_Store_TplStruct( Ce_id               i_nOwner,
     551             :                                    const String &      i_sName,
     552             :                                    Type_id             i_nBase,
     553             :                                    const String &      i_sTemplateParam )
     554             : {
     555             :     csv_assert(NOT i_sTemplateParam.empty());
     556             : 
     557             :     TemplateParamType &
     558           3 :         rTpt = pTypePilot->Store_TemplateParamType(i_sTemplateParam);
     559             : 
     560             :     Struct & ret = *new Struct( i_sName,
     561             :                                 i_nOwner,
     562             :                                 i_nBase,
     563             :                                 i_sTemplateParam,
     564           3 :                                 rTpt.TypeId() );
     565           3 :     lhf_Store_NewEntity(ret, i_nOwner);
     566           3 :     rTpt.Set_StructId(ret.CeId());
     567             : 
     568           3 :     return ret;
     569             : }
     570             : 
     571             : 
     572             : }   // namespace idl
     573           3 : }   // namespace ary
     574             : 
     575             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10