00001 #ifndef LadspaLibrary_hxx 00002 #define LadspaLibrary_hxx 00003 00004 #include <ladspa.h> 00005 #include <vector> 00006 00007 namespace CLAM 00008 { 00009 00019 class LadspaLibrary 00020 { 00021 std::vector<LADSPA_Descriptor * > _descriptors; 00022 static void CleanUpDescriptor(LADSPA_Descriptor *& descriptor) 00023 { 00024 if (not descriptor) return; 00025 delete[] descriptor->Label; 00026 delete[] descriptor->Name; 00027 delete[] descriptor->Maker; 00028 delete[] descriptor->Copyright; 00029 delete[] descriptor->PortDescriptors; 00030 00031 for (unsigned long lIndex = 0; lIndex < descriptor->PortCount; lIndex++) 00032 delete[] descriptor->PortNames[lIndex]; 00033 00034 delete[] descriptor->PortNames; 00035 delete[] descriptor->PortRangeHints; 00036 delete descriptor; 00037 descriptor = 0; 00038 } 00039 public: 00040 LadspaLibrary() 00041 { 00042 } 00043 ~LadspaLibrary() 00044 { 00045 for (unsigned i=0; i<_descriptors.size(); i++) 00046 CleanUpDescriptor(_descriptors[i]); 00047 } 00048 void AddPluginType(LADSPA_Descriptor * descriptor) 00049 { 00050 _descriptors.push_back(descriptor); 00051 } 00052 LADSPA_Descriptor * pluginAt(unsigned long i) 00053 { 00054 if (i>=_descriptors.size()) return 0; 00055 return _descriptors[i]; 00056 } 00057 static char *dupstr( char const *args ) 00058 { 00059 const size_t v = strlen(args) + 1; 00060 char * s = new char[v]; 00061 memcpy( s, args, v); 00062 return s; 00063 } 00064 00065 }; 00066 } 00067 00068 #endif//LadspaLibrary_hxx 00069