Source code for Class.Struct

#!/usr/bin/env python3
# Generated by "pythonizer -d5 -v3 -aM ../Class/Struct.pm" v1.024 run by SNOOPYJC on Fri Feb  3 17:13:12 2023
__author__ = """Joe Cool"""
__email__ = "snoopyjc@gmail.com"
__version__ = "1.024"
import builtins, itertools, perllib

_bn = lambda s: "" if s is None else s
_str = lambda s: "" if s is None else str(s)
perllib.init_package("Class.Struct", is_class=True)


[docs]def struct_(*_args): _args = list(_args) args = perllib.Hash() class_ = None i_l = 0 ndx = None ndx_map = perllib.Hash() self = perllib.Array() base_type = (perllib.ref_scalar(_args[1])) if len(_args) >= 2 else "" package = None decls = perllib.Array() if base_type == "HASH": package = _args.pop(0) if _args else None decls = perllib.Array(itertools.chain.from_iterable(_args[0].items())) elif base_type == "ARRAY": package = _args.pop(0) if _args else None decls = _args[0].copy() else: base_type = "ARRAY" package = perllib.caller_s() decls = _args.copy() # print STDERR "base_type=$base_type, package=$package, decls=@decls\n"; if base_type == "HASH": def _f35(*_args): _args = list(_args) nonlocal package class_ = (_args.pop(0) if _args else None) if len(_args) else package self = perllib.bless(perllib.Hash(), class_) args = perllib.Hash({_args[_i]: _args[_i + 1] for _i in range(0, len(_args), 2)}) for _d in list(args.keys()): self[_str(_d)] = args.get(_str(_d)) return self perllib.store_perl_global( f"{_bn(package)}::new", _f35, infer_suffix=True, method_type=True ) else: ndx_map = perllib.Hash() for i_l in range(0, len(decls), 2): ndx_map[_str(decls[perllib.int_(i_l)])] = i_l >> 1 perllib.store_perl_global(f"{_bn(package)}::_ndx_map" + "_h", ndx_map) def _f50(*_args): _args = list(_args) nonlocal package class_ = (_args.pop(0) if _args else None) if len(_args) else package self = perllib.bless(perllib.Array(), class_) args = perllib.Hash({_args[_i]: _args[_i + 1] for _i in range(0, len(_args), 2)}) for _d in list(args.keys()): self[ perllib.int_( perllib.fetch_perl_global(f"{_bn(package)}::_ndx_map" + "_h")[_d] ) ] = args.get(_str(_d)) return self perllib.store_perl_global( f"{_bn(package)}::new", _f50, infer_suffix=True, method_type=True ) for i_l in range(0, len(decls), 2): key = decls[perllib.int_(i_l)] val = decls[perllib.int_(i_l) + 1] # print STDERR "Handing $package $key => $val\n"; if _str(val) == "$" or _str(val) == "*$": if base_type == "HASH": def _f66(key): def _f66template(*_args): _args = list(_args) nonlocal key self = _args.pop(0) if _args else None if len(_args): self[_str(key)] = _args[0] return self.get(_str(key)) return _f66template perllib.store_perl_global( f"{_bn(package)}::{_bn(key)}", _f66(key), infer_suffix=True ) else: def _f74(key): def _f74template(*_args): _args = list(_args) nonlocal key, package self = _args.pop(0) if _args else None ndx = perllib.fetch_perl_global(f"{_bn(package)}::_ndx_map" + "_h").get( key ) if len(_args): self[perllib.int_(ndx)] = _args[0] return self[perllib.int_(ndx)] return _f74template perllib.store_perl_global( f"{_bn(package)}::{_bn(key)}", _f74(key), infer_suffix=True ) elif _str(val) == "@" or _str(val) == "*@": if base_type == "HASH": def _f85(key): def _f85template(*_args): _args = list(_args) nonlocal key self = _args.pop(0) if _args else None if len(_args): if perllib.refs(_args[0]) == "ARRAY": self[_str(key)] = _args[0] elif len(_args) == 1: return self[_str(key)][perllib.int_(_args[0])] else: self[_str(key)][perllib.int_(_args[0])] = _args[1] return _args[1] return self.get(_str(key)) return _f85template perllib.store_perl_global( f"{_bn(package)}::{_bn(key)}", _f85(key), infer_suffix=True ) else: def _f100(key): def _f100template(*_args): _args = list(_args) nonlocal key, package self = _args.pop(0) if _args else None ndx = perllib.fetch_perl_global(f"{_bn(package)}::_ndx_map" + "_h").get( key ) if len(_args): if perllib.refs(_args[0]) == "ARRAY": self[perllib.int_(ndx)] = _args[0] elif len(_args) == 1: return self[perllib.int_(ndx)][perllib.int_(_args[0])] else: self[perllib.int_(ndx)][perllib.int_(_args[0])] = _args[1] return _args[1] return self[perllib.int_(ndx)] return _f100template perllib.store_perl_global( f"{_bn(package)}::{_bn(key)}", _f100(key), infer_suffix=True ) elif _str(val) == "%" or _str(val) == "*%": if base_type == "HASH": def _f118(key): def _f118template(*_args): _args = list(_args) nonlocal key self = _args.pop(0) if _args else None if len(_args): if perllib.refs(_args[0]) == "HASH": self[_str(key)] = _args[0] elif len(_args) == 1: return self[_str(key)].get(_str(_args[0])) else: self[_str(key)][_str(_args[0])] = _args[1] return _args[1] return self.get(_str(key)) return _f118template perllib.store_perl_global( f"{_bn(package)}::{_bn(key)}", _f118(key), infer_suffix=True ) else: def _f133(key): def _f133template(*_args): _args = list(_args) nonlocal key, package self = _args.pop(0) if _args else None ndx = perllib.fetch_perl_global(f"{_bn(package)}::_ndx_map" + "_h").get( key ) if len(_args): if perllib.refs(_args[0]) == "HASH": self[perllib.int_(ndx)] = _args[0] elif len(_args) == 1: return self[perllib.int_(ndx)].get(_str(_args[0])) else: self[perllib.int_(ndx)][_str(_args[0])] = _args[1] return _args[1] return self[perllib.int_(ndx)] return _f133template perllib.store_perl_global( f"{_bn(package)}::{_bn(key)}", _f133(key), infer_suffix=True ) else: if base_type == "HASH": def _f151(key): def _f151template(*_args): _args = list(_args) nonlocal key self = _args.pop(0) if _args else None if len(_args): self[_str(key)] = _args[0] return self.get(_str(key)) return _f151template perllib.store_perl_global( f"{_bn(package)}::{_bn(key)}", _f151(key), infer_suffix=True ) else: def _f159(key): def _f159template(*_args): _args = list(_args) nonlocal key, package self = _args.pop(0) if _args else None ndx = perllib.fetch_perl_global(f"{_bn(package)}::_ndx_map" + "_h").get( key ) if len(_args): self[perllib.int_(ndx)] = _args[0] return self[perllib.int_(ndx)] return _f159template perllib.store_perl_global( f"{_bn(package)}::{_bn(key)}", _f159(key), infer_suffix=True )
Class.Struct.struct_ = struct_
[docs]def import_(*_args): _args = list(_args) class_ = _args[0] callpkg = perllib.caller_s() perllib.store_perl_global(f"{_bn(callpkg)}::struct", Class.Struct.struct_, infer_suffix=True) if len(_args) > 2: (_args.pop(0) if _args else None) __goto_sub__ = True return struct_(*_args)
Class.Struct.import_ = import_ builtins.__PACKAGE__ = "Class.Struct" # SKIPPED: require Exporter; Class.Struct.ISA_a = "Exporter".split() Class.Struct.EXPORT_a = "struct".split()