MCPcopy Create free account
hub / github.com/battlecode/battlecode-2018 / StructWrapper

Class StructWrapper

bindings/frankenswig/struct.py:106–316  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

104 self.method(boolean.type, "eq", [Var(self.type.ref(), "other")], docs=f"Compare two {self.type.to_python()}s for deep equality.", pyname="__eq__", self_ref=True)
105
106class StructWrapper(DeriveMixins):
107 def __init__(self, program, name, docs='', module=None):
108 self.program = program
109 if module is None:
110 self.module = program.module
111 else:
112 self.module = module
113 self.name = name
114 self.c_name = f'{self.program.module}_{sanitize_rust_name(self.name)}'
115 self.members = []
116 self.member_docs = []
117 self.methods = []
118 self.getters = []
119 self.setters = []
120 self.type = StructType(self)
121 self.constructor_ = Function(
122 self.type,
123 f'new_{self.c_name}',
124 [],
125 'set_error(SwigError::Type, "Type cannot be constructed".into());\n0 as *mut _',
126 docs=docs
127 )
128 self.docs = docs
129
130 pre, arg, post = self.type.mut_ref().wrap_c_value('this')
131 self.destructor = Function(void.type, f'delete_{self.c_name}',
132 [Var(self.type, 'this')],
133 pre + f'\nunsafe {{ Box::from_raw({arg}); }}' + post
134 )
135 self.pyextra_ = []
136
137 def constructor(self, rust_method, args, docs='', result=False):
138 method = f'{self.module}::{self.name}::{rust_method}'
139 ret = self.type.result() if result else self.type
140
141 self.constructor_ = Function(
142 ret,
143 f'new_{self.c_name}',
144 args,
145 make_safe_call(ret, method, args),
146 docs=docs
147 )
148
149 return self
150
151 def pyextra(self, value):
152 self.pyextra_.append(value)
153
154 def member(self, type, name, docs=''):
155 self.members.append(Var(type,name))
156 self.member_docs.append(docs)
157
158 pre, arg, post = self.type.mut_ref().wrap_c_value('this')
159 arg = '(' + arg + ')'
160
161 getter = Method(type, self.c_name, f"{name}_get", [Var(self.type, 'this')],
162 pre +
163 '\nlet result = ' + type.unwrap_rust_value(arg + '.' + name + '.clone()') + ';\n' +

Callers 1

structMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected