* vectors.c (scm_vector_length, scm_vector_ref, scm_vector_set_x):
Turned into primitive generics.
This commit is contained in:
parent
aee8ca3fcb
commit
9eb8500a86
1 changed files with 17 additions and 9 deletions
|
|
@ -128,13 +128,14 @@ scm_vector_p(x)
|
|||
return SCM_VECTORP(x) ? SCM_BOOL_T : SCM_BOOL_F;
|
||||
}
|
||||
|
||||
SCM_PROC(s_vector_length, "vector-length", 1, 0, 0, scm_vector_length);
|
||||
SCM_GPROC(s_vector_length, "vector-length", 1, 0, 0, scm_vector_length, g_vector_length);
|
||||
|
||||
SCM
|
||||
scm_vector_length(v)
|
||||
SCM v;
|
||||
{
|
||||
SCM_ASSERT(SCM_NIMP(v) && SCM_VECTORP(v), v, SCM_ARG1, s_vector_length);
|
||||
SCM_GASSERT1(SCM_NIMP(v) && SCM_VECTORP(v),
|
||||
g_vector_length, v, SCM_ARG1, s_vector_length);
|
||||
return SCM_MAKINUM(SCM_LENGTH(v));
|
||||
}
|
||||
|
||||
|
|
@ -156,19 +157,21 @@ scm_vector(l)
|
|||
return res;
|
||||
}
|
||||
|
||||
SCM_PROC(s_vector_ref, "vector-ref", 2, 0, 0, scm_vector_ref);
|
||||
SCM_GPROC(s_vector_ref, "vector-ref", 2, 0, 0, scm_vector_ref, g_vector_ref);
|
||||
|
||||
SCM
|
||||
scm_vector_ref (SCM v, SCM k)
|
||||
{
|
||||
SCM_ASSERT (SCM_NIMP (v) && SCM_VECTORP (v), v, SCM_ARG1, s_vector_ref);
|
||||
SCM_ASSERT (SCM_INUMP (k), k, SCM_ARG2, s_vector_ref);
|
||||
SCM_GASSERT2 (SCM_NIMP (v) && SCM_VECTORP (v),
|
||||
g_vector_ref, v, k, SCM_ARG1, s_vector_ref);
|
||||
SCM_GASSERT2 (SCM_INUMP (k),
|
||||
g_vector_ref, v, k, SCM_ARG2, s_vector_ref);
|
||||
SCM_ASSERT (SCM_INUM (k) < SCM_LENGTH (v) && SCM_INUM (k) >= 0,
|
||||
k, SCM_OUTOFRANGE, s_vector_ref);
|
||||
return SCM_VELTS (v)[(long) SCM_INUM (k)];
|
||||
}
|
||||
|
||||
SCM_PROC(s_vector_set_x, "vector-set!", 3, 0, 0, scm_vector_set_x);
|
||||
SCM_GPROC(s_vector_set_x, "vector-set!", 3, 0, 0, scm_vector_set_x, g_vector_set_x);
|
||||
|
||||
SCM
|
||||
scm_vector_set_x(v, k, obj)
|
||||
|
|
@ -176,9 +179,14 @@ scm_vector_set_x(v, k, obj)
|
|||
SCM k;
|
||||
SCM obj;
|
||||
{
|
||||
SCM_ASSERT(SCM_NIMP(v) && SCM_VECTORP(v), v, SCM_ARG1, s_vector_set_x);
|
||||
SCM_ASSERT(SCM_INUMP(k), k, SCM_ARG2, s_vector_set_x);
|
||||
SCM_ASSERT((SCM_INUM(k) < SCM_LENGTH(v)) && (SCM_INUM(k) >= 0), k, SCM_OUTOFRANGE, s_vector_set_x);
|
||||
SCM_GASSERTn (SCM_NIMP(v) && SCM_VECTORP(v),
|
||||
g_vector_set_x, SCM_LIST3 (v, k, obj),
|
||||
SCM_ARG1, s_vector_set_x);
|
||||
SCM_GASSERTn (SCM_INUMP(k),
|
||||
g_vector_set_x, SCM_LIST3 (v, k, obj),
|
||||
SCM_ARG2, s_vector_set_x);
|
||||
SCM_ASSERT ((SCM_INUM(k) < SCM_LENGTH(v)) && (SCM_INUM(k) >= 0),
|
||||
k, SCM_OUTOFRANGE, s_vector_set_x);
|
||||
SCM_VELTS(v)[((long) SCM_INUM(k))] = obj;
|
||||
return obj;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue