Optimize PropertyMap and PropertyValue 18/317318/2
authorJiyun Yang <ji.yang@samsung.com>
Thu, 19 Dec 2024 13:01:01 +0000 (22:01 +0900)
committerJiyun Yang <ji.yang@samsung.com>
Mon, 30 Dec 2024 10:13:05 +0000 (19:13 +0900)
Add methods to help optimizing property value and property map

1. CSharp_Dali_Property_Map_Add_XXX
Adds a value to a PropertyMap without generating PropertyValue in c# managed heap.

2. CSharp_Dali_XXX_set_all
Enables to set all fields at once for Dali primitives such as Vector4.
This is to recycle native dali object.

3. CSharp_Dali_Actor_InternalSetPropertyXXX
Sets a PropertyValue to the actor without generating PropertyValue in c# managed heap.

Change-Id: I15bbcf572a140cbc9614d60af3c1e6bb2b4b5027
Signed-off-by: Jiyun Yang <ji.yang@samsung.com>
dali-csharp-binder/common/dali-wrap.cpp
dali-csharp-binder/dali-core/extents-wrap.cpp
dali-csharp-binder/dali-core/internal-property-get-set-wrap.cpp
dali-csharp-binder/dali-core/vector-wrap.cpp

index 88ac76590f6d26580736d305c52fe9265cbbf68d..c4d1a738ca180e7e33e2b2864cbde640742b9975 100644 (file)
@@ -5873,6 +5873,148 @@ SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_Property_Map_Add__SWIG_2(void * jarg1,
   return jresult;
 }
 
