NW4F Snd
Loading...
Searching...
No Matches
snd_FrameHeap.h
Go to the documentation of this file.
1#pragma once
2
3#include <nw/ut/ut_LinkList.h>
4#include <nw/ut/ut_FrameHeap.h>
5
6namespace nw { namespace snd {
7
8class SoundArchive;
9class SoundDataManager;
10
11namespace internal {
12
14{
15public:
16 using DisposeCallback = void (*)(void* mem, unsigned long size, void* userArg);
17
18 struct Block
19 {
20 public:
21 Block(void* buffer, u32 size, DisposeCallback callback, void* callbackArg)
22 : m_pBuffer(buffer)
23 , m_Size(size)
24 , m_Callback(callback)
25 , m_pCallbackArg(callbackArg)
26 {
27 }
28
30 {
31 if (m_Callback != nullptr)
32 {
33 m_Callback(m_pBuffer, m_Size, m_pCallbackArg);
34 }
35 }
36
37 void* GetBufferAddr() { return m_pBuffer; }
38 const void* GetBufferAddr() const { return m_pBuffer; }
39 u32 GetBufferSize() const { return m_Size; }
41 const void* GetDisposeCallbackArg() const { return m_pCallbackArg; }
42
43 public:
45
46 private:
47 void* m_pBuffer;
51 };
52
54
55 class Section
56 {
57 public:
60
61 void AppendBlock(Block* block);
62 const BlockList& GetBlockList() const { return m_BlockList; }
64
65 void* GetAddr() { return this; }
66 void SetUseCallback(bool use) { m_UseCallback = use; }
67
68 void Dump(nw::snd::SoundDataManager& mgr, nw::snd::SoundArchive& arc) const;
69
70 public:
72
73 private:
76 };
77
79
80private:
81 static const int HEAP_ALIGN = 256;
82
83public:
86
87 bool Create(void* startAddress, u32 size);
88 void Destroy();
89
90 void* Alloc(u32 size, FrameHeap::DisposeCallback callback, void* callbackArg);
91 void Clear();
92
93 int SaveState();
94 void LoadState(int level);
95 int GetCurrentLevel() const;
96
97 u32 GetSize() const;
99
100 bool IsValid() const { return m_pHeap != nullptr; }
101
102 void Dump(SoundDataManager& mgr, SoundArchive& arc) const;
103 bool ProcessCallback(int level);
104
105private:
108};
109static_assert(sizeof(FrameHeap) == 0x10, "nw::snd::internal::FrameHeap size mismatch");
110
111} } }
Definition snd_SoundArchive.h:11
Definition snd_FrameHeap.h:56
bool m_UseCallback
Definition snd_FrameHeap.h:75
BlockList & GetBlockList()
Definition snd_FrameHeap.h:63
BlockList m_BlockList
Definition snd_FrameHeap.h:74
void * GetAddr()
Definition snd_FrameHeap.h:65
void SetUseCallback(bool use)
Definition snd_FrameHeap.h:66
void Dump(nw::snd::SoundDataManager &mgr, nw::snd::SoundArchive &arc) const
ut::LinkListNode m_Link
Definition snd_FrameHeap.h:71
const BlockList & GetBlockList() const
Definition snd_FrameHeap.h:62
Definition snd_FrameHeap.h:14
void Dump(SoundDataManager &mgr, SoundArchive &arc) const
bool IsValid() const
Definition snd_FrameHeap.h:100
static const int HEAP_ALIGN
Definition snd_FrameHeap.h:81
void * Alloc(u32 size, FrameHeap::DisposeCallback callback, void *callbackArg)
ut::LinkList< Section, offsetof(Section, m_Link)> SectionList
Definition snd_FrameHeap.h:78
void(*)(void *mem, unsigned long size, void *userArg) DisposeCallback
Definition snd_FrameHeap.h:16
bool ProcessCallback(int level)
bool Create(void *startAddress, u32 size)
ut::LinkList< Block, offsetof(Block, m_Link)> BlockList
Definition snd_FrameHeap.h:53
SectionList m_SectionList
Definition snd_FrameHeap.h:107
ut::FrameHeap * m_pHeap
Definition snd_FrameHeap.h:106
Definition snd_BasicSound.cpp:3
Definition snd_BasicSound.cpp:3
Definition snd_FrameHeap.h:19
void * m_pCallbackArg
Definition snd_FrameHeap.h:50
Block(void *buffer, u32 size, DisposeCallback callback, void *callbackArg)
Definition snd_FrameHeap.h:21
void * m_pBuffer
Definition snd_FrameHeap.h:47
u32 GetBufferSize() const
Definition snd_FrameHeap.h:39
DisposeCallback m_Callback
Definition snd_FrameHeap.h:49
u32 m_Size
Definition snd_FrameHeap.h:48
DisposeCallback GetDisposeCallback() const
Definition snd_FrameHeap.h:40
void * GetBufferAddr()
Definition snd_FrameHeap.h:37
const void * GetBufferAddr() const
Definition snd_FrameHeap.h:38
~Block()
Definition snd_FrameHeap.h:29
ut::LinkListNode m_Link
Definition snd_FrameHeap.h:44
const void * GetDisposeCallbackArg() const
Definition snd_FrameHeap.h:41