pub unsafe fn define<T: AsRef<str>>(
        name: T,
        elem_ty: LLVMTypeRef,
        context: LLVMContextRef,
        module: LLVMModuleRef,
    ) -> Vector {
        let c_name = CString::new(name.as_ref()).unwrap();
        let mut layout = [LLVMPointerType(elem_ty, 0), LLVMInt64TypeInContext(context)];
        let vector = LLVMStructCreateNamed(context, c_name.as_ptr());
        LLVMStructSetBody(vector, layout.as_mut_ptr(), layout.len() as u32, 0);
        Vector {
            name: c_name.into_string().unwrap(),
            context,
            module,
            vector_ty: vector,
            elem_ty,
            new: None,
            clone: None,
            at: None,
            vat: None,
            size: None,
            slice: None,
            extend: None,
        }
    }
Define a new vector type with the given element type.

This function only inserts a definition for the vector, but does not generate any new code.
weld/src/codegen/llvm2/vector.rs