Revert "Implement C++ methods for DNA structures"
This reverts commit 8c44793228
.
Apparently, this generated a lot of warnings in GCC.
Didn't find a quick solution and is it not something I want to be
trading between (more quiet Clang in an expense of less quiet GCC).
Will re-iterate on the patch are re-commit it.
This commit is contained in:
parent
8c44793228
commit
484af996aa
|
@ -910,8 +910,7 @@ static void curve_to_mesh_eval_ensure(Object &object)
|
|||
*
|
||||
* So we create temporary copy of the object which will use same data as the original bevel, but
|
||||
* will have no modifiers. */
|
||||
Object bevel_object;
|
||||
memset(&bevel_object, 0, sizeof(bevel_object));
|
||||
Object bevel_object = {{nullptr}};
|
||||
if (curve.bevobj != nullptr) {
|
||||
memcpy(&bevel_object, curve.bevobj, sizeof(bevel_object));
|
||||
BLI_listbase_clear(&bevel_object.modifiers);
|
||||
|
@ -920,8 +919,7 @@ static void curve_to_mesh_eval_ensure(Object &object)
|
|||
}
|
||||
|
||||
/* Same thing for taper. */
|
||||
Object taper_object;
|
||||
memset(&taper_object, 0, sizeof(taper_object));
|
||||
Object taper_object = {{nullptr}};
|
||||
if (curve.taperobj != nullptr) {
|
||||
memcpy(&taper_object, curve.taperobj, sizeof(taper_object));
|
||||
BLI_listbase_clear(&taper_object.modifiers);
|
||||
|
|
|
@ -3946,7 +3946,7 @@ bool BKE_object_minmax_dupli(Depsgraph *depsgraph,
|
|||
/* pass */
|
||||
}
|
||||
else {
|
||||
Object temp_ob = blender::dna::shallow_copy(*dob->ob);
|
||||
Object temp_ob = *dob->ob;
|
||||
/* Do not modify the original boundbox. */
|
||||
temp_ob.runtime.bb = nullptr;
|
||||
BKE_object_replace_data_on_shallow_copy(&temp_ob, dob->ob_data);
|
||||
|
|
|
@ -167,7 +167,7 @@ bool deg_iterator_duplis_step(DEGObjectIterData *data)
|
|||
/* Temporary object to evaluate. */
|
||||
Object *dupli_parent = data->dupli_parent;
|
||||
Object *temp_dupli_object = &data->temp_dupli_object;
|
||||
*temp_dupli_object = blender::dna::shallow_copy(*dob->ob);
|
||||
*temp_dupli_object = *dob->ob;
|
||||
temp_dupli_object->base_flag = dupli_parent->base_flag | BASE_FROM_DUPLI;
|
||||
temp_dupli_object->base_local_view_bits = dupli_parent->base_local_view_bits;
|
||||
temp_dupli_object->runtime.local_collections_bits =
|
||||
|
|
|
@ -1695,13 +1695,13 @@ static void object_apply_rotation(Object *ob, const float rmat[3][3])
|
|||
static void object_apply_location(Object *ob, const float loc[3])
|
||||
{
|
||||
/* quick but weak */
|
||||
Object ob_prev = blender::dna::shallow_copy(*ob);
|
||||
Object ob_prev = *ob;
|
||||
float mat[4][4];
|
||||
copy_m4_m4(mat, ob->obmat);
|
||||
copy_v3_v3(mat[3], loc);
|
||||
BKE_object_apply_mat4(ob, mat, true, true);
|
||||
copy_v3_v3(mat[3], ob->loc);
|
||||
*ob = blender::dna::shallow_copy(ob_prev);
|
||||
*ob = ob_prev;
|
||||
copy_v3_v3(ob->loc, mat[3]);
|
||||
}
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ OBJMesh::OBJMesh(Depsgraph *depsgraph, const OBJExportParams &export_params, Obj
|
|||
{
|
||||
/* We need to copy the object because it may be in temporary space. */
|
||||
Object *obj_eval = DEG_get_evaluated_object(depsgraph, mesh_object);
|
||||
export_object_eval_ = dna::shallow_copy(*obj_eval);
|
||||
export_object_eval_ = *obj_eval;
|
||||
export_mesh_eval_ = export_params.apply_modifiers ?
|
||||
BKE_object_get_evaluated_mesh(&export_object_eval_) :
|
||||
BKE_object_get_pre_modified_mesh(&export_object_eval_);
|
||||
|
|
|
@ -46,84 +46,3 @@
|
|||
|
||||
/* non-id name variables should use this length */
|
||||
#define MAX_NAME 64
|
||||
|
||||
/* #DNA_DEFINE_CXX_METHODS is used to define C++ methods which are needed for proper/safe resource
|
||||
* management, making unsafe (from an ownership perspective: i.e. pointers which sometimes needs to
|
||||
* be set to nullptr on copy, sometimes needs to be dupalloc-ed) operations explicit, and taking
|
||||
* care of compiler specific warnings when dealing with members marked with DNA_DEPRECATED.
|
||||
*
|
||||
* The `class_name` argument is to match the structure name the macro is used from.
|
||||
*
|
||||
* Typical usage example:
|
||||
*
|
||||
* typedef struct Object {
|
||||
* DNA_DEFINE_CXX_METHODS(Object)
|
||||
* } Object;
|
||||
*/
|
||||
#ifndef __cplusplus
|
||||
# define DNA_DEFINE_CXX_METHODS(class_name)
|
||||
#else
|
||||
|
||||
/* Forward-declared here since there is no simple header file to be pulled for this functionality.
|
||||
* Avoids pulling `string.h` from this header to get access to #memcpy. */
|
||||
extern "C" void _DNA_internal_memcpy(void *dst, const void *src, size_t size);
|
||||
|
||||
namespace blender::dna::internal {
|
||||
|
||||
template<class T> class ShallowDataConstRef {
|
||||
public:
|
||||
constexpr explicit ShallowDataConstRef(const T &ref) : ref_(ref)
|
||||
{
|
||||
}
|
||||
|
||||
inline const T *get_pointer() const
|
||||
{
|
||||
return &ref_;
|
||||
}
|
||||
|
||||
private:
|
||||
const T &ref_;
|
||||
};
|
||||
|
||||
} // namespace blender::dna::internal
|
||||
|
||||
# define DNA_DEFINE_CXX_METHODS(class_name) \
|
||||
class_name() = default; \
|
||||
~class_name() = default; \
|
||||
/* Delete copy and assignment, which are not safe for resource ownership. */ \
|
||||
class_name(const class_name &other) = delete; \
|
||||
class_name(class_name &&other) noexcept = delete; \
|
||||
class_name &operator=(const class_name &other) = delete; \
|
||||
class_name &operator=(class_name &&other) = delete; \
|
||||
/* Support for shallow copy. */ \
|
||||
class_name(const blender::dna::internal::ShallowDataConstRef<class_name> ref) \
|
||||
{ \
|
||||
_DNA_internal_memcpy(this, ref.get_pointer(), sizeof(class_name)); \
|
||||
} \
|
||||
class_name &operator=(const blender::dna::internal::ShallowDataConstRef<class_name> ref) \
|
||||
{ \
|
||||
if (this != ref.get_pointer()) { \
|
||||
_DNA_internal_memcpy(this, ref.get_pointer(), sizeof(class_name)); \
|
||||
} \
|
||||
return *this; \
|
||||
}
|
||||
|
||||
namespace blender::dna {
|
||||
|
||||
/* Creates shallow copy of the given object.
|
||||
* The entire object is copied as-is using memory copy.
|
||||
*
|
||||
* Typical usage:
|
||||
* Object temp_object = blender::dna::shallow_copy(*input_object);
|
||||
*
|
||||
* From the implementation detail go via copy constructor/assign operator defined in the structure.
|
||||
*/
|
||||
template<class T>
|
||||
[[nodiscard]] inline internal::ShallowDataConstRef<T> shallow_copy(const T &other)
|
||||
{
|
||||
return internal::ShallowDataConstRef(other);
|
||||
}
|
||||
|
||||
} // namespace blender::dna
|
||||
|
||||
#endif
|
||||
|
|
|
@ -233,8 +233,6 @@ enum eObjectLineArt_Flags {
|
|||
};
|
||||
|
||||
typedef struct Object {
|
||||
DNA_DEFINE_CXX_METHODS(Object)
|
||||
|
||||
ID id;
|
||||
/** Animation data (must be immediately after id for utilities to use it). */
|
||||
struct AnimData *adt;
|
||||
|
|
|
@ -308,15 +308,3 @@ const char *DNA_struct_rename_legacy_hack_alias_from_static(const char *name)
|
|||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/** \name Internal helpers for C++
|
||||
* \{ */
|
||||
|
||||
void _DNA_internal_memcpy(void *dst, const void *src, size_t size);
|
||||
void _DNA_internal_memcpy(void *dst, const void *src, const size_t size)
|
||||
{
|
||||
memcpy(dst, src, size);
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
|
|
@ -620,7 +620,6 @@ static int preprocess_include(char *maindata, const int maindata_len)
|
|||
int newlen = 0;
|
||||
comment = 0;
|
||||
a = maindata_len;
|
||||
bool skip_until_closing_brace = false;
|
||||
while (a--) {
|
||||
|
||||
if (cp[0] == '/' && cp[1] == '*') {
|
||||
|
@ -647,17 +646,6 @@ static int preprocess_include(char *maindata, const int maindata_len)
|
|||
a -= 13;
|
||||
cp += 13;
|
||||
}
|
||||
else if (match_identifier(cp, "DNA_DEFINE_CXX_METHODS")) {
|
||||
/* single values are skipped already, so decrement 1 less */
|
||||
a -= 21;
|
||||
cp += 21;
|
||||
skip_until_closing_brace = true;
|
||||
}
|
||||
else if (skip_until_closing_brace) {
|
||||
if (cp[0] == ')') {
|
||||
skip_until_closing_brace = false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
md[0] = cp[0];
|
||||
md++;
|
||||
|
|
Loading…
Reference in New Issue