LCOV - code coverage report
Current view: top level - libreoffice/autodoc/source/parser_i/idl - pe_struc.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 129 135 95.6 %
Date: 2012-12-27 Functions: 31 33 93.9 %
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 <s2_luidl/pe_struc.hxx>
      22             : 
      23             : 
      24             : // NOT FULLY DECLARED SERVICES
      25             : #include <ary/idl/i_gate.hxx>
      26             : #include <ary/idl/i_struct.hxx>
      27             : #include <ary/idl/ip_ce.hxx>
      28             : #include <ary/doc/d_oldidldocu.hxx>
      29             : #include <s2_luidl/tk_ident.hxx>
      30             : #include <s2_luidl/tk_punct.hxx>
      31             : #include <s2_luidl/tk_keyw.hxx>
      32             : #include <s2_luidl/pe_type2.hxx>
      33             : #include <s2_luidl/pe_selem.hxx>
      34             : 
      35             : 
      36             : 
      37             : namespace csi
      38             : {
      39             : namespace uidl
      40             : {
      41             : 
      42             : 
      43           3 : PE_Struct::PE_Struct()
      44             :     // :    aWork,
      45             :     //      pStati
      46             : {
      47           3 :     pStati = new S_Stati(*this);
      48           3 : }
      49             : 
      50             : void
      51           3 : PE_Struct::EstablishContacts( UnoIDL_PE *               io_pParentPE,
      52             :                               ary::Repository &         io_rRepository,
      53             :                               TokenProcessing_Result &  o_rResult )
      54             : {
      55           3 :     UnoIDL_PE::EstablishContacts(io_pParentPE,io_rRepository,o_rResult);
      56           3 :     Work().pPE_Element->EstablishContacts(this,io_rRepository,o_rResult);
      57           3 :     Work().pPE_Type->EstablishContacts(this,io_rRepository,o_rResult);
      58           3 : }
      59             : 
      60           6 : PE_Struct::~PE_Struct()
      61             : {
      62           6 : }
      63             : 
      64             : void
      65        7531 : PE_Struct::ProcessToken( const Token & i_rToken )
      66             : {
      67        7531 :     i_rToken.Trigger(*Stati().pCurStatus);
      68        7531 : }
      69             : 
      70             : 
      71             : void
      72         382 : PE_Struct::InitData()
      73             : {
      74         382 :     Work().InitData();
      75         382 :     Stati().pCurStatus = &Stati().aWaitForName;
      76         382 : }
      77             : 
      78             : void
      79         381 : PE_Struct::TransferData()
      80             : {
      81         381 :     if (NOT Work().bIsPreDeclaration)
      82             :     {
      83             :         csv_assert(Work().sData_Name.size() > 0);
      84             :         csv_assert(Work().nCurStruct.IsValid());
      85             :     }
      86         381 :     Stati().pCurStatus = &Stati().aNone;
      87         381 : }
      88             : 
      89             : void
      90        1427 : PE_Struct::ReceiveData()
      91             : {
      92        1427 :     Stati().pCurStatus->On_SubPE_Left();
      93        1427 : }
      94             : 
      95           3 : PE_Struct::S_Work::S_Work()
      96             :     :   sData_Name(),
      97             :         sData_TemplateParam(),
      98             :         bIsPreDeclaration(false),
      99             :         nCurStruct(0),
     100             :         pPE_Element(0),
     101             :         nCurParsed_ElementRef(0),
     102             :         pPE_Type(0),
     103           3 :         nCurParsed_Base(0)
     104             : 
     105             : {
     106           3 :     pPE_Element = new PE_StructElement(nCurParsed_ElementRef,nCurStruct,sData_TemplateParam);
     107           3 :     pPE_Type = new PE_Type(nCurParsed_Base);
     108           3 : }
     109             : 
     110             : void
     111         382 : PE_Struct::S_Work::InitData()
     112             : {
     113         382 :     sData_Name.clear();
     114         382 :     sData_TemplateParam.clear();
     115         382 :     bIsPreDeclaration = false;
     116         382 :     nCurStruct = 0;
     117         382 :     nCurParsed_ElementRef = 0;
     118         382 :     nCurParsed_Base = 0;
     119         382 : }
     120             : 
     121             : void
     122          96 : PE_Struct::S_Work::Prepare_PE_QualifiedName()
     123             : {
     124          96 :     nCurParsed_ElementRef = 0;
     125          96 : }
     126             : 
     127             : void
     128        1331 : PE_Struct::S_Work::Prepare_PE_Element()
     129             : {
     130        1331 :     nCurParsed_Base = 0;
     131        1331 : }
     132             : 
     133             : void
     134         382 : PE_Struct::S_Work::Data_Set_Name( const char * i_sName )
     135             : {
     136         382 :     sData_Name = i_sName;
     137         382 : }
     138             : 
     139             : void
     140           4 : PE_Struct::S_Work::Data_Set_TemplateParam( const char * i_sTemplateParam )
     141             : {
     142           4 :     sData_TemplateParam = i_sTemplateParam;
     143           4 : }
     144             : 
     145           3 : PE_Struct::S_Stati::S_Stati(PE_Struct & io_rStruct)
     146             :     :   aNone(io_rStruct),
     147             :         aWaitForName(io_rStruct),
     148             :         aGotName(io_rStruct),
     149             :         aWaitForTemplateParam(io_rStruct),
     150             :         aWaitForTemplateEnd(io_rStruct),
     151             :         aWaitForBase(io_rStruct),
     152             :         aGotBase(io_rStruct),
     153             :         aWaitForElement(io_rStruct),
     154             :         aWaitForFinish(io_rStruct),
     155           3 :         pCurStatus(0)
     156             : {
     157           3 :     pCurStatus = &aNone;
     158           3 : }
     159             : 
     160             : 
     161             : //***********************       Stati       ***************************//
     162             : 
     163             : 
     164             : UnoIDL_PE &
     165        4567 : PE_Struct::PE_StructState::MyPE()
     166             : {
     167        4567 :     return rStruct;
     168             : }
     169             : 
     170             : 
     171             : void
     172         382 : PE_Struct::State_WaitForName::Process_Identifier( const TokIdentifier & i_rToken )
     173             : {
     174         382 :     Work().Data_Set_Name(i_rToken.Text());
     175         382 :     MoveState( Stati().aGotName );
     176         382 :     SetResult(done,stay);
     177         382 : }
     178             : 
     179             : void
     180         385 : PE_Struct::State_GotName::Process_Punctuation( const TokPunctuation & i_rToken )
     181             : {
     182         385 :     if ( i_rToken.Id() != TokPunctuation::Semicolon )
     183             :     {
     184         385 :         switch (i_rToken.Id())
     185             :         {
     186             :             case TokPunctuation::Colon:
     187          96 :                 MoveState( Stati().aWaitForBase );
     188          96 :                 SetResult(done,push_sure,Work().pPE_Type.Ptr());
     189          96 :                 Work().Prepare_PE_QualifiedName();
     190          96 :                 break;
     191             :             case TokPunctuation::CurledBracketOpen:
     192         285 :                 PE().store_Struct();
     193         285 :                 MoveState( Stati().aWaitForElement );
     194         285 :                 SetResult(done,stay);
     195         285 :                 break;
     196             :             case TokPunctuation::Lesser:
     197           4 :                 MoveState( Stati().aWaitForTemplateParam );
     198           4 :                 SetResult(done,stay);
     199           4 :                 break;
     200             :             default:
     201           0 :                 SetResult(not_done,pop_failure);
     202             :         }   // end switch
     203             :     }
     204             :     else
     205             :     {
     206           0 :         Work().sData_Name.clear();
     207           0 :         SetResult(done,pop_success);
     208             :     }
     209         385 : }
     210             : 
     211             : void
     212           4 : PE_Struct::State_WaitForTemplateParam::Process_Identifier( const TokIdentifier & i_rToken )
     213             : {
     214           4 :     Work().Data_Set_TemplateParam(i_rToken.Text());
     215           4 :     MoveState( Stati().aWaitForTemplateEnd );
     216           4 :     SetResult(done,stay);
     217           4 : }
     218             : 
     219             : void
     220           4 : PE_Struct::State_WaitForTemplateEnd::Process_Punctuation( const TokPunctuation & )
     221             : {
     222             :     // Assume:  TokPunctuation::Greater
     223           4 :     MoveState( Stati().aGotName );
     224           4 :     SetResult(done,stay);
     225           4 : }
     226             : 
     227             : void
     228          96 : PE_Struct::State_WaitForBase::On_SubPE_Left()
     229             : {
     230          96 :     MoveState(Stati().aGotBase);
     231          96 : }
     232             : 
     233             : void
     234          96 : PE_Struct::State_GotBase::Process_Punctuation( const TokPunctuation & i_rToken )
     235             : {
     236          96 :     if ( i_rToken.Id() == TokPunctuation::CurledBracketOpen )
     237             :     {
     238          96 :         PE().store_Struct();
     239          96 :         MoveState( Stati().aWaitForElement );
     240          96 :         SetResult(done,stay);
     241             :     }
     242             :     else
     243             :     {
     244           0 :         SetResult(not_done,pop_failure);
     245             :     }
     246          96 : }
     247             : 
     248             : void
     249         207 : PE_Struct::State_WaitForElement::Process_Identifier( const TokIdentifier & )
     250             : {
     251         207 :     SetResult( not_done, push_sure, Work().pPE_Element.Ptr() );
     252         207 :     Work().Prepare_PE_Element();
     253         207 : }
     254             : 
     255             : void
     256          37 : PE_Struct::State_WaitForElement::Process_NameSeparator()
     257             : {
     258          37 :     SetResult( not_done, push_sure, Work().pPE_Element.Ptr());
     259          37 :     Work().Prepare_PE_Element();
     260          37 : }
     261             : 
     262             : void
     263         976 : PE_Struct::State_WaitForElement::Process_BuiltInType( const TokBuiltInType & )
     264             : {
     265         976 :     SetResult( not_done, push_sure, Work().pPE_Element.Ptr());
     266         976 :     Work().Prepare_PE_Element();
     267         976 : }
     268             : 
     269             : void
     270         111 : PE_Struct::State_WaitForElement::Process_TypeModifier(const TokTypeModifier & )
     271             : {
     272         111 :     SetResult( not_done, push_sure, Work().pPE_Element.Ptr());
     273         111 :     Work().Prepare_PE_Element();
     274         111 : }
     275             : 
     276             : void
     277         381 : PE_Struct::State_WaitForElement::Process_Punctuation( const TokPunctuation & i_rToken )
     278             : {
     279         381 :     if ( i_rToken.Id() == TokPunctuation::CurledBracketClose )
     280             :     {
     281         381 :         MoveState( Stati().aWaitForFinish );
     282         381 :         SetResult( done, stay );
     283             :     }
     284             :     else
     285             :     {
     286           0 :         SetResult( not_done, pop_failure );
     287             :     }
     288         381 : }
     289             : 
     290             : void
     291         381 : PE_Struct::State_WaitForFinish::Process_Punctuation( const TokPunctuation & i_rToken )
     292             : {
     293         381 :     if (i_rToken.Id() == TokPunctuation::Semicolon)
     294             :     {
     295         381 :         MoveState( Stati().aNone );
     296         381 :         SetResult( done, pop_success );
     297             :     }
     298             :     else
     299             :     {
     300           0 :         SetResult( not_done, pop_failure );
     301             :     }
     302         381 : }
     303             : 
     304             : void
     305         381 : PE_Struct::store_Struct()
     306             : {
     307             :     ary::idl::Struct &
     308         381 :         rCe = Gate().Ces().Store_Struct(
     309         381 :                         CurNamespace().CeId(),
     310         381 :                         Work().sData_Name,
     311         381 :                         Work().nCurParsed_Base,
     312        1143 :                         Work().sData_TemplateParam );
     313         381 :     PassDocuAt(rCe);
     314         381 :     Work().nCurStruct = rCe.CeId();
     315         381 : }
     316             : 
     317             : 
     318             : }   // namespace uidl
     319           3 : }   // namespace csi
     320             : 
     321             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10