/' ============================================================================================= '/
/' FMOD Ex - Memory info header file. Copyright (c), Firelight Technologies Pty, Ltd. 2008-2011. '/
/'                                                                                               '/
/' Use this header if you are interested in getting detailed information on FMOD's memory        '/
/' usage. See the documentation for more details.                                                '/
/'                                                                                               '/
/' ============================================================================================= '/

#ifndef _FMOD_MEMORYINFO_BI
#define _FMOD_MEMORYINFO_BI

/'
[STRUCTURE]
[
    [DESCRIPTION]
    Structure to be filled with detailed memory usage information of an FMOD object

    [REMARKS]
    Every public FMOD class has a getMemoryInfo function which can be used to get detailed information on what memory resources are associated with the object in question. 
    On return from getMemoryInfo, each member of this structure will hold the amount of memory used for its type in bytes.
    
    Members marked with [in] mean the user sets the value before passing it to the function.
    Members marked with [out] mean FMOD sets the value to be used after the function exits.


    [PLATFORMS]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android

    [SEE_ALSO]
    Fmod_system_getMemoryInfo
    FMOD_EventSystem_GetMemoryInfo     
    FMOD_MEMBITS    
    FMOD_EVENT_MEMBITS
]
'/
type FMOD_MEMORY_USAGE_DETAILS
    as uinteger other                          /' [out] Memory not accounted for by other types '/
    as uinteger string                         /' [out] String data '/
    as uinteger system                         /' [out] System object and various internals '/
    as uinteger plugins                        /' [out] Plugin objects and internals '/
    as uinteger output                         /' [out] Output module object and internals '/
    as uinteger channel                        /' [out] Channel related memory '/
    as uinteger channelgroup                   /' [out] ChannelGroup objects and internals '/
    as uinteger codec                          /' [out] Codecs allocated for streaming '/
    as uinteger file                           /' [out] File buffers and structures '/
    as uinteger sound                          /' [out] Sound objects and internals '/
    as uinteger secondaryram                   /' [out] Sound data stored in secondary RAM '/
    as uinteger soundgroup                     /' [out] SoundGroup objects and internals '/
    as uinteger streambuffer                   /' [out] Stream buffer memory '/
    as uinteger dspconnection                  /' [out] DSPConnection objects and internals '/
    as uinteger dsp                            /' [out] DSP implementation objects '/
    as uinteger dspcodec                       /' [out] Realtime file format decoding DSP objects '/
    as uinteger profile                        /' [out] Profiler memory footprint. '/
    as uinteger recordbuffer                   /' [out] Buffer used to store recorded data from microphone '/
    as uinteger reverb                         /' [out] Reverb implementation objects '/
    as uinteger reverbchannelprops             /' [out] Reverb channel properties structs '/
    as uinteger geometry                       /' [out] Geometry objects and internals '/
    as uinteger syncpoint                      /' [out] Sync point memory. '/
    as uinteger eventsystem                    /' [out] EventSystem and various internals '/
    as uinteger musicsystem                    /' [out] MusicSystem and various internals '/
    as uinteger fev                            /' [out] Definition of objects contained in all loaded projects e.g. events, groups, categories '/
    as uinteger memoryfsb                      /' [out] Data loaded with preloadFSB '/
    as uinteger eventproject                   /' [out] EventProject objects and internals '/
    as uinteger eventgroupi                    /' [out] EventGroup objects and internals '/
    as uinteger soundbankclass                 /' [out] Objects used to manage wave banks '/
    as uinteger soundbanklist                  /' [out] Data used to manage lists of wave bank usage '/
    as uinteger streaminstance                 /' [out] Stream objects and internals '/
    as uinteger sounddefclass                  /' [out] Sound definition objects '/
    as uinteger sounddefdefclass               /' [out] Sound definition static data objects '/
    as uinteger sounddefpool                   /' [out] Sound definition pool data '/
    as uinteger reverbdef                      /' [out] Reverb definition objects '/
    as uinteger eventreverb                    /' [out] Reverb objects '/
    as uinteger userproperty                   /' [out] User property objects '/
    as uinteger eventinstance                  /' [out] Event instance base objects '/
    as uinteger eventinstance_complex          /' [out] Complex event instance objects '/
    as uinteger eventinstance_simple           /' [out] Simple event instance objects '/
    as uinteger eventinstance_layer            /' [out] Event layer instance objects '/
    as uinteger eventinstance_sound            /' [out] Event sound instance objects '/
    as uinteger eventenvelope                  /' [out] Event envelope objects '/
    as uinteger eventenvelopedef               /' [out] Event envelope definition objects '/
    as uinteger eventparameter                 /' [out] Event parameter objects '/
    as uinteger eventcategory                  /' [out] Event category objects '/
    as uinteger eventenvelopepoint             /' [out] Event envelope point objects '/
    as uinteger eventinstancepool              /' [out] Event instance pool memory '/
