1 /*---------------------------------------------------------------------------*
2 Project: NintendoWare
3 File: snd_MidiSequenceTrackAllocator.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_MidiSequenceTrackAllocator.h>
21
22 #include <nw/snd/snd_MidiSequenceTrack.h>
23
24 namespace nw {
25 namespace snd {
26 namespace internal {
27 namespace driver {
28
29 class MidiSequenceTrackPool
30 {
31 public:
GetInstance()32 static InstancePool<MidiSequenceTrack>& GetInstance()
33 {
34 static InstancePool<MidiSequenceTrack> instance;
35 return instance;
36 }
37
38 private:
MidiSequenceTrackPool()39 MidiSequenceTrackPool() {}
40 };
41
42
43 /* ========================================================================
44 static member function
45 ======================================================================== */
46
47
48 /*---------------------------------------------------------------------------*
49 Name: AllocTrack
50
51 Description: トラックを確保します
52
53 Arguments: None.
54
55 Returns: 確保できたときは、トラックID
56 確保できなかったときは、-1 を返します
57 *---------------------------------------------------------------------------*/
AllocTrack(SequenceSoundPlayer * player)58 SequenceTrack* MidiSequenceTrackAllocator::AllocTrack( SequenceSoundPlayer* player )
59 {
60 MidiSequenceTrack* track = MidiSequenceTrackPool::GetInstance().Alloc();
61 if ( track != NULL )
62 {
63 track->SetSequenceSoundPlayer( player );
64 }
65 return track;
66 }
67
68 /*---------------------------------------------------------------------------*
69 Name: FreeTrack
70
71 Description: トラックを開放します
72
73 Arguments: trackID - トラックID
74
75 Returns: None.
76 *---------------------------------------------------------------------------*/
FreeTrack(SequenceTrack * track)77 void MidiSequenceTrackAllocator::FreeTrack( SequenceTrack* track )
78 {
79 NW_NULL_ASSERT( track );
80
81 track->SetSequenceSoundPlayer( NULL );
82
83 MidiSequenceTrackPool::GetInstance().Free( reinterpret_cast<MidiSequenceTrack*>( track ) ); // TODO: 気になるキャスト
84 }
85
86 /*---------------------------------------------------------------------------*
87 Name: GetAllocatableTrackCount
88
89 Description: 確保可能なトラック数を返します
90
91 Arguments: なし
92
93 Returns: トラック数
94 *---------------------------------------------------------------------------*/
GetAllocatableTrackCount() const95 int MidiSequenceTrackAllocator::GetAllocatableTrackCount() const
96 {
97 return MidiSequenceTrackPool::GetInstance().Count();
98 }
99
100 /*---------------------------------------------------------------------------*
101 Name: Create
102
103 Description: インスタンスプールを作成します
104
105 Arguments: buffer - バッファ
106 size - バッファサイズ
107
108 Returns: 作成したプール中のインスタンス数
109 *---------------------------------------------------------------------------*/
Create(void * buffer,unsigned long size)110 unsigned long MidiSequenceTrackAllocator::Create( void* buffer, unsigned long size )
111 {
112 return MidiSequenceTrackPool::GetInstance().Create( buffer, size );
113 }
114
115 /*---------------------------------------------------------------------------*
116 Name: Destroy
117
118 Description: インスタンスプールを破棄します
119
120 Arguments: buffer - バッファ
121 size - バッファサイズ
122
123 Returns: なし
124 *---------------------------------------------------------------------------*/
Destroy(void * buffer,unsigned long size)125 void MidiSequenceTrackAllocator::Destroy( void* buffer, unsigned long size )
126 {
127 MidiSequenceTrackPool::GetInstance().Destroy( buffer, size );
128 }
129
130 } // namespace nw::snd::internal::driver
131 } // namespace nw::snd::internal
132 } // namespace nw::snd
133 } // namespace nw
134
135