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