end type


/'
[DEFINE]
[
    [NAME]
    FMOD_MEMBITS

    [DESCRIPTION]
    Bitfield used to request specific memory usage information from the getMemoryInfo function of every public FMOD Ex class.
    Use with the "memorybits" parameter of getMemoryInfo to get information on FMOD Ex memory usage.

    [REMARKS]
    Every public FMOD class has a getMemoryInfo function which can be used to get detailed information on what memory resources are associated with the object in question. 
    The FMOD_MEMBITS defines can be OR'd together to specify precisely what memory usage you'd like to get information on. See Fmod_system_getMemoryInfo for an example.

    [PLATFORMS]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android

    [SEE_ALSO]
    FMOD_EVENT_MEMBITS
    Fmod_system_getMemoryInfo
]
'/
#define FMOD_MEMBITS_OTHER                       &h00000001  /' Memory not accounted for by other types '/
#define FMOD_MEMBITS_STRING                      &h00000002  /' String data '/

#define FMOD_MEMBITS_SYSTEM                      &h00000004  /' System object and various internals '/
#define FMOD_MEMBITS_PLUGINS                     &h00000008  /' Plugin objects and internals '/
#define FMOD_MEMBITS_OUTPUT                      &h00000010  /' Output module object and internals '/
#define FMOD_MEMBITS_CHANNEL                     &h00000020  /' Channel related memory '/
#define FMOD_MEMBITS_CHANNELGROUP                &h00000040  /' ChannelGroup objects and internals '/
#define FMOD_MEMBITS_CODEC                       &h00000080  /' Codecs allocated for streaming '/
#define FMOD_MEMBITS_FILE                        &h00000100  /' Codecs allocated for streaming '/
#define FMOD_MEMBITS_SOUND                       &h00000200  /' Sound objects and internals '/
#define FMOD_MEMBITS_SOUND_SECONDARYRAM          &h00000400  /' Sound data stored in secondary RAM '/
#define FMOD_MEMBITS_SOUNDGROUP                  &h00000800  /' SoundGroup objects and internals '/
#define FMOD_MEMBITS_STREAMBUFFER                &h00001000  /' Stream buffer memory '/
#define FMOD_MEMBITS_DSPCONNECTION               &h00002000  /' DSPConnection objects and internals '/
#define FMOD_MEMBITS_DSP                         &h00004000  /' DSP implementation objects '/
#define FMOD_MEMBITS_DSPCODEC                    &h00008000  /' Realtime file format decoding DSP objects '/
#define FMOD_MEMBITS_PROFILE                     &h00010000  /' Profiler memory footprint. '/
#define FMOD_MEMBITS_RECORDBUFFER                &h00020000  /' Buffer used to store recorded data from microphone '/
#define FMOD_MEMBITS_REVERB                      &h00040000  /' Reverb implementation objects '/
#define FMOD_MEMBITS_REVERBCHANNELPROPS          &h00080000  /' Reverb channel properties structs '/
#define FMOD_MEMBITS_GEOMETRY                    &h00100000  /' Geometry objects and internals '/
#define FMOD_MEMBITS_SYNCPOINT                   &h00200000  /' Sync point memory. '/
#define FMOD_MEMBITS_ALL                         &hffffffff  /' All memory used by FMOD Ex '/
/' [DEFINE_END] '/


