LCOV - code coverage report
Current view: top level - libreoffice/autodoc/source/display/toolkit - out_node.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 53 53 100.0 %
Date: 2012-12-27 Functions: 14 14 100.0 %
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 <toolkit/out_node.hxx>
      22             : 
      23             : 
      24             : // NOT FULLY DEFINED SERVICES
      25             : #include <algorithm>
      26             : 
      27             : 
      28             : namespace output
      29             : {
      30             : 
      31             : 
      32             : namespace
      33             : {
      34             : 
      35             : struct Less_NodePtr
      36             : {
      37      895416 :     bool                operator()(
      38             :                             Node *              p1,
      39             :                             Node *              p2 ) const
      40      895416 :                         { return p1->Name() < p2->Name(); }
      41             : };
      42             : 
      43             : struct Less_NodePtr     C_Less_NodePtr;
      44             : 
      45             : 
      46           1 : Node  C_aNullNode(Node::null_object);
      47             : 
      48             : 
      49             : }   // namepace anonymous
      50             : 
      51             : 
      52             : //**********************        Node        ***************************//
      53             : 
      54             : 
      55      359662 : Node::Node()
      56             :     :   sName(),
      57             :         pParent(0),
      58             :         aChildren(),
      59             :         nDepth(0),
      60      359662 :         nNameRoomId(0)
      61             : {
      62      359662 : }
      63             : 
      64           1 : Node::Node( E_NullObject )
      65             :     :   sName(),
      66             :         pParent(0),
      67             :         aChildren(),
      68             :          nDepth(-1),
      69           1 :         nNameRoomId(0)
      70             : {
      71           1 : }
      72             : 
      73         119 : Node::Node(
      74             :     const String &  i_name,
      75             :     Node &          i_parent
      76             : ) :
      77             :     sName(i_name),
      78             :     pParent(&i_parent),
      79             :     aChildren(),
      80         119 :     nDepth(i_parent.Depth()+1),
      81         238 :     nNameRoomId(0)
      82             : {
      83         119 : }
      84             : 
      85      719564 : Node::~Node()
      86             : {
      87     1079703 :     for ( NodeList::iterator it = aChildren.begin();
      88      719802 :           it != aChildren.end();
      89             :           ++it )
      90             :     {
      91         119 :         delete *it;
      92             :     }
      93      359782 : }
      94             : 
      95      359661 : Node& Node::Provide_Child( const String & i_name )
      96             : {
      97      359661 :     Node* ret = find_Child(i_name);
      98      359661 :     if (ret != 0)
      99      359542 :         return *ret;
     100         119 :     return add_Child(i_name);
     101             : }
     102             : 
     103      395299 : void Node::Get_Path(
     104             :     StreamStr&  o_result,
     105             :     intt        i_maxDepth
     106             : ) const
     107             : {
     108             :     // Intentionally 'i_maxDepth != 0', so max_Depth == -1 sets no limit:
     109      395299 :     if (i_maxDepth != 0)
     110             :     {
     111      226896 :         if (pParent != 0)
     112      226896 :             pParent->Get_Path(o_result, i_maxDepth-1);
     113      226896 :         o_result << sName << '/';
     114             :     }
     115      395299 : }
     116             : 
     117         295 : void Node::Get_Chain(
     118             :     StringVector & o_result,
     119             :     intt           i_maxDepth
     120             : ) const
     121             : {
     122         295 :     if (i_maxDepth != 0)
     123             :     {
     124             :         // This is called also for the toplevel Node,
     125             :         //   but there happens nothing:
     126         295 :         if (pParent != 0)
     127             :         {
     128         237 :             pParent->Get_Chain(o_result, i_maxDepth-1);
     129         237 :             o_result.push_back(sName);
     130             :         }
     131             :     }
     132         295 : }
     133             : 
     134      359661 : Node* Node::find_Child( const String & i_name )
     135             : {
     136      359661 :     Node aSearch;
     137      359661 :     aSearch.sName = i_name;
     138             : 
     139             :     NodeList::const_iterator
     140             :         ret = std::lower_bound( aChildren.begin(),
     141             :                                 aChildren.end(),
     142             :                                 &aSearch,
     143      359661 :                                 C_Less_NodePtr );
     144      359661 :     if ( ret != aChildren.end() ? (*ret)->Name() == i_name : false )
     145      359542 :         return *ret;
     146             : 
     147         119 :     return 0;
     148             : }
     149             : 
     150         119 : Node& Node::add_Child( const String & i_name )
     151             : {
     152         119 :     DYN Node* pNew = new Node(i_name,*this);
     153             :     aChildren.insert( std::lower_bound( aChildren.begin(),
     154             :                                         aChildren.end(),
     155             :                                         pNew,
     156             :                                         C_Less_NodePtr ),
     157         119 :                       pNew );
     158         119 :     return *pNew;
     159             : }
     160             : 
     161      446218 : Node& Node::provide_Child(
     162             :     StringVector::const_iterator i_next,
     163             :     StringVector::const_iterator i_end
     164             : )
     165             : {
     166      446218 :     if (i_next == i_end)
     167       86675 :         return *this;
     168      359543 :     return Provide_Child(*i_next).provide_Child(i_next+1,i_end);
     169             : }
     170             : 
     171             : 
     172             : 
     173             : 
     174           1 : Node& Node::Null_()
     175             : {
     176           1 :     return C_aNullNode;
     177             : }
     178             : 
     179             : 
     180           3 : }   // namespace output
     181             : 
     182             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10