1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski #ifndef ARY_IDL_NNFINDER_HXX 25*b1cdbd2cSJim Jagielski #define ARY_IDL_NNFINDER_HXX 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski // USED SERVICES 28*b1cdbd2cSJim Jagielski #include "is_ce.hxx" 29*b1cdbd2cSJim Jagielski 30*b1cdbd2cSJim Jagielski 31*b1cdbd2cSJim Jagielski 32*b1cdbd2cSJim Jagielski 33*b1cdbd2cSJim Jagielski namespace ary 34*b1cdbd2cSJim Jagielski { 35*b1cdbd2cSJim Jagielski namespace idl 36*b1cdbd2cSJim Jagielski { 37*b1cdbd2cSJim Jagielski 38*b1cdbd2cSJim Jagielski 39*b1cdbd2cSJim Jagielski /** Gives context info for tree search functions. 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielski @collab ->ary::Search_SubTree<>() 42*b1cdbd2cSJim Jagielski @collab ->ary::Search_SubTree_UpTillRoot<>() 43*b1cdbd2cSJim Jagielski */ 44*b1cdbd2cSJim Jagielski class Find_ModuleNode 45*b1cdbd2cSJim Jagielski { 46*b1cdbd2cSJim Jagielski public: 47*b1cdbd2cSJim Jagielski typedef Ce_id id_type; 48*b1cdbd2cSJim Jagielski typedef StringVector::const_iterator name_iterator; 49*b1cdbd2cSJim Jagielski 50*b1cdbd2cSJim Jagielski // LIFECYCLE Find_ModuleNode(const Ce_Storage & i_rStorage,name_iterator it_begin,name_iterator it_end,const String & i_sName)51*b1cdbd2cSJim Jagielski Find_ModuleNode( 52*b1cdbd2cSJim Jagielski const Ce_Storage & i_rStorage, 53*b1cdbd2cSJim Jagielski name_iterator it_begin, 54*b1cdbd2cSJim Jagielski name_iterator it_end, 55*b1cdbd2cSJim Jagielski const String & i_sName ) 56*b1cdbd2cSJim Jagielski : rStorage(i_rStorage), 57*b1cdbd2cSJim Jagielski itBegin(it_begin), 58*b1cdbd2cSJim Jagielski itEnd(it_end), 59*b1cdbd2cSJim Jagielski sName2Search(i_sName) { if (itBegin != itEnd ? (*itBegin).empty() : false) ++itBegin; } 60*b1cdbd2cSJim Jagielski // OPERATIONS operator ()(id_type i_id) const61*b1cdbd2cSJim Jagielski const Module * operator()( 62*b1cdbd2cSJim Jagielski id_type i_id ) const 63*b1cdbd2cSJim Jagielski { return i_id.IsValid() 64*b1cdbd2cSJim Jagielski ? & ary_cast<Module>(rStorage[i_id]) 65*b1cdbd2cSJim Jagielski : 0; } 66*b1cdbd2cSJim Jagielski Begin() const67*b1cdbd2cSJim Jagielski name_iterator Begin() const { return itBegin; } End() const68*b1cdbd2cSJim Jagielski name_iterator End() const { return itEnd; } Name2Search() const69*b1cdbd2cSJim Jagielski const String & Name2Search() const { return sName2Search; } 70*b1cdbd2cSJim Jagielski 71*b1cdbd2cSJim Jagielski private: 72*b1cdbd2cSJim Jagielski // DATA 73*b1cdbd2cSJim Jagielski const Ce_Storage & rStorage; 74*b1cdbd2cSJim Jagielski name_iterator itBegin; 75*b1cdbd2cSJim Jagielski name_iterator itEnd; 76*b1cdbd2cSJim Jagielski String sName2Search; 77*b1cdbd2cSJim Jagielski }; 78*b1cdbd2cSJim Jagielski 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielski 81*b1cdbd2cSJim Jagielski 82*b1cdbd2cSJim Jagielski class Types_forSetCe_Id 83*b1cdbd2cSJim Jagielski { 84*b1cdbd2cSJim Jagielski public: 85*b1cdbd2cSJim Jagielski typedef Ce_id element_type; 86*b1cdbd2cSJim Jagielski typedef Ce_Storage find_type; 87*b1cdbd2cSJim Jagielski 88*b1cdbd2cSJim Jagielski // KORR_FUTURE: Check, if this sorting is right or the ary standard 89*b1cdbd2cSJim Jagielski // sorting should be used. 90*b1cdbd2cSJim Jagielski struct sort_type 91*b1cdbd2cSJim Jagielski { sort_typeary::idl::Types_forSetCe_Id::sort_type92*b1cdbd2cSJim Jagielski sort_type( 93*b1cdbd2cSJim Jagielski const find_type & i_rFinder ) 94*b1cdbd2cSJim Jagielski : rFinder(i_rFinder) {} operator ()ary::idl::Types_forSetCe_Id::sort_type95*b1cdbd2cSJim Jagielski bool operator()( 96*b1cdbd2cSJim Jagielski const element_type & 97*b1cdbd2cSJim Jagielski i_r1, 98*b1cdbd2cSJim Jagielski const element_type & 99*b1cdbd2cSJim Jagielski i_r2 ) const 100*b1cdbd2cSJim Jagielski { 101*b1cdbd2cSJim Jagielski return rFinder[i_r1].LocalName() 102*b1cdbd2cSJim Jagielski < rFinder[i_r2].LocalName(); 103*b1cdbd2cSJim Jagielski } 104*b1cdbd2cSJim Jagielski 105*b1cdbd2cSJim Jagielski private: 106*b1cdbd2cSJim Jagielski const find_type & rFinder; 107*b1cdbd2cSJim Jagielski 108*b1cdbd2cSJim Jagielski }; 109*b1cdbd2cSJim Jagielski }; 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski } // namespace idl 113*b1cdbd2cSJim Jagielski } // namespace ary 114*b1cdbd2cSJim Jagielski #endif 115