+// Macro generating add/set method of PropertyMap
+#ifndef GENERATE_PROPERTYMAP_ADD
+#define GENERATE_PROPERTYMAP_ADD(Name, PassedArgs, PassingArgs) \
+  SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_Property_Map_Add_Str_##Name(void* jarg1, char* jarg2 PassedArgs) \
+  { \
+    Dali::Property::Map *arg1 = (Dali::Property::Map*)jarg1; \
+    try \
+    { \
+        arg1->Add((char const*)jarg2, Dali::Property::Value(PassingArgs)); \
+    } \
+    CALL_CATCH_EXCEPTION(0); \
+    return jarg1; \
+  } \
+  SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_Property_Map_Add_Int_##Name(void* jarg1, int jarg2 PassedArgs) \
+  { \
+    Dali::Property::Map* arg1 = (Dali::Property::Map*)jarg1; \
+    try \
+    { \
+      arg1->Add((Dali::Property::Index)jarg2, Dali::Property::Value(PassingArgs)); \
+    } \
+    CALL_CATCH_EXCEPTION(0); \
+    return jarg1; \
+  } \
+  SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Property_Map_Set_Str_##Name(void* jarg1, const char* jarg2 PassedArgs) \
+  { \
+    Dali::Property::Map* arg1 = (Dali::Property::Map*)jarg1; \
+    try \
+    { \
+      arg1->operator[](std::string_view(jarg2)) = Dali::Property::Value(PassingArgs); \
+    } \
+    CALL_CATCH_EXCEPTION(); \
+  } \
+  SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Property_Map_Set_Int_##Name(void* jarg1, int jarg2 PassedArgs) \
+  { \
+    Dali::Property::Map* arg1 = (Dali::Property::Map*)jarg1; \
+    try \
+    { \
+      arg1->operator[]((Dali::Property::Index)jarg2) = Dali::Property::Value(PassingArgs); \
+    } \
+    CALL_CATCH_EXCEPTION(); \
+  }
+#endif
+
+#ifndef GENERATE_PROPERTYMAP_ADD_VALTYPE
+#define GENERATE_PROPERTYMAP_ADD_VALTYPE(Name, Type) GENERATE_PROPERTYMAP_ADD(Name, COMMA Type jarg3, jarg3)
+#endif
+
+#ifndef GENERATE_PROPERTYMAP_ADD_REFTYPE
+#define GENERATE_PROPERTYMAP_ADD_REFTYPE(Name, Type) GENERATE_PROPERTYMAP_ADD(Name, COMMA void* jarg3, (Type const &)*(Type*)jarg3)
+#endif
+
+#ifndef GENERATE_PROPERTYMAP_ADD_NREFTYPE2
+#define GENERATE_PROPERTYMAP_ADD_NREFTYPE2(Name, Type, AtomicType) \
+  GENERATE_PROPERTYMAP_ADD(N##Name, COMMA AtomicType jarg3 COMMA AtomicType jarg4, Type(jarg3, jarg4))
+#endif
+
+#ifndef GENERATE_PROPERTYMAP_ADD_NREFTYPE3
+#define GENERATE_PROPERTYMAP_ADD_NREFTYPE3(Name, Type, AtomicType) \
+  GENERATE_PROPERTYMAP_ADD(N##Name, COMMA AtomicType jarg3 COMMA AtomicType jarg4 COMMA AtomicType jarg5, Type(jarg3, jarg4, jarg5))
+#endif
+
+#ifndef GENERATE_PROPERTYMAP_ADD_NREFTYPE4
+#define GENERATE_PROPERTYMAP_ADD_NREFTYPE4(Name, Type, AtomicType) \
+  GENERATE_PROPERTYMAP_ADD(N##Name, COMMA AtomicType jarg3 COMMA AtomicType jarg4 COMMA AtomicType jarg5 COMMA AtomicType jarg6, Type(jarg3, jarg4, jarg5, jarg6))
+#endif
+
+#ifndef COMMA
+#define COMMA ,
+#endif
+
+// CSharp_Dali_Property_Map_Add_Str_None(void*, char*)
+// CSharp_Dali_Property_Map_Add_Int_None(void*, int)
+// CSharp_Dali_Property_Map_Set_Str_None(void*, char*)
+// CSharp_Dali_Property_Map_Set_Int_None(void*, int)
+GENERATE_PROPERTYMAP_ADD(None, , )
+
+// CSharp_Dali_Property_Map_Add_Str_Bool(void*, char*, bool)
+// CSharp_Dali_Property_Map_Add_Int_Bool(void*, int, bool)
+// CSharp_Dali_Property_Map_Set_Str_Bool(void*, char*, bool)
+// CSharp_Dali_Property_Map_Set_Int_Bool(void*, int, bool)
+GENERATE_PROPERTYMAP_ADD_VALTYPE(Bool, bool)
+
+// CSharp_Dali_Property_Map_Add_Str_Int(void*, char*, int)
+// CSharp_Dali_Property_Map_Add_Int_Int(void*, int, int)
+// CSharp_Dali_Property_Map_Set_Str_Int(void*, char*, int)
+// CSharp_Dali_Property_Map_Set_Int_Int(void*, int, int)
+GENERATE_PROPERTYMAP_ADD_VALTYPE(Int, int)
+
+// CSharp_Dali_Property_Map_Add_Str_Float(void*, char*, float)
+// CSharp_Dali_Property_Map_Add_Int_Float(void*, int, float)
+// CSharp_Dali_Property_Map_Set_Str_Float(void*, char*, float)
+// CSharp_Dali_Property_Map_Set_Int_Float(void*, int, float)
+GENERATE_PROPERTYMAP_ADD_VALTYPE(Float, float)
+
+// CSharp_Dali_Property_Map_Add_Str_Str(void*, char*, char*)
+// CSharp_Dali_Property_Map_Add_Int_Str(void*, int, char*)
+// CSharp_Dali_Property_Map_Set_Str_Str(void*, char*, char*)
+// CSharp_Dali_Property_Map_Set_Int_Str(void*, int, char*)
+GENERATE_PROPERTYMAP_ADD_VALTYPE(Str, char*)
+
+// CSharp_Dali_Property_Map_Add_Str_Vector2(void*, char*, void*)
+// CSharp_Dali_Property_Map_Add_Int_Vector2(void*, int, void*)
+// CSharp_Dali_Property_Map_Set_Str_Vector2(void*, char*, void*)
+// CSharp_Dali_Property_Map_Set_Int_Vector2(void*, int, void*)
+GENERATE_PROPERTYMAP_ADD_REFTYPE(Vector2, Dali::Vector2)
+
+// CSharp_Dali_Property_Map_Add_Str_NVector2(void*, char*, float, float)
+// CSharp_Dali_Property_Map_Add_Int_NVector2(void*, int, float, float)
+// CSharp_Dali_Property_Map_Set_Str_NVector2(void*, char*, float, float)
+// CSharp_Dali_Property_Map_Set_Int_NVector2(void*, int, float, float)
+GENERATE_PROPERTYMAP_ADD_NREFTYPE2(Vector2, Dali::Vector2, float)
+
+// CSharp_Dali_Property_Map_Add_Str_Vector3(void*, char*, void*)
+// CSharp_Dali_Property_Map_Add_Int_Vector3(void*, int, void*)
+// CSharp_Dali_Property_Map_Set_Str_Vector3(void*, char*, void*)
+// CSharp_Dali_Property_Map_Set_Int_Vector3(void*, int, void*)
+GENERATE_PROPERTYMAP_ADD_REFTYPE(Vector3, Dali::Vector3)
+
+// CSharp_Dali_Property_Map_Add_Str_Vector4(void*, char*, void*)
+// CSharp_Dali_Property_Map_Add_Int_Vector4(void*, int, void*)
+// CSharp_Dali_Property_Map_Set_Str_Vector4(void*, char*, void*)
+// CSharp_Dali_Property_Map_Set_Int_Vector4(void*, int, void*)
+GENERATE_PROPERTYMAP_ADD_REFTYPE(Vector4, Dali::Vector4)
+
+// CSharp_Dali_Property_Map_Add_Str_NVector4(void*, char*, float, float, float, float)
+// CSharp_Dali_Property_Map_Add_Int_NVector4(void*, int, float, float, float, float)
+// CSharp_Dali_Property_Map_Set_Str_NVector4(void*, char*, float, float, float, float)
+// CSharp_Dali_Property_Map_Set_Int_NVector4(void*, int, float, float, float, float)
+GENERATE_PROPERTYMAP_ADD_NREFTYPE4(Vector4, Dali::Vector4, float)
+
+// CSharp_Dali_Property_Map_Add_Str_Rectangle(void*, char*, void*)
+// CSharp_Dali_Property_Map_Add_Int_Rectangle(void*, int, void*)
+// CSharp_Dali_Property_Map_Set_Str_Rectangle(void*, char*, void*)
+// CSharp_Dali_Property_Map_Set_Int_Rectangle(void*, int, void*)
+GENERATE_PROPERTYMAP_ADD_REFTYPE(Rectangle, Dali::Rect<int>)
+
+// CSharp_Dali_Property_Map_Add_Str_Map(void*, char*, void*)
+// CSharp_Dali_Property_Map_Add_Int_Map(void*, int, void*)
+// CSharp_Dali_Property_Map_Set_Str_Map(void*, char*, void*)
+// CSharp_Dali_Property_Map_Set_Int_Map(void*, int, void*)
+GENERATE_PROPERTYMAP_ADD_REFTYPE(Map, Dali::Property::Map)
+
 
 SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_Property_Map_GetValue(void * jarg1, unsigned long jarg2) {
   void * jresult ;
@@ -6263,7 +6405,6 @@ SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Property_Map_SetValue_IntKey(void* jarg1
   }
 }
 
-
 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Property_Map_SetValue_IntKey_IntValue(void* jarg1, int jarg2, int jarg3) {
 
   Dali::Property::Map* arg1 = (Dali::Property::Map*)jarg1;
@@ -6707,9 +6848,6 @@ SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_new_Property_Value__SWIG_18(void * jar
   return jresult;
 }
 
-
-
-
 SWIGEXPORT bool SWIGSTDCALL CSharp_Dali_Property_Value_EqualTo(void * jarg1, void * jarg2) {
   bool jresult;
   Dali::Property::Value *arg1 = (Dali::Property::Value *) 0 ;
@@ -7160,6 +7298,20 @@ SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_new_Property_Value_Vector4_Componentwi
   return jresult;
 }
 
+SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_new_Property_Value_Extents_Componentwise(unsigned short start, unsigned short end, unsigned short top, unsigned short bottom) {
+  void * jresult ;
+  Dali::Property::Value *result = 0 ;
+
+  {
+    try {
+      result = (Dali::Property::Value *)new Dali::Property::Value(Dali::Extents(start, end, top, bottom));
+    } CALL_CATCH_EXCEPTION(0);
+  }
+
+  jresult = (void*)result;
+  return jresult;
+}
+
 SWIGEXPORT bool SWIGSTDCALL CSharp_Dali_Property_Value_Get_Vector2_Componentwise(void* csPropertyValue, float* outX, float* outY) {
   Dali::Property::Value* arg1 = (Dali::Property::Value*) 0 ;
   bool result;
@@ -8415,7 +8567,6 @@ SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Handle_SetProperty(void * jarg1, int jar
 
 }
 
-
 SWIGEXPORT int SWIGSTDCALL CSharp_Dali_Handle_RegisterProperty__SWIG_0(void * jarg1, char * jarg2, void * jarg3) {
   int jresult ;
   Dali::Handle *arg1 = (Dali::Handle *) 0 ;
@@ -18982,6 +19133,18 @@ SWIGEXPORT int SWIGSTDCALL CSharp_Dali_Rectangle_top_get(void * jarg1) {
   return jresult;
 }
 
+SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Rectangle_set_all(void * jarg1, int jarg2, int jarg3, int jarg4, int jarg5)
+{
+  Dali::Rect<int>* arg1 = (Dali::Rect<int>*)jarg1;
+
+  if (arg1)
+  {
+    (arg1)->x = jarg2;
+    (arg1)->y = jarg3;
+    (arg1)->width = jarg4;
+    (arg1)->height = jarg5;
+  }
+}
 
 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_delete_Rectangle(void * jarg1) {
   Dali::Rect< int > *arg1 = (Dali::Rect< int > *) 0 ;
index cca07fd2c619b912f19c4e8278298e6016def952..6d75fe9a5d9b74ca7eef5a2eaf96b544d63fde57 100755 (executable)
@@ -252,6 +252,20 @@ SWIGEXPORT unsigned short SWIGSTDCALL CSharp_Dali_Extents_bottom_get(void * jarg
   return jresult;
 }
 
+SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Extents_set_all(void * jarg1, unsigned short jarg2, unsigned short jarg3, unsigned short jarg4, unsigned short jarg5) {
+  Dali::Extents *arg1 = (Dali::Extents *) 0 ;
+  uint16_t arg2 ;
+
+  arg1 = (Dali::Extents *)jarg1;
+  if (arg1)
+  {
+    (arg1)->start = jarg2;
+    (arg1)->end = jarg3;
+    (arg1)->top = jarg4;
+    (arg1)->bottom = jarg5;
+  }
+}
+
 
 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_delete_Extents(void * jarg1) {
   Dali::Extents *arg1 = (Dali::Extents *) 0 ;
index ab25b23838e43115e967bd903003a70fec1a07dc..0c4ef00bdf33a80514ef89ebbe38a0bd252ee98c 100755 (executable)
@@ -219,6 +219,75 @@ extern "C"
     return (int)InternalPropertyReturnType::NO_ERROR;
   }
 
+  SWIGEXPORT int SWIGSTDCALL CSharp_Dali_Actor_InternalSetPropertyMap(void *actor, int propertyType, void* map)
+  {
+    Dali::Actor* pActor = (Dali::Actor *)actor;
+    Dali::Property::Map* pMap = (Dali::Property::Map*)map;
+
+    if (!pActor)
+    {
+      SWIG_EXCEPTION_WITH_FILE_AND_LINE(SWIG_CSharpArgumentNullException, "actor is null!");
+      return (int)InternalPropertyReturnType::ERROR_UNKNOWN;
+    }
+    if (!pMap)
+    {
+      SWIG_EXCEPTION_WITH_FILE_AND_LINE(SWIG_CSharpArgumentNullException, "map is null!");
+      return (int)InternalPropertyReturnType::ERROR_UNKNOWN;
+    }
+
+    try
+    {
+      pActor->SetProperty((Dali::Property::Index)propertyType, Dali::Property::Value(*pMap));
+    }
+    CALL_CATCH_EXCEPTION((int)InternalPropertyReturnType::ERROR_UNKNOWN);
+
+    return (int)InternalPropertyReturnType::NO_ERROR;
+  }
+
+  SWIGEXPORT int SWIGSTDCALL CSharp_Dali_Actor_InternalSetPropertyExtents(void *actor, int propertyType, void* extents)
+  {
+    Dali::Actor* pActor = (Dali::Actor *)actor;
+    Dali::Extents* pExtents = (Dali::Extents*)extents;
+
+    if (!pActor)
+    {
+      SWIG_EXCEPTION_WITH_FILE_AND_LINE(SWIG_CSharpArgumentNullException, "actor is null!");
+      return (int)InternalPropertyReturnType::ERROR_UNKNOWN;
+    }
+    if (!pExtents)
+    {
+      SWIG_EXCEPTION_WITH_FILE_AND_LINE(SWIG_CSharpArgumentNullException, "extents is null!");
+      return (int)InternalPropertyReturnType::ERROR_UNKNOWN;
+    }
+
+    try
+    {
+      pActor->SetProperty((Dali::Property::Index)propertyType, Dali::Property::Value(*pExtents));
+    }
+    CALL_CATCH_EXCEPTION((int)InternalPropertyReturnType::ERROR_UNKNOWN);
+
+    return (int)InternalPropertyReturnType::NO_ERROR;
+  }
+
+  SWIGEXPORT int SWIGSTDCALL CSharp_Dali_Actor_InternalSetPropertyNone(void *actor, int propertyType)
+  {
+    Dali::Actor* pActor = (Dali::Actor *)actor;
+
+    if (!pActor)
+    {
+      SWIG_EXCEPTION_WITH_FILE_AND_LINE(SWIG_CSharpArgumentNullException, "actor is null!");
+      return (int)InternalPropertyReturnType::ERROR_UNKNOWN;
+    }
+
+    try
+    {
+      pActor->SetProperty((Dali::Property::Index)propertyType, Dali::Property::Value());
+    }
+    CALL_CATCH_EXCEPTION((int)InternalPropertyReturnType::ERROR_UNKNOWN);
+
+    return (int)InternalPropertyReturnType::NO_ERROR;
+  }
+
   SWIGEXPORT int SWIGSTDCALL CSharp_Dali_Actor_InternalRetrievingPropertyVector2(void *actor, int propertyType, void *retrievingVector2)
   {
     Dali::Actor *pActor = (Dali::Actor *)actor;
index 31b5d6e124190fff13c1e15b085894518ad1e928..cb3d4d6eabe91fc3b56fd5e771c065070485a3a7 100644 (file)
@@ -713,6 +713,17 @@ SWIGEXPORT float SWIGSTDCALL CSharp_Dali_Vector2_Height_get(void * jarg1) {
   return jresult;
 }
 
+SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Vector2_set_all(void * jarg1, float jarg2, float jarg3) {
+  Dali::Vector2 *arg1 = (Dali::Vector2 *) 0 ;
+
+  arg1 = (Dali::Vector2 *)jarg1;
+  if (arg1)
+  {
+    (arg1)->x = jarg2;
+    (arg1)->y = jarg3;
+  }
+}
+
 
 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_delete_Vector2(void * jarg1) {
   Dali::Vector2 *arg1 = (Dali::Vector2 *) 0 ;
@@ -1726,6 +1737,18 @@ SWIGEXPORT float SWIGSTDCALL CSharp_Dali_Vector3_b_get(void * jarg1) {
   return jresult;
 }
 
+SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Vector3_set_all(void * jarg1, float jarg2, float jarg3, float jarg4) {
+  Dali::Vector3 *arg1 = (Dali::Vector3 *) 0 ;
+
+  arg1 = (Dali::Vector3 *)jarg1;
+  if (arg1)
+  {
+    (arg1)->x = jarg2;
+    (arg1)->y = jarg3;
+    (arg1)->z = jarg4;
+  }
+}
+
 
 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_delete_Vector3(void * jarg1) {
   Dali::Vector3 *arg1 = (Dali::Vector3 *) 0 ;
@@ -2732,7 +2755,6 @@ SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Vector4_a_set(void * jarg1, float jarg2)
   if (arg1) (arg1)->a = arg2;
 }
 
-
 SWIGEXPORT float SWIGSTDCALL CSharp_Dali_Vector4_a_get(void * jarg1) {
   float jresult ;
   Dali::Vector4 *arg1 = (Dali::Vector4 *) 0 ;
@@ -2766,6 +2788,19 @@ SWIGEXPORT float SWIGSTDCALL CSharp_Dali_Vector4_q_get(void * jarg1) {
   return jresult;
 }
 
+SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Vector4_set_all(void * jarg1, float jarg2, float jarg3, float jarg4, float jarg5) {
+  Dali::Vector4 *arg1 = (Dali::Vector4 *) 0 ;
+
+  arg1 = (Dali::Vector4 *)jarg1;
+  if (arg1)
+  {
+    (arg1)->x = jarg2;
+    (arg1)->y = jarg3;
+    (arg1)->z = jarg4;
+    (arg1)->w = jarg5;
+  }
+}
+
 
 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_delete_Vector4(void * jarg1) {
   Dali::Vector4 *arg1 = (Dali::Vector4 *) 0 ;