diff options
author | Norbert Thiebaud <nthiebaud@gmail.com> | 2011-09-14 10:10:34 -0500 |
---|---|---|
committer | Norbert Thiebaud <nthiebaud@gmail.com> | 2011-09-14 10:10:49 -0500 |
commit | 0a97ece91e8a87724230f39276f0a7537b1566c3 (patch) | |
tree | 7008ee761af3294548978c3a0421608000f60781 /xml2cmp/source/finder | |
parent | 8578e3c80d99da0b47cd450a9be61cef28f411b0 (diff) |
merge srvdepy functions into xml2cmp and simplify xml2cmp gbuild
Diffstat (limited to 'xml2cmp/source/finder')
-rw-r--r-- | xml2cmp/source/finder/dependy.cxx | 225 | ||||
-rw-r--r-- | xml2cmp/source/finder/dependy.hxx | 118 |
2 files changed, 0 insertions, 343 deletions
diff --git a/xml2cmp/source/finder/dependy.cxx b/xml2cmp/source/finder/dependy.cxx deleted file mode 100644 index 8a7ae0a8d94f..000000000000 --- a/xml2cmp/source/finder/dependy.cxx +++ /dev/null @@ -1,225 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -#include "dependy.hxx" -#include <iostream> -#include "../support/syshelp.hxx" -#include "../support/list.hxx" -#include "../xcd/xmltree.hxx" -#include "../xcd/parse.hxx" - - - -Simstr ShortName(const Simstr & i_rService); - - - -Service::Service( const char * i_sName ) - : sName(i_sName) - // aImplementations -{ -} - -ServiceInfo & -Service::AddImplementation( const char * i_sLibrary ) -{ - ServiceInfo * ret = new ServiceInfo(i_sLibrary); - aImplementations.push_back(ret); - return *ret; -} - -ServiceInfo::ServiceInfo( const char * i_sLibrary ) - : sImplementingLibrary(i_sLibrary) - // aNeededServices -{ -} - -void -ServiceInfo::AddDependency( const char * i_sNeededService ) -{ - aNeededServices.push_back(i_sNeededService); -} - -DependencyFinder::DependencyFinder() -{ -} - -DependencyFinder::~DependencyFinder() -{ -} - -void -DependencyFinder::GatherData( const char * i_sSearchDirectory ) -{ - List<Simstr> aFiles; - GatherFileNames( aFiles, i_sSearchDirectory ); - - for ( unsigned i = 0; i < aFiles.size(); ++i ) - { - ReadFile( aFiles[i].str() ); - } -} - -void -DependencyFinder::FindNeededServices( StringVector & o_rLibraries, - StringVector & o_rServices, - const Simstr & i_rService ) -{ - Map_Services::const_iterator itService = aServices.find(i_rService); - if ( itService == aServices.end() ) - { - std::cerr << "Error: Service \"" - << i_rService.str() - << "\" not found." - << std::endl; - return ; - } - - aResult_Libraries.erase( aResult_Libraries.begin(), aResult_Libraries.end() ); - aResult_Services.erase( aResult_Services.begin(), aResult_Services.end() ); - - Add2Result( *(*itService).second ); - - for ( std::set< Simstr >::const_iterator il = aResult_Libraries.begin(); - il != aResult_Libraries.end(); - ++il ) - { - o_rLibraries.push_back(*il); - } - - for ( std::set< Simstr >::const_iterator is = aResult_Services.begin(); - is != aResult_Services.end(); - ++is ) - { - o_rServices.push_back(*is); - } -} - -void -DependencyFinder::ReadFile( const char * i_sFilename ) -{ - ModuleDescription aModule; - X2CParser aParser(aModule); - - if ( !aParser.Parse(i_sFilename) ) - { - std::cerr << "Error: File \"" - << i_sFilename - << "\" could not be parsed." - << std::endl; - return; - } - - // GetResults: - Simstr sModule = aModule.ModuleName(); - - List < const MultipleTextElement* > aImplServices; - List < const MultipleTextElement* > aNeededServices; - - aModule.Get_SupportedServices(aImplServices); - aModule.Get_ServiceDependencies(aNeededServices); - - unsigned nImplServicesSize = aImplServices.size(); - unsigned nNeededServicesSize = aNeededServices.size(); - - for ( unsigned i = 0; i < nImplServicesSize; ++i ) - { - const MultipleTextElement & rImpl = *aImplServices[i]; - - unsigned nImplDataSize = rImpl.Size(); - for ( unsigned di = 0; di < nImplDataSize; ++di ) - { - Simstr sService = ShortName(rImpl.Data(di)); - Service * pService = aServices[sService]; - if (pService == 0) - { - pService = new Service(rImpl.Data(di)); - aServices[sService] = pService; - } - ServiceInfo & rSInfo = pService->AddImplementation(sModule); - - for ( unsigned n = 0; n < nNeededServicesSize; ++n ) - { - unsigned nNeededDataSize = aNeededServices[n]->Size(); - for ( unsigned dn = 0; dn < nNeededDataSize; ++dn ) - { - if (! aNeededServices[n]->Data(dn).is_no_text()) - rSInfo.AddDependency( ShortName(aNeededServices[n]->Data(dn)) ); - } // end for dn - } // end for n - } // end for di - } // end for i -} - -void -DependencyFinder::Add2Result( const Service & i_rService ) -{ - const ServiceInfo & rSInfo = i_rService.FirstImplementation(); - aResult_Libraries.insert(rSInfo.Library()); - - const ServiceInfo::List_NeededServices & rNeededs - = rSInfo.NeededServices(); - for ( StringVector::const_iterator it = rNeededs.begin(); - it != rNeededs.end(); - ++it ) - { - std::pair< std::set< Simstr >::iterator, bool > aInsertResult - = aResult_Services.insert(*it); - if (aInsertResult.second) - { // Needed service not yet known - Map_Services::const_iterator itFound = aServices.find(*it); - if ( itFound == aServices.end() ) - { - std::cerr << "Needed service \"" - << (*it).str() - << "\" not found," - << std::endl; - } - else - { - Add2Result( *(*itFound).second ); - } - } // endif (! aInsertResult.second) - } // end for (it) -} - - - -Simstr -ShortName(const Simstr & i_rService) -{ - const char * pStart = i_rService.str(); - const char * pEnd = strchr(pStart,' '); - if (pEnd != 0) - return Simstr(pStart, 0, int(pEnd-pStart)); - else - return i_rService; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/xml2cmp/source/finder/dependy.hxx b/xml2cmp/source/finder/dependy.hxx deleted file mode 100644 index c2c2d7d9233f..000000000000 --- a/xml2cmp/source/finder/dependy.hxx +++ /dev/null @@ -1,118 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef X2C_DEPENDY_HXX -#define X2C_DEPENDY_HXX - - -#include <vector> -#include <map> -#include <set> -#include <../support/sistr.hxx> - -class Service; -class ServiceInfo; - -typedef std::vector< Simstr> StringVector; -typedef std::vector< ServiceInfo* > List_Implementations; -typedef std::map< Simstr, Service* > Map_Services; - -class Service -{ - public: - Service( - const char * i_sName ); - - ServiceInfo & AddImplementation( - const char * i_sLibrary ); /// That is: module-name. - - const Simstr & Name() const { return sName; } - const ServiceInfo & FirstImplementation() const - { return *aImplementations[0]; } - - private: - Simstr sName; - List_Implementations - aImplementations; -}; - -class ServiceInfo -{ - public: - typedef StringVector List_NeededServices; - - ServiceInfo( - const char * i_sLibrary ); - - void AddDependency( - const char * i_sNeededService ); - - const Simstr & Library() const { return sImplementingLibrary; } - const List_NeededServices & - NeededServices() const { return aNeededServices; } - - - private: - Simstr sImplementingLibrary; - List_NeededServices aNeededServices; -}; - - -class DependencyFinder -{ - public: - DependencyFinder(); - ~DependencyFinder(); - - void GatherData( - const char * i_sSearchDirectory ); - - void FindNeededServices( - StringVector & o_rLibraries, - StringVector & o_rServices, - const Simstr & i_rService ); - private: - void ReadFile( - const char * i_sFilename ); - void Add2Result( - const Service & i_rService ); - - // Data - Map_Services aServices; - - // Temporary data - std::set< Simstr > aResult_Libraries; - std::set< Simstr > aResult_Services; -}; - - - -#endif - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |