summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2022-11-08 09:06:21 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2022-11-10 11:59:45 +0900
commit6eaed20e145c1ab4c9c4ccf669d0ebea934f4d36 (patch)
treeec43f8696b661dcd8d19ad60e353999fbac0490b /include
parent0ae5de1a5ddcca407dd2ba30ca5d5f3d7c3ea4bc (diff)
downloadruby-6eaed20e145c1ab4c9c4ccf669d0ebea934f4d36.tar.gz
Add version to the interface of Random extensions
Diffstat (limited to 'include')
-rw-r--r--include/ruby/random.h33
1 files changed, 33 insertions, 0 deletions
diff --git a/include/ruby/random.h b/include/ruby/random.h
index e3176dbe6b..989445f2f9 100644
--- a/include/ruby/random.h
+++ b/include/ruby/random.h
@@ -16,6 +16,26 @@
#include "ruby/ruby.h"
+/*
+ * version
+ * 0: before versioning; deprecated
+ * 1: added version and flags
+ */
+#define RUBY_RANDOM_INTERFACE_VERSION_MAJOR 1
+#define RUBY_RANDOM_INTERFACE_VERSION_MINOR 0
+
+#define RUBY_RANDOM_PASTE_VERSION_SUFFIX(x, y, z) x##_##y##_##z
+#define RUBY_RANDOM_WITH_VERSION_SUFFIX(name, major, minor) \
+ RUBY_RANDOM_PASTE_VERSION_SUFFIX(name, major, minor)
+#define rb_random_data_type \
+ RUBY_RANDOM_WITH_VERSION_SUFFIX(rb_random_data_type, \
+ RUBY_RANDOM_INTERFACE_VERSION_MAJOR, \
+ RUBY_RANDOM_INTERFACE_VERSION_MINOR)
+#define RUBY_RANDOM_INTERFACE_VERSION_INITIALIZER \
+ {RUBY_RANDOM_INTERFACE_VERSION_MAJOR, RUBY_RANDOM_INTERFACE_VERSION_MINOR}
+#define RUBY_RANDOM_INTERFACE_VERSION_MAJOR_MAX 0xff
+#define RUBY_RANDOM_INTERFACE_VERSION_MINOR_MAX 0xff
+
RBIMPL_SYMBOL_EXPORT_BEGIN()
/**
@@ -84,6 +104,18 @@ typedef struct {
/** Number of bits of seed numbers. */
size_t default_seed_bits;
+ /**
+ * Major/minor versions of this interface
+ */
+ struct {
+ uint8_t major, minor;
+ } version;
+
+ /**
+ * Reserved flags
+ */
+ uint16_t flags;
+
/** Initialiser function. */
rb_random_init_func *init;
@@ -161,6 +193,7 @@ typedef struct {
* ```
*/
#define RB_RANDOM_INTERFACE_DEFINE(prefix) \
+ RUBY_RANDOM_INTERFACE_VERSION_INITIALIZER, 0, \
prefix##_init, \
prefix##_get_int32, \
prefix##_get_bytes