summaryrefslogtreecommitdiffstats
path: root/src/mesa/glapi
diff options
context:
space:
mode:
authorIan Romanick <[email protected]>2005-01-25 23:53:13 +0000
committerIan Romanick <[email protected]>2005-01-25 23:53:13 +0000
commit38e6e09cb86ef0bfea87a907def49f00af67fd8f (patch)
treeb110fa4835b5d389af81a5706f487164a510e69d /src/mesa/glapi
parente4d41524a229aa1e0788668b28151125b9c6581e (diff)
Add a glFunctionIterator class to iterate over the functions stored in a
higher-level API object. Use this type of object to implement the printFunctions method. Modify other functions that iterate over the list of functions to use this type of object.
Diffstat (limited to 'src/mesa/glapi')
-rw-r--r--src/mesa/glapi/gl_XML.py76
-rw-r--r--src/mesa/glapi/gl_apitemp.py14
-rw-r--r--src/mesa/glapi/gl_procs.py30
3 files changed, 67 insertions, 53 deletions
diff --git a/src/mesa/glapi/gl_XML.py b/src/mesa/glapi/gl_XML.py
index 61c9b355cf2..16499df0946 100644
--- a/src/mesa/glapi/gl_XML.py
+++ b/src/mesa/glapi/gl_XML.py
@@ -425,6 +425,58 @@ class glItemFactory:
return None
+class glFunctionIterator:
+ """Class to iterate over a list of glFunctions
+
+ Objects of this classare returned by
+ FilterGLAPISpecBase::functionIterator. This default version
+ iterates over the functions in order of dispatch table offset. All
+ of the "true" functions are iterated first, followed by the alias
+ functions."""
+
+ def __init__(self, context):
+ self.context = context
+ self.keys = context.functions.keys()
+ self.keys.sort()
+
+ self.prevk = -1
+ self.direction = 1
+
+ for self.index in range(0, len(self.keys)):
+ if self.keys[ self.index ] >= 0: break
+
+ if self.index == len(self.keys):
+ self.direction = -1
+ self.index -= 1
+
+ self.split = self.index - 1
+ return
+
+
+ def __iter__(self):
+ return self
+
+
+ def next(self):
+ if self.index < 0:
+ raise StopIteration
+
+ k = self.keys[ self.index ]
+
+ #if self.context.functions[k].fn_alias == None:
+ # if k != self.prevk + 1:
+ # print 'Missing offset %d' % (prevk)
+ # self.prevk = int(k)
+
+ self.index += self.direction
+
+ if self.index == len(self.keys):
+ self.index = self.split
+ self.direction = -1
+
+ return self.context.functions[k]
+
+
class FilterGLAPISpecBase(saxutils.XMLFilterBase):
name = "a"
license = "The license for this file is unspecified."
@@ -457,25 +509,13 @@ class FilterGLAPISpecBase(saxutils.XMLFilterBase):
return self.functions[index]
- def printFunctions(self):
- keys = self.functions.keys()
- keys.sort()
- prevk = -1
- for k in keys:
- if k < 0: continue
-
- if self.functions[k].fn_alias == None:
- if k != prevk + 1:
- #print 'Missing offset %d' % (prevk)
- pass
- prevk = int(k)
- self.printFunction(self.functions[k])
-
- keys.reverse()
- for k in keys:
- if self.functions[k].fn_alias != None:
- self.printFunction(self.functions[k])
+ def functionIterator(self):
+ return glFunctionIterator(self)
+
+ def printFunctions(self):
+ for f in self.functionIterator():
+ self.printFunction(f)
return
diff --git a/src/mesa/glapi/gl_apitemp.py b/src/mesa/glapi/gl_apitemp.py
index 533cc65becd..d89440acbfa 100644
--- a/src/mesa/glapi/gl_apitemp.py
+++ b/src/mesa/glapi/gl_apitemp.py
@@ -149,12 +149,10 @@ class PrintGlOffsets(gl_XML.FilterGLAPISpecBase):
#endif
static _glapi_proc DISPATCH_TABLE_NAME[] = {"""
- keys = self.functions.keys()
- keys.sort()
- for k in keys:
- if k < 0: continue
+ for f in self.functionIterator():
+ if f.fn_offset < 0: continue
- print ' TABLE_ENTRY(%s),' % (self.functions[k].name)
+ print ' TABLE_ENTRY(%s),' % (f.name)
print ' /* A whole bunch of no-op functions. These might be called'
print ' * when someone tries to call a dynamically-registered'
@@ -177,11 +175,7 @@ static _glapi_proc DISPATCH_TABLE_NAME[] = {"""
#ifdef UNUSED_TABLE_NAME
static _glapi_proc UNUSED_TABLE_NAME[] = {"""
- keys = self.functions.keys()
- keys.sort()
- keys.reverse();
- for k in keys:
- f = self.functions[k]
+ for f in self.functionIterator():
if f.fn_offset < 0:
print ' TABLE_ENTRY(%s),' % (f.name)
diff --git a/src/mesa/glapi/gl_procs.py b/src/mesa/glapi/gl_procs.py
index f9ce8e2da1b..a9fdd1812c1 100644
--- a/src/mesa/glapi/gl_procs.py
+++ b/src/mesa/glapi/gl_procs.py
@@ -91,16 +91,8 @@ class PrintGlProcs(gl_XML.FilterGLAPISpecBase):
else:
print 'static const char gl_string_table[] = {'
- keys = self.functions.keys()
- keys.sort()
- for k in keys:
- if k < 0: continue
- self.printFunctionString(self.functions[k])
-
- keys.reverse()
- for k in keys:
- if k >= -1: continue
- self.printFunctionString(self.functions[k])
+ for f in self.functionIterator():
+ self.printFunctionString(f)
if self.long_strings:
print ' ;'
@@ -110,27 +102,15 @@ class PrintGlProcs(gl_XML.FilterGLAPISpecBase):
print ''
print 'static const glprocs_table_t static_functions[] = {'
- keys = self.functions.keys()
- keys.sort()
base_offset = 0
- for k in keys:
- if k < 0: continue
- self.printFunctionOffset(self.functions[k], base_offset)
-
- # The length of the function's name, plus 2 for "gl",
- # plus 1 for the NUL.
-
- base_offset += len(self.functions[k].name) + 3
- keys.reverse()
- for k in keys:
- if k >= -1: continue
- self.printFunctionOffset(self.functions[k], base_offset)
+ for f in self.functionIterator():
+ self.printFunctionOffset(f, base_offset)
# The length of the function's name, plus 2 for "gl",
# plus 1 for the NUL.
- base_offset += len(self.functions[k].name) + 3
+ base_offset += len(f.name) + 3
print ' NAME_FUNC_OFFSET( -1, NULL, 0 )'
print '};'