#!/usr/bin/python class Api: def __init__(self): 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