ProteoWizard
IterationListener.hpp
Go to the documentation of this file.
1 //
2 // $Id: IterationListener.hpp 2626 2011-04-12 15:18:16Z chambm $
3 //
4 //
5 // Original author: Darren Kessner <darren@proteowizard.org>
6 //
7 // Copyright 2008 Spielberg Family Center for Applied Proteomics
8 // Cedars Sinai Medical Center, Los Angeles, California 90048
9 //
10 // Licensed under the Apache License, Version 2.0 (the "License");
11 // you may not use this file except in compliance with the License.
12 // You may obtain a copy of the License at
13 //
14 // http://www.apache.org/licenses/LICENSE-2.0
15 //
16 // Unless required by applicable law or agreed to in writing, software
17 // distributed under the License is distributed on an "AS IS" BASIS,
18 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 // See the License for the specific language governing permissions and
20 // limitations under the License.
21 //
22 
23 
24 #ifndef _ITERATIONLISTENER_HPP_
25 #define _ITERATIONLISTENER_HPP_
26 
27 
29 #include "boost/shared_ptr.hpp"
30 #include <string>
31 
32 
33 namespace pwiz {
34 namespace util {
35 
36 
37 /// interface to be implemented by clients who want progress callbacks
39 {
40  public:
41 
42  enum Status {Status_Ok, Status_Cancel};
43 
45  {
47  size_t iterationCount; // 0 == unknown
48  const std::string& message;
49 
50  UpdateMessage(size_t index, size_t count, const std::string& message = std::string())
51  : iterationIndex(index), iterationCount(count), message(message)
52  {}
53  };
54 
55  virtual Status update(const UpdateMessage& updateMessage) {return Status_Ok;}
56 
57  virtual ~IterationListener(){}
58 };
59 
60 typedef boost::shared_ptr<IterationListener> IterationListenerPtr;
61 
62 
63 /// handles registration of IterationListeners and broadcast of update messages
65 {
66  public:
67 
69  void addListener(const IterationListenerPtr& listener, size_t iterationPeriod);
70  void addListenerWithTimer(const IterationListenerPtr& listener, double timePeriod); // seconds
71  void removeListener(const IterationListenerPtr& listener);
72 
73  IterationListener::Status broadcastUpdateMessage(
74  const IterationListener::UpdateMessage& updateMessage) const;
75 
76  private:
77  class Impl;
78  boost::shared_ptr<Impl> impl_;
81 };
82 
83 
84 } // namespace util
85 } // namespace pwiz
86 
87 
88 #endif // _ITERATIONLISTENER_HPP_
89