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