forked from ImortisInglorian/fbrtLib
-
Notifications
You must be signed in to change notification settings - Fork 1
/
array_lbound.bas
39 lines (30 loc) · 1.25 KB
/
array_lbound.bas
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
/' lbound function '/
#include "fb.bi"
/' Returns the lbound of the given dimension, or 0 if the given dimension
doesn't exist. Together with ubound() returning -1 in such cases, we'll have
the lbound > ubound situation to detect unallocated arrays.
Using lbound == 0 for unallocated arrays is also good because it allows FB
code such as
@array(lbound(array)) <> NULL
to keep working.
Special case: lbound( a, 0 ) always returns 1 (the lbound of the dimTB).
Together with ubound() returning the dimension count or 0, we'll also have
the lbound > ubound situation here for unallocated arrays.
Note: The dimension count can be set (in the descriptor) even for unallocated
arrays, as it's fixed and determines the descriptor size. '/
extern "C"
function fb_ArrayLBound FBCALL ( array as FBARRAY ptr, dimension as ssize_t ) as ssize_t
/' given dimension is 1-based '/
dimension -= 1
/' Querying dimTB's lbound? '/
if ( dimension = -1 ) then
return 1
end if
/' Querying dimension's lbound. '/
/' unallocated array or out-of-bound dimension? '/
if ( (array->data = NULL) or (dimension < 0) or (cast(size_t, dimension) >= array->dimensions) ) then
return 0
end if
return array->dimTB(dimension).lbound
end function
end extern