Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Common baseclass for schemes #963

Draft
wants to merge 20 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion src/t8_element_cxx.hxx
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ struct t8_eclass_scheme
{
protected:
size_t element_size; /**< The size in bytes of an element of class \a eclass */
void *ts_context; /**< Anonymous implementation context. */

public:
t8_eclass_t eclass;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,34 +26,6 @@
/* We want to export the whole implementation to be callable from "C" */
T8_EXTERN_C_BEGIN ();

/** This class independent function assumes an sc_mempool_t as context.
* It is suitable as the elem_new callback in \ref t8_eclass_scheme_t.
* We assume that the mempool has been created with the correct element size.
* \param [in,out] ts_context An element is allocated in this sc_mempool_t.
* \param [in] length Non-negative number of elements to allocate.
* \param [in,out] elem Array of correct size whose members are filled.
*/
static void
t8_default_mempool_alloc (sc_mempool_t *ts_context, int length, t8_element_t **elem);

/** This class independent function assumes an sc_mempool_t as context.
* It is suitable as the elem_destroy callback in \ref t8_eclass_scheme_t.
* We assume that the mempool has been created with the correct element size.
* \param [in,out] ts_context An element is returned to this sc_mempool_t.
* \param [in] length Non-negative number of elements to destroy.
* \param [in,out] elem Array whose members are returned to the mempool.
*/
static void
t8_default_mempool_free (sc_mempool_t *ts_context, int length, t8_element_t **elem);

/* Destructor */
t8_default_scheme_common_c::~t8_default_scheme_common_c ()
{
T8_ASSERT (ts_context != NULL);
SC_ASSERT (((sc_mempool_t *) ts_context)->elem_count == 0);
sc_mempool_destroy ((sc_mempool_t *) ts_context);
}

/** Compute the number of corners of a given element. */
int
t8_default_scheme_common_c::t8_element_num_corners (const t8_element_t *elem) const
Expand All @@ -63,46 +35,6 @@ t8_default_scheme_common_c::t8_element_num_corners (const t8_element_t *elem) co
return t8_eclass_num_vertices[eclass];
}

void
t8_default_scheme_common_c::t8_element_new (int length, t8_element_t **elem) const
{
t8_default_mempool_alloc ((sc_mempool_t *) this->ts_context, length, elem);
}

void
t8_default_scheme_common_c::t8_element_destroy (int length, t8_element_t **elem) const
{
t8_default_mempool_free ((sc_mempool_t *) this->ts_context, length, elem);
}

static void
t8_default_mempool_alloc (sc_mempool_t *ts_context, int length, t8_element_t **elem)
{
int i;

T8_ASSERT (ts_context != NULL);
T8_ASSERT (0 <= length);
T8_ASSERT (elem != NULL);

for (i = 0; i < length; ++i) {
elem[i] = (t8_element_t *) sc_mempool_alloc (ts_context);
}
}

static void
t8_default_mempool_free (sc_mempool_t *ts_context, int length, t8_element_t **elem)
{
int i;

T8_ASSERT (ts_context != NULL);
T8_ASSERT (0 <= length);
T8_ASSERT (elem != NULL);

for (i = 0; i < length; ++i) {
sc_mempool_free (ts_context, elem[i]);
}
}

t8_element_shape_t
t8_default_scheme_common_c::t8_element_shape (const t8_element_t *elem) const
{
Expand Down Expand Up @@ -153,19 +85,4 @@ t8_default_scheme_common_c::t8_element_count_leaves_from_root (int level) const
return count_leaves_from_level (0, level, dim);
}

#if T8_ENABLE_DEBUG
void
t8_default_scheme_common_c::t8_element_debug_print (const t8_element_t *elem) const
{
char debug_string[BUFSIZ];
t8_element_to_string (elem, debug_string, BUFSIZ);
t8_debugf ("%s\n", debug_string);
}
#endif

void
t8_default_scheme_common_c::t8_element_deinit (int length, t8_element_t *elem) const
{
}

T8_EXTERN_C_END ();
Original file line number Diff line number Diff line change
Expand Up @@ -28,31 +28,26 @@
#define T8_DEFAULT_COMMON_CXX_HXX

#include <t8_element_cxx.hxx>
#include <t8_schemes/t8_scheme_common_cxx.hxx>

/* Macro to check whether a pointer (VAR) to a base class, comes from an
* implementation of a child class (TYPE). */
#define T8_COMMON_IS_TYPE(VAR, TYPE) ((dynamic_cast<TYPE> (VAR)) != NULL)

