* vectors.c (scm_vector_length, scm_vector_ref, scm_vector_set_x):

Turned into primitive generics.
This commit is contained in:
Mikael Djurfeldt 1999-12-09 22:35:18 +00:00
commit 9eb8500a86

View file

@ -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;
}