Source code for excentury.core.dump_text

"""Dump Text

Interface designed to dump text files.

"""

import ctypes
from six.moves import cStringIO as StringIO
from excentury.core import XCStruct, XC_TYPES, CTYPES
from excentury.core import Communicator, data, xc_type, c_type

CHAR_MAP = {
    'C': '%c',
    'I': '%d',
    'N': '%d',
    'R': '%f'
}


[docs]class TextDumper(Communicator): """Class to dump data. """ def __init__(self, fname=None): Communicator.__init__(self, self) self._fname = fname self._file = None self.open(fname)
[docs] def open(self, fname=None): """Open a new file for writing. """ self.close() self._fname = fname if fname is None: self._file = StringIO() else: self._file = open(fname, "w")
[docs] def close(self): """Transmit the objects. """ val = None if self._file is not None: Communicator.close(self) if self._fname is None: val = self._file.getvalue() self._file.close() self._file = None self._fname = None return val
[docs] def info(self, obj): """Write the object info""" kind = xc_type(obj) self._file.write("%c " % kind) if kind in ['C', 'I', 'N', 'R']: self._file.write('%d ' % ctypes.sizeof(c_type(obj))) elif type(obj) is XCStruct: self._file.write('%s ' % obj.name()) else: self._file.write('%s ' % type(obj).__name__)
[docs] def data(self, obj, total=None): """Write the objects data. """ if total is not None: tmp = '%s ' % CHAR_MAP.get(xc_type(obj[0]), None) if type(obj[0]) in XC_TYPES: for i in xrange(total): self._file.write(tmp % obj[i].value) elif type(obj[0]) in CTYPES: for i in xrange(total): self._file.write(tmp % obj[i]) else: for i in xrange(total): data(self, obj[i], "") return tmp = '%s ' % CHAR_MAP[xc_type(obj)] if type(obj) not in XC_TYPES: self._file.write(tmp % obj) else: self._file.write(tmp % obj.value)
[docs] def trans_type(self, obj): """Transfer a character. """ self._file.write("%c " % obj)
[docs] def trans_byte(self, obj): """Transfer a byte. """ self._file.write("%d " % obj)
[docs] def trans_num(self, num): """Transfer an integer. """ self._file.write("%d " % num)
[docs] def trans_varname(self, varname): """Transfer a variable name. """ self._file.write("%s " % varname)
[docs] def trans_name(self, name): """Transfer a name. """ self._file.write("%s " % name)
[docs] def trans_num_objects(self): """Transfer the number of objects. """ self._file.write("%d\n" % len(self.obj))
[docs] def trans_num_classes(self): """Tranfer the number of objects in cls_obj. """ if len(self.cls_obj) > 0: self._file.write("%d\n" % len(self.cls_obj)) else: self._file.write("%d " % len(self.cls_obj))
[docs] def trans_close(self): """Print character to denote when transfer of obj is done. """ self._file.write("\n")