Skip to content

Commit

Permalink
Updated IStateDumper interface, fixed several issues related to the 3…
Browse files Browse the repository at this point in the history
…D Allocator class
  • Loading branch information
sadko4u committed Jan 14, 2025
1 parent e5a264c commit ca53e91
Show file tree
Hide file tree
Showing 4 changed files with 199 additions and 155 deletions.
213 changes: 111 additions & 102 deletions include/lsp-plug.in/dsp-units/iface/IStateDumper.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,15 @@ namespace lsp
*/
class LSP_DSP_UNITS_PUBLIC IStateDumper
{
private:
IStateDumper &operator = (const IStateDumper &);
IStateDumper(const IStateDumper &);

public:
explicit IStateDumper();
IStateDumper(const IStateDumper &) = delete;
IStateDumper(IStateDumper &&) = delete;
virtual ~IStateDumper();

IStateDumper &operator = (const IStateDumper &) = delete;
IStateDumper &operator = (IStateDumper &&) = delete;

public:
virtual void begin_object(const char *name, const void *ptr, size_t szof);
virtual void begin_object(const void *ptr, size_t szof);
Expand All @@ -55,159 +56,167 @@ namespace lsp
virtual void write(const void *value);
virtual void write(const char *value);
virtual void write(bool value);
virtual void write(uint8_t value);
virtual void write(int8_t value);
virtual void write(uint16_t value);
virtual void write(int16_t value);
virtual void write(uint32_t value);
virtual void write(int32_t value);
virtual void write(uint64_t value);
virtual void write(int64_t value);
virtual void write(unsigned char value);
virtual void write(signed char value);
virtual void write(unsigned short value);
virtual void write(signed short value);
virtual void write(unsigned int value);
virtual void write(signed int value);
virtual void write(unsigned long value);
virtual void write(signed long value);
virtual void write(unsigned long long value);
virtual void write(signed long long value);
virtual void write(float value);
virtual void write(double value);

virtual void write(const char *name, const void *value);
virtual void write(const char *name, const char *value);
virtual void write(const char *name, bool value);
virtual void write(const char *name, uint8_t value);
virtual void write(const char *name, int8_t value);
virtual void write(const char *name, uint16_t value);
virtual void write(const char *name, int16_t value);
virtual void write(const char *name, uint32_t value);
virtual void write(const char *name, int32_t value);
virtual void write(const char *name, uint64_t value);
virtual void write(const char *name, int64_t value);
virtual void write(const char *name, unsigned char value);
virtual void write(const char *name, signed char value);
virtual void write(const char *name, unsigned short value);
virtual void write(const char *name, signed short value);
virtual void write(const char *name, unsigned int value);
virtual void write(const char *name, signed int value);
virtual void write(const char *name, unsigned long value);
virtual void write(const char *name, signed long value);
virtual void write(const char *name, unsigned long long value);
virtual void write(const char *name, signed long long value);
virtual void write(const char *name, float value);
virtual void write(const char *name, double value);

virtual void writev(const void * const *value, size_t count);
virtual void writev(const bool *value, size_t count);
virtual void writev(const uint8_t *value, size_t count);
virtual void writev(const int8_t *value, size_t count);
virtual void writev(const uint16_t *value, size_t count);
virtual void writev(const int16_t *value, size_t count);
virtual void writev(const uint32_t *value, size_t count);
virtual void writev(const int32_t *value, size_t count);
virtual void writev(const uint64_t *value, size_t count);
virtual void writev(const int64_t *value, size_t count);
virtual void writev(const unsigned char *value, size_t count);
virtual void writev(const signed char *value, size_t count);
virtual void writev(const unsigned short *value, size_t count);
virtual void writev(const signed short *value, size_t count);
virtual void writev(const unsigned int *value, size_t count);
virtual void writev(const signed int *value, size_t count);
virtual void writev(const unsigned long *value, size_t count);
virtual void writev(const signed long *value, size_t count);
virtual void writev(const unsigned long long *value, size_t count);
virtual void writev(const signed long long *value, size_t count);
virtual void writev(const float *value, size_t count);
virtual void writev(const double *value, size_t count);

virtual void writev(const char *name, const void * const *value, size_t count);
virtual void writev(const char *name, const bool *value, size_t count);
virtual void writev(const char *name, const uint8_t *value, size_t count);
virtual void writev(const char *name, const int8_t *value, size_t count);
virtual void writev(const char *name, const uint16_t *value, size_t count);
virtual void writev(const char *name, const int16_t *value, size_t count);
virtual void writev(const char *name, const uint32_t *value, size_t count);
virtual void writev(const char *name, const int32_t *value, size_t count);
virtual void writev(const char *name, const uint64_t *value, size_t count);
virtual void writev(const char *name, const int64_t *value, size_t count);
virtual void writev(const char *name, const unsigned char *value, size_t count);
virtual void writev(const char *name, const signed char *value, size_t count);
virtual void writev(const char *name, const unsigned short *value, size_t count);
virtual void writev(const char *name, const signed short *value, size_t count);
virtual void writev(const char *name, const unsigned int *value, size_t count);
virtual void writev(const char *name, const signed int *value, size_t count);
virtual void writev(const char *name, const unsigned long *value, size_t count);
virtual void writev(const char *name, const signed long *value, size_t count);
virtual void writev(const char *name, const unsigned long long *value, size_t count);
virtual void writev(const char *name, const signed long long *value, size_t count);
virtual void writev(const char *name, const float *value, size_t count);
virtual void writev(const char *name, const double *value, size_t count);

public:
template <class T>
inline void writev(const T * const * value, size_t count)
{
writev(reinterpret_cast<const void * const *>(value), count);
}
inline void writev(const T * const * value, size_t count)
{
writev(reinterpret_cast<const void * const *>(value), count);
}

template <class T>
inline void writev(const char *name, const T * const * value, size_t count)
{
writev(name, reinterpret_cast<const void * const *>(value), count);
}
inline void writev(const char *name, const T * const * value, size_t count)
{
writev(name, reinterpret_cast<const void * const *>(value), count);
}

template <class T>
inline void write_object(const T *value)
inline void write_object(const T *value)
{
if (value != NULL)
{
if (value != NULL)
{
begin_object(value, sizeof(T));
value->dump(this);
end_object();
}
else
write(value);
begin_object(value, sizeof(T));
value->dump(this);
end_object();
}
else
write(value);
}

template <class T>
inline void write_object(const char *name, const T *value)
inline void write_object(const char *name, const T *value)
{
if (value != NULL)
{
if (value != NULL)
{
begin_object(name, value, sizeof(T));
value->dump(this);
end_object();
}
else
write(name, value);
begin_object(name, value, sizeof(T));
value->dump(this);
end_object();
}
else
write(name, value);
}

template <class T>
inline void write_object_array(const T *value, size_t count)
inline void write_object_array(const T *value, size_t count)
{
if (value != NULL)
{
if (value != NULL)
begin_array(value, count);
{
begin_array(value, count);
{
for (size_t i=0; i<count; ++i)
write_object(&value[i]);
}
end_array();
for (size_t i=0; i<count; ++i)
write_object(&value[i]);
}
else
write(value);
end_array();
}
else
write(value);
}

template <class T>
inline void write_object_array(const char *name, const T *value, size_t count)
inline void write_object_array(const char *name, const T *value, size_t count)
{
if (value != NULL)
{
if (value != NULL)
begin_array(name, value, count);
{
begin_array(name, value, count);
{
for (size_t i=0; i<count; ++i)
write_object(&value[i]);
}
end_array();
for (size_t i=0; i<count; ++i)
write_object(&value[i]);
}
else
write(name, value);
end_array();
}
else
write(name, value);
}

template <class T>
inline void write_object_array(const T * const *value, size_t count)
inline void write_object_array(const T * const *value, size_t count)
{
if (value != NULL)
{
if (value != NULL)
begin_array(value, count);
{
begin_array(value, count);
{
for (size_t i=0; i<count; ++i)
write_object(value[i]);
}
end_array();
for (size_t i=0; i<count; ++i)
write_object(value[i]);
}
else
write(value);
end_array();
}
else
write(value);
}

template <class T>
inline void write_object_array(const char *name, const T * const *value, size_t count)
inline void write_object_array(const char *name, const T * const *value, size_t count)
{
if (value != NULL)
{
if (value != NULL)
begin_array(name, value, count);
{
begin_array(name, value, count);
{
for (size_t i=0; i<count; ++i)
write_object(value[i]);
}
end_array();
for (size_t i=0; i<count; ++i)
write_object(value[i]);
}
else
write(name, value);
end_array();
}
else
write(name, value);
}
};

} /* namespace dspu */
Expand Down
36 changes: 19 additions & 17 deletions include/private/3d/scene/obj.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2021 Linux Studio Plugins Project <https://lsp-plug.in/>
* (C) 2021 Vladimir Sadovnikov <sadko4u@gmail.com>
* Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
* (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
*
* This file is part of lsp-dsp-units
* Created on: 10 авг. 2021 г.
Expand Down Expand Up @@ -38,10 +38,6 @@ namespace lsp
*/
class ObjSceneHandler: public obj::IObjHandler
{
private:
ObjSceneHandler(const ObjSceneHandler &);
ObjSceneHandler & operator = (const ObjSceneHandler &);

protected:
typedef struct vertex_t
{
Expand All @@ -63,11 +59,16 @@ namespace lsp
pObject = NULL;
nFaceID = 0;
}
ObjSceneHandler(const ObjSceneHandler &) = delete;
ObjSceneHandler(ObjSceneHandler &&) = delete;

virtual ~ObjSceneHandler()
{
}

ObjSceneHandler & operator = (const ObjSceneHandler &) = delete;
ObjSceneHandler & operator = (ObjSceneHandler &&) = delete;

public:
virtual status_t begin_object(const char *name)
{
Expand Down Expand Up @@ -128,23 +129,23 @@ namespace lsp
return pScene->add_normal(&n);
}

virtual status_t add_face(const obj::index_t *vv, const obj::index_t *vn, const obj::index_t *vt, size_t n)
virtual ssize_t add_face(const obj::index_t *vv, const obj::index_t *vn, const obj::index_t *vt, size_t n)
{
if ((pObject == NULL) || (n < 3))
return STATUS_BAD_STATE;
return -STATUS_BAD_STATE;

lltl::darray<vertex_t> vertex;
vertex_t *vx = vertex.append_n(n);
if (vx == NULL)
return STATUS_NO_MEM;
return -STATUS_NO_MEM;

// Prepare structure
for (size_t i=0; i<n; ++i)
{
vx[i].ip = vv[i];
vx[i].p = (vx[i].ip >= 0) ? pScene->vertex(vx[i].ip) : NULL;
if (vx[i].p == NULL)
return STATUS_BAD_STATE;
return -STATUS_BAD_STATE;
vx[i].in = vn[i];
vx[i].n = (vx[i].in >= 0) ? pScene->normal(vx[i].in) : NULL;
}
Expand Down Expand Up @@ -197,7 +198,7 @@ namespace lsp

// Need to eliminate point that lies on the line
if (!vertex.remove((index + remove) % n))
return STATUS_BAD_STATE;
return -STATUS_BAD_STATE;

// Rollback index and decrement counter
n--;
Expand Down Expand Up @@ -237,11 +238,11 @@ namespace lsp
// );
status_t result = pObject->add_triangle(face_id, v1->ip, v2->ip, v3->ip, v1->in, v2->in, v3->in);
if (result != STATUS_OK)
return result;
return -result;

// Remove the middle point
if (!vertex.remove((index + 1) % n))
return STATUS_BAD_STATE;
return -STATUS_BAD_STATE;

if (index >= (--n))
index = 0;
Expand All @@ -265,10 +266,10 @@ namespace lsp
pObject->add_triangle(face_id, v1->ip, v3->ip, v2->ip, v1->in, v3->in, v2->in) :
pObject->add_triangle(face_id, v1->ip, v2->ip, v3->ip, v1->in, v2->in, v3->in);
if (result != STATUS_OK)
return result;
return -result;
}

return STATUS_OK;
return face_id;
}
};

Expand All @@ -285,7 +286,8 @@ namespace lsp
ObjSceneHandler handler(scene);
return pp.parse_data(&handler, is, WRAP_NONE);
}
}
}

} /* namespace dspu */
} /* namespace lsp */

#endif /* PRIVATE_3D_SCENE_OBJ_H_ */
Loading

0 comments on commit ca53e91

Please sign in to comment.