1*efeef26fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*efeef26fSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*efeef26fSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*efeef26fSAndrew Rist  * distributed with this work for additional information
6*efeef26fSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*efeef26fSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*efeef26fSAndrew Rist  * "License"); you may not use this file except in compliance
9*efeef26fSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*efeef26fSAndrew Rist  *
11*efeef26fSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*efeef26fSAndrew Rist  *
13*efeef26fSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*efeef26fSAndrew Rist  * software distributed under the License is distributed on an
15*efeef26fSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*efeef26fSAndrew Rist  * KIND, either express or implied.  See the License for the
17*efeef26fSAndrew Rist  * specific language governing permissions and limitations
18*efeef26fSAndrew Rist  * under the License.
19*efeef26fSAndrew Rist  *
20*efeef26fSAndrew Rist  *************************************************************/
21*efeef26fSAndrew Rist 
22*efeef26fSAndrew Rist 
23cdf0e10cSrcweir #include "precompiled_sw.hxx"
24cdf0e10cSrcweir #include <swthreadmanager.hxx>
25cdf0e10cSrcweir #include <swthreadjoiner.hxx>
26cdf0e10cSrcweir #include <observablethread.hxx>
27cdf0e10cSrcweir #include <threadmanager.hxx>
28cdf0e10cSrcweir 
29cdf0e10cSrcweir /** class to manage threads in Writer - it conforms the singleton pattern
30cdf0e10cSrcweir 
31cdf0e10cSrcweir     OD 2007-04-13 #i73788#
32cdf0e10cSrcweir 
33cdf0e10cSrcweir     @author OD
34cdf0e10cSrcweir */
35cdf0e10cSrcweir bool SwThreadManager::mbThreadManagerInstantiated = false;
36cdf0e10cSrcweir 
SwThreadManager()37cdf0e10cSrcweir SwThreadManager::SwThreadManager()
38cdf0e10cSrcweir     : mpThreadManagerImpl( new ThreadManager( SwThreadJoiner::GetThreadJoiner() ) )
39cdf0e10cSrcweir {
40cdf0e10cSrcweir     mpThreadManagerImpl->Init();
41cdf0e10cSrcweir     mbThreadManagerInstantiated = true;
42cdf0e10cSrcweir }
43cdf0e10cSrcweir 
~SwThreadManager()44cdf0e10cSrcweir SwThreadManager::~SwThreadManager()
45cdf0e10cSrcweir {
46cdf0e10cSrcweir }
47cdf0e10cSrcweir 
48cdf0e10cSrcweir struct InitInstance : public rtl::Static<SwThreadManager, InitInstance> {};
49cdf0e10cSrcweir 
GetThreadManager()50cdf0e10cSrcweir SwThreadManager& SwThreadManager::GetThreadManager()
51cdf0e10cSrcweir {
52cdf0e10cSrcweir     return InitInstance::get();
53cdf0e10cSrcweir }
54cdf0e10cSrcweir 
ExistsThreadManager()55cdf0e10cSrcweir bool SwThreadManager::ExistsThreadManager()
56cdf0e10cSrcweir {
57cdf0e10cSrcweir     return mbThreadManagerInstantiated;
58cdf0e10cSrcweir }
59cdf0e10cSrcweir 
AddThread(const rtl::Reference<ObservableThread> & rThread)60cdf0e10cSrcweir oslInterlockedCount SwThreadManager::AddThread( const rtl::Reference< ObservableThread >& rThread )
61cdf0e10cSrcweir {
62cdf0e10cSrcweir     return mpThreadManagerImpl->AddThread( rThread );
63cdf0e10cSrcweir }
64cdf0e10cSrcweir 
RemoveThread(const oslInterlockedCount nThreadID)65cdf0e10cSrcweir void SwThreadManager::RemoveThread( const oslInterlockedCount nThreadID )
66cdf0e10cSrcweir {
67cdf0e10cSrcweir     mpThreadManagerImpl->RemoveThread( nThreadID );
68cdf0e10cSrcweir }
69cdf0e10cSrcweir 
SuspendStartingOfThreads()70cdf0e10cSrcweir void SwThreadManager::SuspendStartingOfThreads()
71cdf0e10cSrcweir {
72cdf0e10cSrcweir     mpThreadManagerImpl->SuspendStartingOfThreads();
73cdf0e10cSrcweir }
74cdf0e10cSrcweir 
ResumeStartingOfThreads()75cdf0e10cSrcweir void SwThreadManager::ResumeStartingOfThreads()
76cdf0e10cSrcweir {
77cdf0e10cSrcweir     mpThreadManagerImpl->ResumeStartingOfThreads();
78cdf0e10cSrcweir }
79cdf0e10cSrcweir 
StartingOfThreadsSuspended()80cdf0e10cSrcweir bool SwThreadManager::StartingOfThreadsSuspended()
81cdf0e10cSrcweir {
82cdf0e10cSrcweir     return mpThreadManagerImpl->StartingOfThreadsSuspended();
83cdf0e10cSrcweir }
84