<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _store_in_native_memory(self, data, data_type, addr=None):
 """ Store in native memory. :param data: Either a single value or a list. Lists get interpreted as an array. :param data_type: Java type of the element(s). :param addr: Native store address. If not set, native memory is allocated. :return: Native addr of the stored data. """

        # check if addr is symbolic
        if addr is not None and self.state.solver.symbolic(addr):
            raise NotImplementedError('Symbolic addresses are not supported.')
        # lookup native size of the type
        type_size = ArchSoot.sizeof[data_type]
        native_memory_endness = self.state.arch.memory_endness
        # store single value
        if isinstance(data, int):
            if addr is None:
                addr = self._allocate_native_memory(size=type_size//8)
            value = self.state.solver.BVV(data, type_size)
            self.state.memory.store(addr, value, endness=native_memory_endness)
        # store array
        elif isinstance(data, list):
            if addr is None:
                addr = self._allocate_native_memory(size=type_size*len(data)//8)
            for idx, value in enumerate(data):
                memory_addr = addr+idx*type_size//8
                self.state.memory.store(memory_addr, value, endness=native_memory_endness)
        # return native addr
        return addr