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