blob: 0bf8bee2ad4f9f1b4b8ff8d65b223c61ff81b1a4 [file] [log] [blame]
#!/usr/bin/python
class Api:
def __init__(self):
self.name = ''
self.functions = []
self.typedefs = []
self.enums = []
self.variables = []
self.extensions = []
self.states = []
self.stateTypes = []
self.conditional = ''
def add(self, item):
if isinstance(item, Function):
self.functions.append(item)
elif isinstance(item, Typedef):
self.typedefs.append(item)
elif isinstance(item, Enum):
self.enums.append(item)
elif isinstance(item, Parameter):
self.variables.append(item)
elif isinstance(item, Extension):
self.extensions.append(item)
elif isinstance(item, StateType):
self.stateTypes.append(item)
elif isinstance(item, State):
self.states.append(item)
else:
raise TypeError, 'Unsupported Api type'
class Extension:
def __init__(self, name = '', url = ''):
self.name = name
self.url = url
self.category = ''
self.functions = [] # function names
self.enumerants = [] # enumerant names
self.emulatedBy = '' # Regal emulation layer that adds support for this extension
self.emulatedIf = '' # optional condition determing if extension can be emulated
class Function:
def __init__(self, name = ''):
self.name = name
self.ret = None
self.parameters = []
self.version = ''
self.extension = ''
self.deprecated = ''
self.category = ''
self.public = True
self.trace = True # Include in text trace
self.play = True # Playback supported
def add(self, parameter):
if isinstance(parameter, Parameter):
self.parameters.append(parameter)
else:
raise TypeError, 'Invalid Parameter type'
class Typedef:
def __init__(self, name = '', type = ''):
self.name = name
self.type = type
self.function = ''
self.parameters = []
self.version = ''
self.extension = ''
self.deprecated = ''
self.category = ''
def add(self, parameter):
if isinstance(parameter, Parameter):
self.parameters.append(parameter)
else:
raise TypeError, 'Invalid Parameter type'
class Return:
def __init__(self, type = '', default = '', cast = None, binary = False, size = None, maxSize = None, intercept = None, trace = True, play = True, filter = None, regalLog = None):
self.type = type # Type string, e.g. int
self.default = default # Default value, e.g. 0
self.cast = cast # Cast for trace and APIC purposes, e.g. void * -> char *
self.binary = binary # Always treat as binary for trace purposes (always base64 encode)
self.size = size # Array size expression, via helper functions etc
self.maxSize = maxSize # Maximum array size
self.intercept = intercept # Intercept the value
self.trace = trace # Include in text trace
self.play = play # Include in playback
self.filter = filter # Filtering function
self.regalLog = None # Function for Regal logging purposes
class Parameter:
def __init__(self, name = '', type = '', default = '', cast = None, binary = False, size = None, maxSize = None, trace = True, play = True, filter = None, regalLog = None):
self.name = name # Parameter name string, e.g. foo
self.type = type # Type string, e.g. int
self.default = default # Default value, e.g. 0
self.cast = cast # Cast for trace and APIC purposes, e.g. void * -> char *
self.binary = binary # Always treat as binary for trace purposes (always base64 encode)
self.size = size # Array size expression, via helper functions etc
self.maxSize = maxSize # Maximum array size
self.input = True # Input parameter?
self.output = False # Output parameter?
self.trace = trace # Include in text trace
self.play = play # Include in playback
self.filter = filter # Filtering function
self.regalLog = regalLog # Function for Regal logging purposes
def Input(name = '', type = '', default = '', cast = None, binary = False, size = None, maxSize = None, lookup = None, intercept = None, trace = True, play = True, filter = None, regalLog = None):
parameter = Parameter(name, type, default, cast, binary, size, maxSize, trace, play, filter, regalLog)
parameter.input = True
parameter.output = False
parameter.lookup = lookup
parameter.intercept = intercept # Intercept the value
return parameter
def Output(name = '', type = '', default = '', cast = None, binary = False, size = None, maxSize = None, intercept = None, trace = True, play = True, filter = None, regalLog = None):
parameter = Parameter(name, type, default, cast, binary, size, maxSize, trace, play, filter, regalLog)
parameter.input = False
parameter.output = True
parameter.intercept = intercept # Intercept the value
return parameter
def InputOutput(name = '', type = '', default = '', cast = None, binary = False, size = None, maxSize = None, lookup = None, intercept = None, trace = True, play = True, filter = None, regalLog = None):
parameter = Parameter(name, type, default, cast, binary, size, maxSize, trace, play, filter, regalLog)
parameter.input = True
parameter.output = True
parameter.lookup = None
parameter.intercept = None # Intercept the value
return parameter
class Enum:
def __init__(self, name = ''):
self.name = name
self.enumerants = []
self.version = ''
self.extension = ''
self.deprecated = ''
self.category = ''
self.default = None
def add(self, enumerant):
if isinstance(enumerant, Enumerant):
self.enumerants.append(enumerant)
else:
raise TypeError, 'Invalid Enumerant type'
class Enumerant:
def __init__(self, name = '', value = '', category = ''):
self.name = name
self.value = value
self.version = ''
self.extension = ''
self.deprecated = ''
self.category = category
self.public = True
class StateType:
def __init__(self, name = '', code = '', explanation = ''):
self.name = name
self.code = code
self.explanation = explanation
self.ctype = []
self.size = 1
self.params = 0
class State:
def __init__(self, getValue, type, getCommand, initialValue, description, section, attribute):
self.getValue = getValue
self.type = type
self.getCommand = getCommand
self.initialValue = initialValue
self.description = description
self.section = section
self.attribute = attribute