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