Browse Source

Simplify LinkedList a bit, other misc changes

tags/1.9.4
falkTX 10 years ago
parent
commit
f42ae722cc
7 changed files with 128 additions and 138 deletions
  1. +2
    -2
      source/tests/RtLinkedList.cpp
  2. +22
    -19
      source/utils/CarlaDssiUtils.cpp
  3. +1
    -1
      source/utils/CarlaDssiUtils.hpp
  4. +6
    -6
      source/utils/CarlaLadspaUtils.hpp
  5. +1
    -1
      source/utils/CarlaOscUtils.hpp
  6. +51
    -71
      source/utils/LinkedList.hpp
  7. +45
    -38
      source/utils/RtLinkedList.hpp

+ 2
- 2
source/tests/RtLinkedList.cpp View File

@@ -43,8 +43,8 @@ struct PostRtEvents {


PostRtEvents() PostRtEvents()
: dataPool(MIN_RT_EVENTS, MAX_RT_EVENTS), : dataPool(MIN_RT_EVENTS, MAX_RT_EVENTS),
data(dataPool),
dataPendingRT(dataPool) {}
data(dataPool, true),
dataPendingRT(dataPool, true) {}


~PostRtEvents() ~PostRtEvents()
{ {


+ 22
- 19
source/utils/CarlaDssiUtils.cpp View File

@@ -23,38 +23,41 @@


// ----------------------------------------------------------------------- // -----------------------------------------------------------------------


const char* find_dssi_ui(const char* const filename, const char* const label)
const char* find_dssi_ui(const char* const filename, const char* const label) noexcept
{ {
CARLA_SAFE_ASSERT_RETURN(filename != nullptr && filename[0] != '\0', nullptr); CARLA_SAFE_ASSERT_RETURN(filename != nullptr && filename[0] != '\0', nullptr);
CARLA_SAFE_ASSERT_RETURN(label != nullptr && label[0] != '\0', nullptr); CARLA_SAFE_ASSERT_RETURN(label != nullptr && label[0] != '\0', nullptr);
carla_debug("find_dssi_ui(\"%s\", \"%s\")", filename, label); carla_debug("find_dssi_ui(\"%s\", \"%s\")", filename, label);


QString guiFilename;
QString pluginDir(filename);
pluginDir.resize(pluginDir.lastIndexOf("."));
try {
QString guiFilename;
QString pluginDir(filename);
pluginDir.resize(pluginDir.lastIndexOf("."));


QString checkLabel(label);
QString checkSName(QFileInfo(pluginDir).baseName());
QString checkLabel(label);
QString checkSName(QFileInfo(pluginDir).baseName());


if (! checkLabel.endsWith("_")) checkLabel += "_";
if (! checkSName.endsWith("_")) checkSName += "_";
if (! checkLabel.endsWith("_")) checkLabel += "_";
if (! checkSName.endsWith("_")) checkSName += "_";


QStringList guiFiles(QDir(pluginDir).entryList());
QStringList guiFiles(QDir(pluginDir).entryList());


foreach (const QString& gui, guiFiles)
{
if (gui.startsWith(checkLabel) || gui.startsWith(checkSName))
foreach (const QString& gui, guiFiles)
{ {
QFileInfo finalname(pluginDir + QDir::separator() + gui);
guiFilename = finalname.absoluteFilePath();
break;
if (gui.startsWith(checkLabel) || gui.startsWith(checkSName))
{
QFileInfo finalname(pluginDir + QDir::separator() + gui);
guiFilename = finalname.absoluteFilePath();
break;
}
} }
}


if (guiFilename.isEmpty())
return nullptr;
if (guiFilename.isEmpty())
return nullptr;


return carla_strdup(guiFilename.toUtf8().constData());
return carla_strdup(guiFilename.toUtf8().constData());

} CARLA_SAFE_EXCEPTION_RETURN("find_dssi_ui", nullptr);
} }


// ----------------------------------------------------------------------- // -----------------------------------------------------------------------

+ 1
- 1
source/utils/CarlaDssiUtils.hpp View File

@@ -24,7 +24,7 @@
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
// Find UI binary for a plugin (returned value must be deleted) // Find UI binary for a plugin (returned value must be deleted)


const char* find_dssi_ui(const char* const filename, const char* const label);
const char* find_dssi_ui(const char* const filename, const char* const label) noexcept;


// ----------------------------------------------------------------------- // -----------------------------------------------------------------------




+ 6
- 6
source/utils/CarlaLadspaUtils.hpp View File

@@ -49,7 +49,7 @@ const LADSPA_RDF_Descriptor* ladspa_rdf_dup(const LADSPA_RDF_Descriptor* const o
{ {
newDescriptor->Ports = new LADSPA_RDF_Port[newDescriptor->PortCount]; newDescriptor->Ports = new LADSPA_RDF_Port[newDescriptor->PortCount];


for (unsigned long i=0; i < newDescriptor->PortCount; ++i)
for (ulong i=0; i < newDescriptor->PortCount; ++i)
{ {
LADSPA_RDF_Port* const oldPort(&oldDescriptor->Ports[i]); LADSPA_RDF_Port* const oldPort(&oldDescriptor->Ports[i]);
LADSPA_RDF_Port* const newPort(&newDescriptor->Ports[i]); LADSPA_RDF_Port* const newPort(&newDescriptor->Ports[i]);
@@ -67,7 +67,7 @@ const LADSPA_RDF_Descriptor* ladspa_rdf_dup(const LADSPA_RDF_Descriptor* const o
{ {
newPort->ScalePoints = new LADSPA_RDF_ScalePoint[oldPort->ScalePointCount]; newPort->ScalePoints = new LADSPA_RDF_ScalePoint[oldPort->ScalePointCount];


for (unsigned long j=0; j < oldPort->ScalePointCount; ++j)
for (ulong j=0; j < oldPort->ScalePointCount; ++j)
{ {
LADSPA_RDF_ScalePoint* const oldScalePoint(&oldPort->ScalePoints[j]); LADSPA_RDF_ScalePoint* const oldScalePoint(&oldPort->ScalePoints[j]);
LADSPA_RDF_ScalePoint* const newScalePoint(&newPort->ScalePoints[j]); LADSPA_RDF_ScalePoint* const newScalePoint(&newPort->ScalePoints[j]);
@@ -124,7 +124,7 @@ bool is_ladspa_rdf_descriptor_valid(const LADSPA_RDF_Descriptor* const rdfDescri
return false; return false;
} }


for (unsigned long i=0; i < rdfDescriptor->PortCount; ++i)
for (ulong i=0; i < rdfDescriptor->PortCount; ++i)
{ {
if (! is_ladspa_port_good(rdfDescriptor->Ports[i].Type, descriptor->PortDescriptors[i])) if (! is_ladspa_port_good(rdfDescriptor->Ports[i].Type, descriptor->PortDescriptors[i]))
{ {
@@ -169,7 +169,7 @@ LADSPA_Data get_default_ladspa_port_value(const LADSPA_PortRangeHintDescriptor h
{ {
try { try {
return std::exp((std::log(min)*0.75f) + (std::log(max)*0.25f)); return std::exp((std::log(min)*0.75f) + (std::log(max)*0.25f));
} catch(...) {}
} CARLA_SAFE_EXCEPTION("exp(log)");
} }
return (min*0.75f) + (max*0.25f); return (min*0.75f) + (max*0.25f);


@@ -178,7 +178,7 @@ LADSPA_Data get_default_ladspa_port_value(const LADSPA_PortRangeHintDescriptor h
{ {
try { try {
return std::sqrt(min*max); return std::sqrt(min*max);
} catch(...) {}
} CARLA_SAFE_EXCEPTION("sqrt");
} }
return (min+max)/2; return (min+max)/2;


@@ -187,7 +187,7 @@ LADSPA_Data get_default_ladspa_port_value(const LADSPA_PortRangeHintDescriptor h
{ {
try { try {
return std::exp((std::log(min)*0.25f) + (std::log(max)*0.75f)); return std::exp((std::log(min)*0.25f) + (std::log(max)*0.75f));
} catch(...) {}
} CARLA_SAFE_EXCEPTION("exp(log)");
} }
return (min*0.25f) + (max*0.75f); return (min*0.25f) + (max*0.75f);
} }


+ 1
- 1
source/utils/CarlaOscUtils.hpp View File

@@ -25,7 +25,7 @@
#define try_lo_send(...) \ #define try_lo_send(...) \
try { \ try { \
lo_send(__VA_ARGS__); \ lo_send(__VA_ARGS__); \
} catch(...) {}
} CARLA_SAFE_EXCEPTION("lo_send");


// ----------------------------------------------------------------------- // -----------------------------------------------------------------------




+ 51
- 71
source/utils/LinkedList.hpp View File

@@ -57,9 +57,10 @@ protected:
k_list_head siblings; k_list_head siblings;
}; };


AbstractLinkedList() noexcept
AbstractLinkedList(const bool needsCopyCtr) noexcept
: fDataSize(sizeof(Data)), : fDataSize(sizeof(Data)),
fCount(0)
fCount(0),
fNeedsCopyCtr(needsCopyCtr)
{ {
_init(); _init();
} }
@@ -146,86 +147,22 @@ public:


bool append(const T& value) noexcept bool append(const T& value) noexcept
{ {
if (Data* const data = _allocate())
{
try {
new(data)Data();
}
catch(...) {
_deallocate(data);
return false;
}

data->value = value;
list_add_tail(&data->siblings, &fQueue);
++fCount;
return true;
}

return false;
return _add(value, true, &fQueue);
} }


bool appendAt(const T& value, const Itenerator& it) noexcept bool appendAt(const T& value, const Itenerator& it) noexcept
{ {
if (Data* const data = _allocate())
{
try {
new(data)Data();
}
catch(...) {
_deallocate(data);
return false;
}

data->value = value;
list_add_tail(&data->siblings, it.fEntry->next);
++fCount;
return true;
}

return false;
return _add(value, true, it.fEntry->next);
} }


bool insert(const T& value) noexcept bool insert(const T& value) noexcept
{ {
if (Data* const data = _allocate())
{
try {
new(data)Data();
}
catch(...) {
_deallocate(data);
return false;
}

data->value = value;
list_add(&data->siblings, &fQueue);
++fCount;
return true;
}

return false;
return _add(value, false, &fQueue);
} }


bool insertAt(const T& value, const Itenerator& it) noexcept bool insertAt(const T& value, const Itenerator& it) noexcept
{ {
if (Data* const data = _allocate())
{
try {
new(data)Data();
}
catch(...) {
_deallocate(data);
return false;
}

data->value = value;
list_add(&data->siblings, it.fEntry->prev);
++fCount;
return true;
}

return false;
return _add(value, false, it.fEntry->prev);
} }


T& getAt(const size_t index) const noexcept T& getAt(const size_t index) const noexcept
@@ -399,6 +336,8 @@ protected:
size_t fCount; size_t fCount;
k_list_head fQueue; k_list_head fQueue;


const bool fNeedsCopyCtr;

virtual Data* _allocate() noexcept = 0; virtual Data* _allocate() noexcept = 0;
virtual void _deallocate(Data* const dataPtr) noexcept = 0; virtual void _deallocate(Data* const dataPtr) noexcept = 0;


@@ -411,6 +350,46 @@ private:
INIT_LIST_HEAD(&fQueue); INIT_LIST_HEAD(&fQueue);
} }


bool _add(const T& value, const bool inTail, k_list_head* const queue) noexcept
{
if (Data* const data = _allocate())
{
if (fNeedsCopyCtr)
{
try {
new(data)Data();
}
catch(...) {
_deallocate(data);
return false;
}

try {
data->value = value;
}
catch(...) {
data->~Data();
_deallocate(data);
return false;
}
}
else
{
std::memcpy(&data->value, &value, fDataSize);
}

if (inTail)
list_add_tail(&data->siblings, queue);
else
list_add(&data->siblings, queue);

++fCount;
return true;
}

return false;
}

T& _getFirstOrLast(const bool first, const bool removeObj) noexcept T& _getFirstOrLast(const bool first, const bool removeObj) noexcept
{ {
if (fCount == 0) if (fCount == 0)
@@ -447,7 +426,8 @@ template<typename T>
class LinkedList : public AbstractLinkedList<T> class LinkedList : public AbstractLinkedList<T>
{ {
public: public:
LinkedList() noexcept {}
LinkedList(const bool needsCopyCtr = false) noexcept
: AbstractLinkedList<T>(needsCopyCtr) {}


private: private:
typename AbstractLinkedList<T>::Data* _allocate() noexcept override typename AbstractLinkedList<T>::Data* _allocate() noexcept override


+ 45
- 38
source/utils/RtLinkedList.hpp View File

@@ -98,51 +98,18 @@ public:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Now the actual rt-linkedlist code // Now the actual rt-linkedlist code


RtLinkedList(Pool& memPool) noexcept
: fMemPool(memPool) {}
RtLinkedList(Pool& memPool, const bool needsCopyCtr = false) noexcept
: AbstractLinkedList<T>(needsCopyCtr),
fMemPool(memPool) {}


bool append_sleepy(const T& value) noexcept bool append_sleepy(const T& value) noexcept
{ {
if (typename AbstractLinkedList<T>::Data* const data = _allocate_sleepy())
{
try {
new(data)typename AbstractLinkedList<T>::Data();
}
catch(...) {
_deallocate(data);
return false;
}

data->value = value;
list_add_tail(&data->siblings, &this->fQueue);
++(this->fCount);

return true;
}

return false;
return _add_sleepy(value, true);
} }


bool insert_sleepy(const T& value) noexcept bool insert_sleepy(const T& value) noexcept
{ {
if (typename AbstractLinkedList<T>::Data* const data = _allocate_sleepy())
{
try {
new(data)typename AbstractLinkedList<T>::Data();
}
catch(...) {
_deallocate(data);
return false;
}

data->value = value;
list_add(&data->siblings, &this->fQueue);
++(this->fCount);

return true;
}

return false;
return _add_sleepy(value, false);
} }


void resize(const size_t minPreallocated, const size_t maxPreallocated) noexcept void resize(const size_t minPreallocated, const size_t maxPreallocated) noexcept
@@ -186,6 +153,46 @@ private:
fMemPool.deallocate(dataPtr); fMemPool.deallocate(dataPtr);
} }


bool _add_sleepy(const T& value, const bool inTail) noexcept
{
if (typename AbstractLinkedList<T>::Data* const data = _allocate_sleepy())
{
if (this->fNeedsCopyCtr)
{
try {
new(data)typename AbstractLinkedList<T>::Data();
}
catch(...) {
_deallocate(data);
return false;
}

try {
data->value = value;
}
catch(...) {
data->~Data();
_deallocate(data);
return false;
}
}
else
{
std::memcpy(&data->value, &value, this->fDataSize);
}

if (inTail)
list_add_tail(&data->siblings, &this->fQueue);
else
list_add(&data->siblings, &this->fQueue);

++(this->fCount);
return true;
}

return false;
}

LINKED_LIST_DECLARATIONS(RtLinkedList) LINKED_LIST_DECLARATIONS(RtLinkedList)
}; };




Loading…
Cancel
Save