[Xcb] Make enums more language independent

Carsten Meier cm at trexity.de
Wed Sep 3 05:21:30 PDT 2008


Hello,

I am currently working on a set of C++ utility classes which are built
on top of XCB. For that I've extended xcbgen's Enum-class a little bit 
so that it also exports the bit numbers and not only the bitmask-values
to code-generators (patch #2). The first patch replaced the generation
of C-style shift-expressions for bitmask-values with a decimal number.
The third patch replaced the hexadecimal gc-function values in
xproto.xml by decimal ones (also to make it more language independent)

I would like to hear comments on this and also a little bit of help on
how to incorporate the patches into the source-tree (I am new to git
and distributed development :) )

Thanks in advance.

Carsten Meier



patch #1:

From 2f39948f4de1a3023865177cefc2ba0be2399a13 Mon Sep 17 00:00:00 2001
From: Carsten Meier <cm at trexity.de>
Date: Wed, 3 Sep 2008 12:50:26 +0200
Subject: [PATCH] Generate values instead of shift-expressions for enum-bits

Now more language independent as some languages don't have
C-like shift-operators.
---
 xcbgen/xtypes.py |    3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/xcbgen/xtypes.py b/xcbgen/xtypes.py
index d4b16e2..836e007 100644
--- a/xcbgen/xtypes.py
+++ b/xcbgen/xtypes.py
@@ -129,8 +129,7 @@ class Enum(SimpleType):
             if value.tag == 'value':
                 self.values.append((item.get('name'), value.text))
             elif value.tag == 'bit':
-                # XXX replace this with a simple number, please.
-                self.values.append((item.get('name'), '(1 << %s)' % value.text))
+                self.values.append((item.get('name'), '%u' % (1 << int(value.text))))
 
     def resolve(self, module):
         self.resolved = True
-- 
1.5.4.3



patch #2:

From d85003946cefd5d02e0b37cf317641681411bf76 Mon Sep 17 00:00:00 2001
From: Carsten Meier <cm at trexity.de>
Date: Wed, 3 Sep 2008 12:55:04 +0200
Subject: [PATCH] Make bit-numbers available to code-generators

The Enum-class now exports the bit numbers in the 'bits'-list
if they have been specified in the protocol description.
---
 xcbgen/xtypes.py |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/xcbgen/xtypes.py b/xcbgen/xtypes.py
index 836e007..01d765e 100644
--- a/xcbgen/xtypes.py
+++ b/xcbgen/xtypes.py
@@ -114,10 +114,12 @@ class Enum(SimpleType):
 
     Public fields added:
     values contains a list of (name, value) tuples.  value is empty, or a number.
+    bits contains a list of (name, bitnum) tuples.  items only appear if specified as a bit. bitnum is a number.
     '''
     def __init__(self, name, elt):
         SimpleType.__init__(self, name, 4)
         self.values = []
+        self.bits = []
         for item in list(elt):
             # First check if we're using a default value
             if len(list(item)) == 0:
@@ -130,6 +132,7 @@ class Enum(SimpleType):
                 self.values.append((item.get('name'), value.text))
             elif value.tag == 'bit':
                 self.values.append((item.get('name'), '%u' % (1 << int(value.text))))
+                self.bits.append((item.get('name'), value.text))
 
     def resolve(self, module):
         self.resolved = True
-- 
1.5.4.3



patch #3:

From 48179e2462715ee989393660cdd16be5bad3338c Mon Sep 17 00:00:00 2001
From: Carsten Meier <cm at trexity.de>
Date: Wed, 3 Sep 2008 13:01:24 +0200
Subject: [PATCH] Replaced hex-values with decimal ones

Replaced the GC-function values with decimal ones as some
languages have a different notation for hex-values.
---
 src/xproto.xml |   32 ++++++++++++++++----------------
 1 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/src/xproto.xml b/src/xproto.xml
index 343e734..ba4ca82 100644
--- a/src/xproto.xml
+++ b/src/xproto.xml
@@ -1395,22 +1395,22 @@ authorization from the authors.
 
   <!-- GC Function values -->
   <enum name="GX">
-    <item name="clear">       <value>0x0</value></item>
-    <item name="and">         <value>0x1</value></item>
-    <item name="andReverse">  <value>0x2</value></item>
-    <item name="copy">        <value>0x3</value></item>
-    <item name="andInverted"> <value>0x4</value></item>
-    <item name="noop">        <value>0x5</value></item>
-    <item name="xor">         <value>0x6</value></item>
-    <item name="or">          <value>0x7</value></item>
-    <item name="nor">         <value>0x8</value></item>
-    <item name="equiv">       <value>0x9</value></item>
-    <item name="invert">      <value>0xa</value></item>
-    <item name="orReverse">   <value>0xb</value></item>
-    <item name="copyInverted"><value>0xc</value></item>
-    <item name="orInverted">  <value>0xd</value></item>
-    <item name="nand">        <value>0xe</value></item>
-    <item name="set">         <value>0xf</value></item>
+    <item name="clear">       <value>0</value></item>
+    <item name="and">         <value>1</value></item>
+    <item name="andReverse">  <value>2</value></item>
+    <item name="copy">        <value>3</value></item>
+    <item name="andInverted"> <value>4</value></item>
+    <item name="noop">        <value>5</value></item>
+    <item name="xor">         <value>6</value></item>
+    <item name="or">          <value>7</value></item>
+    <item name="nor">         <value>8</value></item>
+    <item name="equiv">       <value>9</value></item>
+    <item name="invert">      <value>10</value></item>
+    <item name="orReverse">   <value>11</value></item>
+    <item name="copyInverted"><value>12</value></item>
+    <item name="orInverted">  <value>13</value></item>
+    <item name="nand">        <value>14</value></item>
+    <item name="set">         <value>15</value></item>
   </enum>
 
   <enum name="LineStyle">
-- 
1.5.4.3


More information about the Xcb mailing list