blob: 6ff653a08f281a09c54786971a96b8165bf59765 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
#include <u.h>
#include <libc.h>
#include <bio.h>
#include "apl9.h"
Array *
fnCatenateFirst(Array *left, Array *right)
{
/* not even close to being right, but it works for stranding :) */
if(left->rank == 0)
left = fnRavel(left);
if(right->rank == 0)
right = fnRavel(right);
print("Catenating: %S and %S\n", pparray(left), pparray(right));
/* assume two vectors of same type for now */
Array *res = mkarray(left->type, 1, left->size+right->size);
res->shape[0] = left->shape[0] + right->shape[0];
memcpy(res->rawdata, left->rawdata, datasizes[res->type]*left->size);
memcpy(res->rawdata+datasizes[res->type]*left->size, right->rawdata, datasizes[res->type]*right->size);
return res;
}
Array *
fnNest(Array *right)
{
if(simplearray(right))
return fnEnclose(right);
else
return right;
}
Array *
fnEnclose(Array *right)
{
if(simplescalar(right))
return right;
else{
Array *res = mkarray(AtypeArray, 0, 1);
res->arraydata[0] = right;
return res;
}
}
Array *
fnRavel(Array *right)
{
Array *res = duparray(right);
res->rank = 1;
res->shape = realloc(res->shape, sizeof(int) * 1);
res->shape[0] = res->size;
return res;
}
|