/'
[DEFINE]
[
    [NAME]
    FMOD_EVENT_MEMBITS

    [DESCRIPTION]
    Bitfield used to request specific memory usage information from the getMemoryInfo function of every public FMOD Event System class.
    Use with the "event_memorybits" parameter of getMemoryInfo to get information on FMOD Event System memory usage.

    [REMARKS]
    Every public FMOD Event System class has a getMemoryInfo function which can be used to get detailed information on what memory resources are associated with the object in question. 
    The FMOD_EVENT_MEMBITS defines can be OR'd together to specify precisely what memory usage you'd like to get information on. See EventFmod_system_getMemoryInfo for an example.

    [PLATFORMS]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android

    [SEE_ALSO]
    FMOD_MEMBITS
    Fmod_system_getMemoryInfo
]
'/                                               
#define FMOD_EVENT_MEMBITS_EVENTSYSTEM           &h00000001  /' EventSystem and various internals '/
#define FMOD_EVENT_MEMBITS_MUSICSYSTEM           &h00000002  /' MusicSystem and various internals '/
#define FMOD_EVENT_MEMBITS_FEV                   &h00000004  /' Definition of objects contained in all loaded projects e.g. events, groups, categories '/
#define FMOD_EVENT_MEMBITS_MEMORYFSB             &h00000008  /' Data loaded with preloadFSB '/
#define FMOD_EVENT_MEMBITS_EVENTPROJECT          &h00000010  /' EventProject objects and internals '/
#define FMOD_EVENT_MEMBITS_EVENTGROUPI           &h00000020  /' EventGroup objects and internals '/
#define FMOD_EVENT_MEMBITS_SOUNDBANKCLASS        &h00000040  /' Objects used to manage wave banks '/
#define FMOD_EVENT_MEMBITS_SOUNDBANKLIST         &h00000080  /' Data used to manage lists of wave bank usage '/
#define FMOD_EVENT_MEMBITS_STREAMINSTANCE        &h00000100  /' Stream objects and internals '/
#define FMOD_EVENT_MEMBITS_SOUNDDEFCLASS         &h00000200  /' Sound definition objects '/
#define FMOD_EVENT_MEMBITS_SOUNDDEFDEFCLASS      &h00000400  /' Sound definition static data objects '/
#define FMOD_EVENT_MEMBITS_SOUNDDEFPOOL          &h00000800  /' Sound definition pool data '/
#define FMOD_EVENT_MEMBITS_REVERBDEF             &h00001000  /' Reverb definition objects '/
#define FMOD_EVENT_MEMBITS_EVENTREVERB           &h00002000  /' Reverb objects '/
#define FMOD_EVENT_MEMBITS_USERPROPERTY          &h00004000  /' User property objects '/
#define FMOD_EVENT_MEMBITS_EVENTINSTANCE         &h00008000  /' Event instance base objects '/
#define FMOD_EVENT_MEMBITS_EVENTINSTANCE_COMPLEX &h00010000  /' Complex event instance objects '/
#define FMOD_EVENT_MEMBITS_EVENTINSTANCE_SIMPLE  &h00020000  /' Simple event instance objects '/
#define FMOD_EVENT_MEMBITS_EVENTINSTANCE_LAYER   &h00040000  /' Event layer instance objects '/
#define FMOD_EVENT_MEMBITS_EVENTINSTANCE_SOUND   &h00080000  /' Event sound instance objects '/
#define FMOD_EVENT_MEMBITS_EVENTENVELOPE         &h00100000  /' Event envelope objects '/
#define FMOD_EVENT_MEMBITS_EVENTENVELOPEDEF      &h00200000  /' Event envelope definition objects '/
#define FMOD_EVENT_MEMBITS_EVENTPARAMETER        &h00400000  /' Event parameter objects '/
#define FMOD_EVENT_MEMBITS_EVENTCATEGORY         &h00800000  /' Event category objects '/
#define FMOD_EVENT_MEMBITS_EVENTENVELOPEPOINT    &h01000000  /' Event envelope point object+s '/
#define FMOD_EVENT_MEMBITS_EVENTINSTANCEPOOL     &h02000000  /' Event instance pool data '/
#define FMOD_EVENT_MEMBITS_ALL                   &hffffffff  /' All memory used by FMOD Event System '/

/' All event instance memory '/
#define FMOD_EVENT_MEMBITS_EVENTINSTANCE_GROUP   (FMOD_EVENT_MEMBITS_EVENTINSTANCE            or _
                                                     FMOD_EVENT_MEMBITS_EVENTINSTANCE_COMPLEX or _
                                                     FMOD_EVENT_MEMBITS_EVENTINSTANCE_SIMPLE  or _
                                                     FMOD_EVENT_MEMBITS_EVENTINSTANCE_LAYER   or _
                                                     FMOD_EVENT_MEMBITS_EVENTINSTANCE_SOUND)

/' All sound definition memory '/
#define FMOD_EVENT_MEMBITS_SOUNDDEF_GROUP        (FMOD_EVENT_MEMBITS_SOUNDDEFCLASS            or _
                                                     FMOD_EVENT_MEMBITS_SOUNDDEFDEFCLASS      or _
                                                     FMOD_EVENT_MEMBITS_SOUNDDEFPOOL)
/' [DEFINE_END] '/

#endif
