sbMediaListBatchCallback.h
Go to the documentation of this file.
1 /*
2 //
3 // BEGIN SONGBIRD GPL
4 //
5 // This file is part of the Songbird web player.
6 //
7 // Copyright(c) 2005-2008 POTI, Inc.
8 // http://songbirdnest.com
9 //
10 // This file may be licensed under the terms of of the
11 // GNU General Public License Version 2 (the "GPL").
12 //
13 // Software distributed under the License is distributed
14 // on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
15 // express or implied. See the GPL for the specific language
16 // governing rights and limitations.
17 //
18 // You should have received a copy of the GPL along with this
19 // program. If not, go to http://www.gnu.org/licenses/gpl.html
20 // or write to the Free Software Foundation, Inc.,
21 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
22 //
23 // END SONGBIRD GPL
24 //
25 */
26 
27 #ifndef __SB_MEDIALIST_BATCH_CALLBACK_H__
28 #define __SB_MEDIALIST_BATCH_CALLBACK_H__
29 
30 #include <sbIMediaList.h>
31 
36 {
37  typedef nsresult (*sbMediaListBatchCallbackFunc)(nsISupports* aUserData);
38 public:
39 
40  explicit
41  sbMediaListBatchCallback(sbMediaListBatchCallbackFunc aCallbackFunc)
42  : mCallbackFunc(aCallbackFunc)
43  {
44  NS_ASSERTION(aCallbackFunc, "Null function pointer!");
45  }
46 
47  NS_IMETHOD_(nsrefcnt) AddRef()
48  {
49  NS_PRECONDITION(PRInt32(mRefCnt) >= 0, "illegal refcnt");
50  NS_ASSERT_OWNINGTHREAD(sbMediaListBatchCallback);
51  ++mRefCnt;
52  NS_LOG_ADDREF(this, mRefCnt, "sbMediaListBatchCallback", sizeof(*this));
53  return mRefCnt;
54  }
55 
56  NS_IMETHOD_(nsrefcnt) Release(void)
57  {
58  NS_PRECONDITION(0 != mRefCnt, "dup release");
59  NS_ASSERT_OWNINGTHREAD(sbMediaListBatchCallback);
60  --mRefCnt;
61  NS_LOG_RELEASE(this, mRefCnt, "sbMediaListBatchCallback");
62  if (mRefCnt == 0) {
63  mRefCnt = 1; /* stabilize */
64  NS_DELETEXPCOM(this);
65  return 0;
66  }
67  return mRefCnt;
68  }
69 
70  NS_IMETHOD QueryInterface(const nsIID& aIID, void** aInstancePtr)
71  {
72  NS_ASSERTION(aInstancePtr,
73  "QueryInterface requires a non-NULL destination!");
74  nsresult rv = NS_ERROR_FAILURE;
76  return rv;
77  }
78 
79  NS_IMETHOD RunBatched(nsISupports* aUserData)
80  {
81  return (*mCallbackFunc)(aUserData);
82  }
83 
84 protected:
85  nsAutoRefCnt mRefCnt;
86  NS_DECL_OWNINGTHREAD
87 
88 private:
89  sbMediaListBatchCallbackFunc mCallbackFunc;
90 };
91 
92 #endif /* __SB_MEDIALIST_BATCH_CALLBACK_H__ */
NS_IMETHOD RunBatched(nsISupports *aUserData)
NS_IMETHOD QueryInterface(const nsIID &aIID, void **aInstancePtr)
NS_IMETHOD_(nsrefcnt) Release(void)
sbMediaListBatchCallback(sbMediaListBatchCallbackFunc aCallbackFunc)