/[guile]/guile/guile-core/libguile/vectors.c
ViewVC logotype

Diff of /guile/guile-core/libguile/vectors.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.63 by ttn, Thu Mar 14 03:47:43 2002 UTC revision 1.64 by xxhanwen, Sat Jul 20 14:08:34 2002 UTC
# Line 101  SCM_DEFINE (scm_vector, "vector", 0, 0, Line 101  SCM_DEFINE (scm_vector, "vector", 0, 0,
101       while the vector is being created. */       while the vector is being created. */
102    SCM_VALIDATE_LIST_COPYLEN (1, l, i);    SCM_VALIDATE_LIST_COPYLEN (1, l, i);
103    res = scm_c_make_vector (i, SCM_UNSPECIFIED);    res = scm_c_make_vector (i, SCM_UNSPECIFIED);
104    data = SCM_VELTS (res);  
105      /*
106        this code doesn't alloc. -- accessing RES is safe.
107      */
108      data = SCM_WRITABLE_VELTS (res);
109    while (!SCM_NULL_OR_NIL_P (l))    while (!SCM_NULL_OR_NIL_P (l))
110      {      {
111        *data++ = SCM_CAR (l);        *data++ = SCM_CAR (l);
# Line 165  scm_vector_set_x (SCM v, SCM k, SCM obj) Line 169  scm_vector_set_x (SCM v, SCM k, SCM obj)
169                  g_vector_set_x, scm_list_3 (v, k, obj),                  g_vector_set_x, scm_list_3 (v, k, obj),
170                  SCM_ARG2, s_vector_set_x);                  SCM_ARG2, s_vector_set_x);
171    SCM_ASSERT_RANGE (2, k, SCM_INUM (k) < SCM_VECTOR_LENGTH (v) && SCM_INUM (k) >= 0);    SCM_ASSERT_RANGE (2, k, SCM_INUM (k) < SCM_VECTOR_LENGTH (v) && SCM_INUM (k) >= 0);
172    SCM_VELTS(v)[(long) SCM_INUM(k)] = obj;    SCM_VECTOR_SET (v, (long) SCM_INUM(k), obj);
173    return SCM_UNSPECIFIED;    return SCM_UNSPECIFIED;
174  }  }
175  #undef FUNC_NAME  #undef FUNC_NAME
# Line 235  SCM_DEFINE (scm_vector_to_list, "vector- Line 239  SCM_DEFINE (scm_vector_to_list, "vector-
239  {  {
240    SCM res = SCM_EOL;    SCM res = SCM_EOL;
241    long i;    long i;
242    SCM *data;    SCM const *data;
243    SCM_VALIDATE_VECTOR (1,v);    SCM_VALIDATE_VECTOR (1, v);
244    data = SCM_VELTS(v);    data = SCM_VELTS(v);
245    for(i = SCM_VECTOR_LENGTH(v)-1;i >= 0;i--) res = scm_cons(data[i], res);    for(i = SCM_VECTOR_LENGTH(v)-1;i >= 0;i--) res = scm_cons(data[i], res);
246    return res;    return res;
# Line 251  SCM_DEFINE (scm_vector_fill_x, "vector-f Line 255  SCM_DEFINE (scm_vector_fill_x, "vector-f
255  #define FUNC_NAME s_scm_vector_fill_x  #define FUNC_NAME s_scm_vector_fill_x
256  {  {
257    register long i;    register long i;
   register SCM *data;  
258    SCM_VALIDATE_VECTOR (1, v);    SCM_VALIDATE_VECTOR (1, v);
259    data = SCM_VELTS (v);  
260    for(i = SCM_VECTOR_LENGTH (v) - 1; i >= 0; i--)    for(i = SCM_VECTOR_LENGTH (v) - 1; i >= 0; i--)
261      data[i] = fill;      SCM_VECTOR_SET(v, i, fill);
262    return SCM_UNSPECIFIED;    return SCM_UNSPECIFIED;
263  }  }
264  #undef FUNC_NAME  #undef FUNC_NAME
# Line 287  SCM_DEFINE (scm_vector_move_left_x, "vec Line 290  SCM_DEFINE (scm_vector_move_left_x, "vec
290    long j;    long j;
291    long e;    long e;
292        
293    SCM_VALIDATE_VECTOR (1,vec1);    SCM_VALIDATE_VECTOR (1, vec1);
294    SCM_VALIDATE_INUM_COPY (2,start1,i);    SCM_VALIDATE_INUM_COPY (2, start1, i);
295    SCM_VALIDATE_INUM_COPY (3,end1,e);    SCM_VALIDATE_INUM_COPY (3, end1, e);
296    SCM_VALIDATE_VECTOR (4,vec2);    SCM_VALIDATE_VECTOR (4, vec2);
297    SCM_VALIDATE_INUM_COPY (5,start2,j);    SCM_VALIDATE_INUM_COPY (5, start2, j);
298    SCM_ASSERT_RANGE (2, start1, i <= SCM_VECTOR_LENGTH (vec1) && i >= 0);    SCM_ASSERT_RANGE (2, start1, i <= SCM_VECTOR_LENGTH (vec1) && i >= 0);
299    SCM_ASSERT_RANGE (5, start2, j <= SCM_VECTOR_LENGTH (vec2) && j >= 0);    SCM_ASSERT_RANGE (5, start2, j <= SCM_VECTOR_LENGTH (vec2) && j >= 0);
300    SCM_ASSERT_RANGE (3, end1, e <= SCM_VECTOR_LENGTH (vec1) && e >= 0);    SCM_ASSERT_RANGE (3, end1, e <= SCM_VECTOR_LENGTH (vec1) && e >= 0);
301    SCM_ASSERT_RANGE (5, start2, e-i+j <= SCM_VECTOR_LENGTH (vec2));    SCM_ASSERT_RANGE (5, start2, e-i+j <= SCM_VECTOR_LENGTH (vec2));
302    while (i<e) SCM_VELTS (vec2)[j++] = SCM_VELTS (vec1)[i++];  
303      while (i<e)
304        SCM_VECTOR_SET (vec2, j++, SCM_VELTS (vec1)[i++]);
305      
306    return SCM_UNSPECIFIED;    return SCM_UNSPECIFIED;
307  }  }
308  #undef FUNC_NAME  #undef FUNC_NAME
# Line 316  SCM_DEFINE (scm_vector_move_right_x, "ve Line 322  SCM_DEFINE (scm_vector_move_right_x, "ve
322    long j;    long j;
323    long e;    long e;
324    
325    SCM_VALIDATE_VECTOR (1,vec1);    SCM_VALIDATE_VECTOR (1, vec1);
326    SCM_VALIDATE_INUM_COPY (2,start1,i);    SCM_VALIDATE_INUM_COPY (2, start1, i);
327    SCM_VALIDATE_INUM_COPY (3,end1,e);    SCM_VALIDATE_INUM_COPY (3, end1, e);
328    SCM_VALIDATE_VECTOR (4,vec2);    SCM_VALIDATE_VECTOR (4, vec2);
329    SCM_VALIDATE_INUM_COPY (5,start2,j);    SCM_VALIDATE_INUM_COPY (5, start2, j);
330    SCM_ASSERT_RANGE (2, start1, i <= SCM_VECTOR_LENGTH (vec1) && i >= 0);    SCM_ASSERT_RANGE (2, start1, i <= SCM_VECTOR_LENGTH (vec1) && i >= 0);
331    SCM_ASSERT_RANGE (5, start2, j <= SCM_VECTOR_LENGTH (vec2) && j >= 0);    SCM_ASSERT_RANGE (5, start2, j <= SCM_VECTOR_LENGTH (vec2) && j >= 0);
332    SCM_ASSERT_RANGE (3, end1, e <= SCM_VECTOR_LENGTH (vec1) && e >= 0);    SCM_ASSERT_RANGE (3, end1, e <= SCM_VECTOR_LENGTH (vec1) && e >= 0);
333    j = e - i + j;    j = e - i + j;
334    SCM_ASSERT_RANGE (5, start2, j <= SCM_VECTOR_LENGTH (vec2));    SCM_ASSERT_RANGE (5, start2, j <= SCM_VECTOR_LENGTH (vec2));
335    while (i < e)    while (i < e)
336      SCM_VELTS (vec2)[--j] = SCM_VELTS (vec1)[--e];      SCM_VECTOR_SET (vec2, --j, SCM_VELTS (vec1)[--e]);
337    return SCM_UNSPECIFIED;    return SCM_UNSPECIFIED;
338  }  }
339  #undef FUNC_NAME  #undef FUNC_NAME

Legend:
Removed from v.1.63  
changed lines
  Added in v.1.64

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26