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