1 /*---------------------------------------------------------------------------*
2 Project: NintendoWare
3 File: snd_DisposeCallbackManager.cpp
4
5 Copyright (C)2009-2010 Nintendo Co., Ltd./HAL Laboratory, Inc. All rights reserved.
6
7 These coded instructions, statements, and computer programs contain
8 proprietary information of Nintendo of America Inc. and/or Nintendo
9 Company Ltd., and are protected by Federal copyright law. They may
10 not be disclosed to third parties or copied or duplicated in any form,
11 in whole or in part, without the prior written consent of Nintendo.
12
13 $Revision: 27043 $
14 *---------------------------------------------------------------------------*/
15
16 #include "precompiled.h"
17
18 #include <nw/snd/snd_DisposeCallbackManager.h>
19 #include <nw/snd/snd_SoundThread.h>
20
21 namespace nw {
22 namespace snd {
23 namespace internal {
24 namespace driver {
25
26 /* ========================================================================
27 member function
28 ======================================================================== */
29
30 /*---------------------------------------------------------------------------*
31 Name: GetInstance
32
33 Description: シングルトンのインスタンスを取得する
34
35 Arguments: なし
36
37 Returns: なし
38 *---------------------------------------------------------------------------*/
GetInstance()39 DisposeCallbackManager& DisposeCallbackManager::GetInstance()
40 {
41 static DisposeCallbackManager instance;
42 return instance;
43 }
44
45 /*---------------------------------------------------------------------------*
46 Name: DisposeCallbackManager
47
48 Description: コンストラクタ
49
50 Arguments: なし
51
52 Returns: なし
53 *---------------------------------------------------------------------------*/
DisposeCallbackManager()54 DisposeCallbackManager::DisposeCallbackManager()
55 {
56 }
57
58 /*---------------------------------------------------------------------------*
59 Name: RegisterDisposeCallback
60
61 Description: 無効化コールバックを登録する
62
63 Arguments: なし
64
65 Returns: なし
66 *---------------------------------------------------------------------------*/
RegisterDisposeCallback(DisposeCallback * callback)67 void DisposeCallbackManager::RegisterDisposeCallback( DisposeCallback* callback )
68 {
69 m_CallbackList.PushBack( callback );
70
71 // NN_LOG("regist %d %d\n",nn::os::Thread::GetCurrentId(),m_CallbackList.GetSize());
72 }
73
74 /*---------------------------------------------------------------------------*
75 Name: UnregisterDisposeCallback
76
77 Description: 無効化コールバックの登録を解除する
78
79 Arguments: なし
80
81 Returns: なし
82 *---------------------------------------------------------------------------*/
UnregisterDisposeCallback(DisposeCallback * callback)83 void DisposeCallbackManager::UnregisterDisposeCallback( DisposeCallback* callback )
84 {
85 m_CallbackList.Erase( callback );
86
87 // NN_LOG("unregist %d %d\n",nn::os::Thread::GetCurrentId(),m_CallbackList.GetSize());
88 }
89
90 /*---------------------------------------------------------------------------*
91 Name: GetCallbackCount
92
93 Description: 登録されている無効化コールバック数を取得する
94
95 Arguments: なし
96
97 Returns: なし
98 *---------------------------------------------------------------------------*/
GetCallbackCount() const99 unsigned long DisposeCallbackManager::GetCallbackCount() const
100 {
101 return m_CallbackList.GetSize();
102 }
103
104 /*---------------------------------------------------------------------------*
105 Name: Dispose
106
107 Description: 登録されたオブジェクトに対して無効化を行う
108
109 Arguments: なし
110
111 Returns: なし
112 *---------------------------------------------------------------------------*/
Dispose(void * mem,unsigned long size)113 void DisposeCallbackManager::Dispose( void* mem, unsigned long size )
114 {
115 const void* start = mem;
116 const void* end = static_cast<u8*>( mem ) + size;
117
118 for ( CallbackList::Iterator itr = GetInstance().m_CallbackList.GetBeginIter();
119 itr != GetInstance().m_CallbackList.GetEndIter();
120 )
121 {
122 CallbackList::Iterator curItr = itr++;
123 curItr->InvalidateData( start, end );
124 }
125 }
126
127 } // namespace nw::snd::internal::driver
128 } // namespace nw::snd::internal
129 } // namespace nw::snd
130 } // namespace nw
131
132