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()
: dataPool(MIN_RT_EVENTS, MAX_RT_EVENTS),
data(dataPool),
dataPendingRT(dataPool) {}
data(dataPool, true),
dataPendingRT(dataPool, true) {}

~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(label != nullptr && label[0] != '\0', nullptr);
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)

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];

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 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];

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 newScalePoint(&newPort->ScalePoints[j]);
@@ -124,7 +124,7 @@ bool is_ladspa_rdf_descriptor_valid(const LADSPA_RDF_Descriptor* const rdfDescri
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]))
{
@@ -169,7 +169,7 @@ LADSPA_Data get_default_ladspa_port_value(const LADSPA_PortRangeHintDescriptor h
{
try {
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);

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

@@ -187,7 +187,7 @@ LADSPA_Data get_default_ladspa_port_value(const LADSPA_PortRangeHintDescriptor h
{
try {
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);
}


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

@@ -25,7 +25,7 @@
#define try_lo_send(...) \
try { \
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;
};

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

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
{
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
{
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
{
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
@@ -399,6 +336,8 @@ protected:
size_t fCount;
k_list_head fQueue;

const bool fNeedsCopyCtr;

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

@@ -411,6 +350,46 @@ private:
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
{
if (fCount == 0)
@@ -447,7 +426,8 @@ template<typename T>
class LinkedList : public AbstractLinkedList<T>
{
public:
LinkedList() noexcept {}
LinkedList(const bool needsCopyCtr = false) noexcept
: AbstractLinkedList<T>(needsCopyCtr) {}

private:
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

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
{
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
{
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
@@ -186,6 +153,46 @@ private:
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)
};



Loading…
Cancel
Save