class t8_default_scheme_common_c: public t8_eclass_scheme_c {
class t8_default_scheme_common_c: public t8_scheme_common_c {
public:
/** Destructor for all default schemes */
virtual ~t8_default_scheme_common_c ();
/* Call parent constructor */
t8_default_scheme_common_c (t8_eclass_t eclass, int elem_size): t8_scheme_common_c (eclass, elem_size) {};
lukasdreyer marked this conversation as resolved.
Show resolved Hide resolved

virtual void
t8_element_deinit (int length, t8_element_t *elem) const override;
/* provide empty virtual destructor*/
virtual ~t8_default_scheme_common_c ()
{
}

/** Compute the number of corners of a given element. */
virtual int
t8_element_num_corners (const t8_element_t *elem) const;

/** Allocate space for a bunch of elements. */
virtual void
t8_element_new (int length, t8_element_t **elem) const;

/** Deallocate space for a bunch of elements. */
virtual void
t8_element_destroy (int length, t8_element_t **elem) const;

/** Return the shape of an element */
virtual t8_element_shape_t
t8_element_shape (const t8_element_t *elem) const;
Expand Down Expand Up @@ -127,10 +122,6 @@ class t8_default_scheme_common_c: public t8_eclass_scheme_c {
virtual void
t8_element_anchor (const t8_element_t *elem, int anchor[3]) const
= 0;
#if T8_ENABLE_DEBUG
virtual void
t8_element_debug_print (const t8_element_t *elem) const;
#endif
};

#endif /* !T8_DEFAULT_COMMON_CXX_HXX */
Original file line number Diff line number Diff line change
Expand Up @@ -635,11 +635,8 @@ t8_default_scheme_hex_c::t8_element_to_string (const t8_element_t *elem, char *d
#endif

/* Constructor */
t8_default_scheme_hex_c::t8_default_scheme_hex_c (void)
t8_default_scheme_hex_c::t8_default_scheme_hex_c (void): t8_default_scheme_common_c (T8_ECLASS_HEX, sizeof (t8_phex_t))
{
eclass = T8_ECLASS_HEX;
element_size = sizeof (t8_phex_t);
ts_context = sc_mempool_new (element_size);
}

t8_default_scheme_hex_c::~t8_default_scheme_hex_c ()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -439,10 +439,8 @@ t8_default_scheme_line_c::t8_element_init (int length, t8_element_t *elem) const

/* Constructor */
t8_default_scheme_line_c::t8_default_scheme_line_c (void)
: t8_default_scheme_common_c (T8_ECLASS_LINE, sizeof (t8_default_line_t))
{
eclass = T8_ECLASS_LINE;
element_size = sizeof (t8_default_line_t);
ts_context = sc_mempool_new (element_size);
}

t8_default_scheme_line_c::~t8_default_scheme_line_c ()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -448,10 +448,8 @@ t8_default_scheme_prism_c::t8_element_to_string (const t8_element_t *elem, char

/* Constructor */
t8_default_scheme_prism_c::t8_default_scheme_prism_c (void)
: t8_default_scheme_common_c (T8_ECLASS_PRISM, sizeof (t8_default_prism_t))
{
eclass = T8_ECLASS_PRISM;
element_size = sizeof (t8_default_prism_t);
ts_context = sc_mempool_new (element_size);
}

t8_default_scheme_prism_c::~t8_default_scheme_prism_c ()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -416,10 +416,8 @@ t8_default_scheme_pyramid_c::t8_element_to_string (const t8_element_t *elem, cha

/* Constructor */
t8_default_scheme_pyramid_c::t8_default_scheme_pyramid_c (void)
: t8_default_scheme_common_c (T8_ECLASS_PYRAMID, sizeof (t8_default_pyramid_t))
{
eclass = T8_ECLASS_PYRAMID;
element_size = sizeof (t8_default_pyramid_t);
ts_context = sc_mempool_new (element_size);
}

t8_default_scheme_pyramid_c::~t8_default_scheme_pyramid_c ()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -766,10 +766,8 @@ t8_default_scheme_quad_c::t8_element_to_string (const t8_element_t *elem, char *

/* Constructor */
t8_default_scheme_quad_c::t8_default_scheme_quad_c (void)
: t8_default_scheme_common_c (T8_ECLASS_QUAD, sizeof (t8_pquad_t))
{
eclass = T8_ECLASS_QUAD;
element_size = sizeof (t8_pquad_t);
ts_context = sc_mempool_new (element_size);
}

t8_default_scheme_quad_c::~t8_default_scheme_quad_c ()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -532,11 +532,8 @@ t8_default_scheme_tet_c::t8_element_init (int length, t8_element_t *elem) const
}

/* Constructor */
t8_default_scheme_tet_c::t8_default_scheme_tet_c (void)
t8_default_scheme_tet_c::t8_default_scheme_tet_c (void): t8_default_scheme_common_c (T8_ECLASS_TET, sizeof (t8_dtet_t))
{
eclass = T8_ECLASS_TET;
element_size = sizeof (t8_dtet_t);
ts_context = sc_mempool_new (element_size);
}

/* Destructor */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -545,10 +545,8 @@ t8_default_scheme_tri_c::t8_element_init (int length, t8_element_t *elem) const

/* Constructor */
t8_default_scheme_tri_c::t8_default_scheme_tri_c (void)
: t8_default_scheme_common_c (T8_ECLASS_TRIANGLE, sizeof (t8_dtri_t))
{
eclass = T8_ECLASS_TRIANGLE;
element_size = sizeof (t8_dtri_t);
ts_context = sc_mempool_new (element_size);
}

/* Destructor */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -329,10 +329,8 @@ t8_default_scheme_vertex_c::t8_element_init (int length, t8_element_t *elem) con

/* Constructor */
t8_default_scheme_vertex_c::t8_default_scheme_vertex_c (void)
: t8_default_scheme_common_c (T8_ECLASS_VERTEX, sizeof (t8_dvertex_t))
{
eclass = T8_ECLASS_VERTEX;
element_size = sizeof (t8_dvertex_t);
ts_context = sc_mempool_new (element_size);
}

/* Destructor */
Expand Down
Loading