udb-gen 0.1.16 → 0.1.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5ce348f01865396b19083403190904a49e714a400ced405138978b2518043aa1
4
- data.tar.gz: 1391cfcfd6b45dcc1a906ea5ce81c22008deee2ae5aacd5274af2eb35e10e14a
3
+ metadata.gz: bd664bf15d73a1f71002532c2df038f866f0f81f2cc08b76c867b11a62df7dcf
4
+ data.tar.gz: a7d6b6aea7b6f0ca11bc8c9fa54df36a589714f0ea73b98e2b3eae53fb74a45a
5
5
  SHA512:
6
- metadata.gz: 42cccec5d2900a233253b67d71aceb4c520f177ab39b248090618a8287d75e845c01c1776f9138c5d610903b9f666ec8ea1feff73ead895727dee676c514145c
7
- data.tar.gz: 3a62b6d8436d6afc2cdf9008c0f69bc1c385d5fc416b4b63f96686315fef72514f766d4f354684b3f758673e910c87a265ba1490ee5e3dd9650f6071dc352ffe
6
+ metadata.gz: 6691970e5af4bedee4adfcef125a7b762d4b10b3d4dc4b0171c249734e5a159274c34c5b7794eafb50ccf17926d618bce834b4f6e08179efa9cc15fde46879c8
7
+ data.tar.gz: d6f228e160fe8a77e30350886208cf542fe6198c810cfa5a72a337e4e1b874201ec7c9860ed5cf84540d88d85d961bafa6b5eb1ac0482b07214faee625252d3f
@@ -71,6 +71,10 @@ module UdbGen
71
71
  sig { abstract.params(value: Integer).returns(String) }
72
72
  def format_integer(value); end
73
73
 
74
+ # Format a bit mask as a language-appropriate literal
75
+ sig { overridable.params(value: Integer).returns(String) }
76
+ def format_mask(value) = format_integer(value)
77
+
74
78
  sig { returns(String) }
75
79
  def generate_header
76
80
  unless cfg_arch.fully_configured?
@@ -94,6 +98,7 @@ module UdbGen
94
98
  " Integer params: #{define_directive} UDB_NAME value and #{define_directive} UDB_NAME_<value>",
95
99
  " Enum (string) params: #{define_directive} UDB_NAME_VALUE (value sanitized to uppercase identifier)",
96
100
  " Boolean arrays: #{define_directive} UDB_NAME_<index> (one per true element)",
101
+ " #{define_directive} UDB_NAME_MASK (bit <index> set when element <index> is true)",
97
102
  " Integer arrays: #{define_directive} UDB_NAME_<value> (one per unique element, sorted)",
98
103
  " String arrays: #{define_directive} UDB_NAME_<VALUE> (one per unique element, sanitized)"
99
104
  ]
@@ -190,10 +195,14 @@ module UdbGen
190
195
 
191
196
  sig { params(lines: T::Array[String], name: String, value: T::Array[T.untyped]).void }
192
197
  def emit_array_param(lines, name, value)
198
+ return if value.empty?
199
+
193
200
  if value.all? { |v| v == true || v == false }
194
201
  value.each_with_index do |v, i|
195
202
  lines << "#{define_directive} #{name}_#{i}" if v
196
203
  end
204
+ mask = value.each_with_index.sum { |v, i| v ? (1 << i) : 0 }
205
+ lines << "#{define_directive} #{name}_MASK #{format_mask(mask)}"
197
206
  elsif value.all? { |v| v.is_a?(Integer) }
198
207
  value.uniq.sort.each do |v|
199
208
  lines << "#{define_directive} #{name}_#{v}"
@@ -77,7 +77,13 @@ module UdbGen
77
77
  def file_type_name = "C header"
78
78
 
79
79
  sig { override.params(value: Integer).returns(String) }
80
- def format_integer(value) = value.to_s
80
+ def format_integer(value)
81
+ # Values above the signed 64-bit range need an unsigned suffix
82
+ value.bit_length > 63 ? "#{value}ULL" : value.to_s
83
+ end
84
+
85
+ sig { override.params(value: Integer).returns(String) }
86
+ def format_mask(value) = "0x#{value.to_s(16).upcase}"
81
87
 
82
88
  sig { override.params(argv: T::Array[String]).returns(T.noreturn) }
83
89
  def run(argv)
@@ -5,5 +5,5 @@
5
5
  # frozen_string_literal: true
6
6
 
7
7
  module UdbGen
8
- def self.version = "0.1.16"
8
+ def self.version = "0.1.17"
9
9
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: udb-gen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.16
4
+ version: 0.1.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Derek Hower
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2026-09-28 00:00:00.000000000 Z
10
+ date: 2026-10-22 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: asciidoctor
@@ -141,14 +141,14 @@ dependencies:
141
141
  requirements:
142
142
  - - '='
143
143
  - !ruby/object:Gem::Version
144
- version: 0.1.17
144
+ version: 0.1.18
145
145
  type: :runtime
146
146
  prerelease: false
147
147
  version_requirements: !ruby/object:Gem::Requirement
148
148
  requirements:
149
149
  - - '='
150
150
  - !ruby/object:Gem::Version
151
- version: 0.1.17
151
+ version: 0.1.18
152
152
  - !ruby/object:Gem::Dependency
153
153
  name: write_xlsx
154
154
  requirement: !ruby/object:Gem::Requirement