From dc1c601eac85544ad926b3a7281ece08e02fe2a8 Mon Sep 17 00:00:00 2001 From: Tomasz Sowa Date: Wed, 16 Jun 2021 22:23:30 +0200 Subject: [PATCH] in Model: added a test whether Model is a base class of ContainerItemType (list/vector) when doing MORM_MODEL_WORK_MODE_GET_MODEL_WRAPPER --- src/model.h | 46 ++++++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/src/model.h b/src/model.h index c24e070..910e423 100644 --- a/src/model.h +++ b/src/model.h @@ -433,14 +433,14 @@ protected: field_model(field_name, field_name, field_value, field_type); } - template - void field(const wchar_t * field_name, std::list & field_value, const FT & field_type = FT::default_type) + template + void field(const wchar_t * field_name, std::list & field_value, const FT & field_type = FT::default_type) { field_list(field_name, field_name, field_value, field_type); } - template - void field(const wchar_t * field_name, std::vector & field_value, const FT & field_type = FT::default_type) + template + void field(const wchar_t * field_name, std::vector & field_value, const FT & field_type = FT::default_type) { field_vector(field_name, field_name, field_value, field_type); } @@ -959,44 +959,50 @@ protected: } - template - void field_vector(const wchar_t * db_field_name, const wchar_t * flat_field_name, std::vector & field_value, const FT & field_type) + template + void field_vector(const wchar_t * db_field_name, const wchar_t * flat_field_name, std::vector & field_value, const FT & field_type) { - ModelClass * list_model_null_pointer = nullptr; + ContainerItemType * item_type_null_pointer = nullptr; if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GET_MODEL_WRAPPER ) { - if( (is_empty_field(model_env->db_field_name) || is_the_same_field(db_field_name, model_env->db_field_name)) && - (is_empty_field(model_env->flat_field_name) || is_the_same_field(flat_field_name, model_env->flat_field_name)) && - !model_env->model_wrapper ) + if constexpr (std::is_base_of()) { - model_env->model_wrapper = new ModelWrapperVector(&field_value); + if( (is_empty_field(model_env->db_field_name) || is_the_same_field(db_field_name, model_env->db_field_name)) && + (is_empty_field(model_env->flat_field_name) || is_the_same_field(flat_field_name, model_env->flat_field_name)) && + !model_env->model_wrapper ) + { + model_env->model_wrapper = new ModelWrapperVector(&field_value); + } } } else { - field_list_generic(db_field_name, flat_field_name, field_value, list_model_null_pointer, field_type); + field_list_generic(db_field_name, flat_field_name, field_value, item_type_null_pointer, field_type); } } - template - void field_list(const wchar_t * db_field_name, const wchar_t * flat_field_name, std::list & field_value, const FT & field_type) + template + void field_list(const wchar_t * db_field_name, const wchar_t * flat_field_name, std::list & field_value, const FT & field_type) { - ModelClass * list_model_null_pointer = nullptr; + ContainerItemType * item_type_null_pointer = nullptr; if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GET_MODEL_WRAPPER ) { - if( (is_empty_field(model_env->db_field_name) || is_the_same_field(db_field_name, model_env->db_field_name)) && - (is_empty_field(model_env->flat_field_name) || is_the_same_field(flat_field_name, model_env->flat_field_name)) && - !model_env->model_wrapper ) + if constexpr (std::is_base_of()) { - model_env->model_wrapper = new ModelWrapperList(&field_value); + if( (is_empty_field(model_env->db_field_name) || is_the_same_field(db_field_name, model_env->db_field_name)) && + (is_empty_field(model_env->flat_field_name) || is_the_same_field(flat_field_name, model_env->flat_field_name)) && + !model_env->model_wrapper ) + { + model_env->model_wrapper = new ModelWrapperList(&field_value); + } } } else { - field_list_generic(db_field_name, flat_field_name, field_value, list_model_null_pointer, field_type); + field_list_generic(db_field_name, flat_field_name, field_value, item_type_null_pointer, field_type); } }