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