Tarantool development patches archive
 help / color / mirror / Atom feed
* [Tarantool-patches] [PATCH small 1/1] region: new region_alloc_array, updated alloc_object
@ 2020-05-21 20:32 Vladislav Shpilevoy
  2020-05-25  6:52 ` Aleksandr Lyapunov
  2020-06-03 21:27 ` Vladislav Shpilevoy
  0 siblings, 2 replies; 6+ messages in thread
From: Vladislav Shpilevoy @ 2020-05-21 20:32 UTC (permalink / raw)
  To: tarantool-patches, alyapunov, tsafin

Region's API provided a macro for aligned allocation of an object:
region_alloc_object(). But not less frequent there is a case when
need to allocate an array of objects, also aligned. The patch adds
region_alloc_array() for that.

Also the patch adds an out parameter 'size' for both macros. It
simplifies total size calculation, which is needed almost always,
because total size is included into an error message, if the
allocation fails.

Needed for https://github.com/tarantool/tarantool/issues/4609
---
Branch: http://github.com/tarantool/small/tree/gerold103/region_alloc_array
Issue: https://github.com/tarantool/tarantool/issues/4609

 small/region.h | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/small/region.h b/small/region.h
index bea88c6..df6567d 100644
--- a/small/region.h
+++ b/small/region.h
@@ -386,10 +386,15 @@ struct RegionGuard {
 };
 #endif /* __cplusplus */
 
-#define region_reserve_object(region, T) \
-	(T *)region_aligned_reserve((region), sizeof(T), alignof(T))
-
-#define region_alloc_object(region, T) \
-	(T *)region_aligned_alloc((region), sizeof(T), alignof(T))
+#define region_alloc_object(region, T, size) ({					\
+	*(size) = sizeof(T);							\
+	(T *)region_aligned_alloc((region), sizeof(T), alignof(T));		\
+})
+
+#define region_alloc_array(region, T, count, size) ({				\
+	int _tmp_ = sizeof(T) * (count);					\
+	*(size) = _tmp_;							\
+	(T *)region_aligned_alloc((region), _tmp_, alignof(T));			\
+})
 
 #endif /* INCLUDES_TARANTOOL_SMALL_REGION_H */
-- 
2.21.1 (Apple Git-122.3)

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-06-05 12:12 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-21 20:32 [Tarantool-patches] [PATCH small 1/1] region: new region_alloc_array, updated alloc_object Vladislav Shpilevoy
2020-05-25  6:52 ` Aleksandr Lyapunov
2020-05-27  0:00   ` Vladislav Shpilevoy
2020-06-05 12:11     ` Timur Safin
2020-06-03 21:27 ` Vladislav Shpilevoy
2020-06-05 12:12   ` Timur Safin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox