root/ext/uvector/gauche/uvector.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. ScmUVector
  2. ScmS8Vector
  3. ScmU8Vector
  4. ScmS16Vector
  5. ScmU16Vector
  6. ScmS32Vector
  7. ScmU32Vector
  8. ScmS64Vector
  9. ScmU64Vector
  10. ScmF32Vector
  11. ScmF64Vector

   1 /*
   2  * uvector - uniform (homogeneous) numeric vector types (SRFI-4)
   3  *
   4  *   Copyright (c) 1999-2004 Shiro Kawai, All rights reserved.
   5  * 
   6  *   Redistribution and use in source and binary forms, with or without
   7  *   modification, are permitted provided that the following conditions
   8  *   are met:
   9  * 
  10  *   1. Redistributions of source code must retain the above copyright
  11  *      notice, this list of conditions and the following disclaimer.
  12  *
  13  *   2. Redistributions in binary form must reproduce the above copyright
  14  *      notice, this list of conditions and the following disclaimer in the
  15  *      documentation and/or other materials provided with the distribution.
  16  *
  17  *   3. Neither the name of the authors nor the names of its contributors
  18  *      may be used to endorse or promote products derived from this
  19  *      software without specific prior written permission.
  20  *
  21  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  22  *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  23  *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  24  *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  25  *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  26  *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
  27  *   TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  28  *   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  29  *   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  30  *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  31  *   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  32  *
  33  *  This file is automatically generated.  DO NOT EDIT.
  34  *  $Id: uvector.h.tmpl,v 1.3 2004/11/11 12:14:43 shirok Exp $
  35  */
  36 
  37 #ifndef GAUCHE_UVECT_H
  38 #define GAUCHE_UVECT_H
  39 
  40 #include <gauche.h>
  41 
  42 /*
  43  * This header file is for other extension modules which need
  44  * to access uniform vectors in C level.
  45  */
  46 
  47 /*
  48  * Common structure for generic uvector operation
  49  */
  50 typedef struct ScmUVectorRec {
  51     SCM_HEADER;
  52     unsigned int immutable : 1;
  53     int size : (SIZEOF_INT*CHAR_BIT-1);
  54     void *owner;
  55     void *elements;
  56 } ScmUVector;
  57 
  58 SCM_CLASS_DECL(Scm_UVectorClass);
  59 #define SCM_CLASS_UVECTOR         (&Scm_UVectorClass)
  60 #define SCM_UVECTOR(obj)          ((ScmUVector*)(obj))
  61 #define SCM_UVECTORP(obj)         Scm_TypeP(obj, SCM_CLASS_UVECTOR)
  62 #define SCM_UVECTOR_SIZE(obj)     (SCM_UVECTOR(obj)->size)
  63 #define SCM_UVECTOR_IMMUTABLE_P(obj) (SCM_UVECTOR(obj)->immutable)
  64 #define SCM_UVECTOR_OWNER(obj)    (SCM_UVECTOR(obj)->owner)
  65 #define SCM_UVECTOR_ELEMENTS(obj) (SCM_UVECTOR(obj)->elements)
  66 
  67 #define SCM_UVECTOR_CHECK_MUTABLE(obj)                 \
  68   do { if (SCM_UVECTOR_IMMUTABLE_P(obj)) {             \
  69     Scm_Error("uniform vector is immutable: %S", obj); \
  70   }} while (0)
  71 
  72 extern int Scm_UVectorElementSize(ScmClass *klass);
  73 extern ScmObj Scm_MakeUVector(ScmClass *klass, int size, void *init);
  74 extern ScmObj Scm_MakeUVectorFull(ScmClass *klass, int size, void *init,
  75                                   int immutablep, void *owner);
  76 
  77 extern ScmObj Scm_UVectorAlias(ScmClass *klass, ScmUVector *v,
  78                                int start, int end);
  79 
  80 extern ScmObj Scm_UVectorCopy(ScmUVector *v, int start, int end);
  81 extern ScmObj Scm_UVectorSwapBytes(ScmUVector *v);
  82 extern ScmObj Scm_UVectorSwapBytesX(ScmUVector *v);
  83 
  84 extern ScmObj Scm_ReadBlockX(ScmUVector *v, ScmPort *port,
  85                              int start, int end, ScmObj endian);
  86 extern ScmObj Scm_WriteBlock(ScmUVector *v, ScmPort *port,
  87                              int start, int end, ScmObj endian);
  88 
  89 /* S8Vector */
  90 
  91 typedef struct ScmS8VectorRec {
  92     SCM_HEADER;
  93     unsigned int immutable : 1;
  94     int size : (SIZEOF_INT*CHAR_BIT-1);
  95     void *owner;
  96     signed char *elements;
  97 } ScmS8Vector;
  98 
  99 SCM_CLASS_DECL(Scm_S8VectorClass);
 100 #define SCM_CLASS_S8VECTOR  (&Scm_S8VectorClass)
 101 
 102 #define SCM_S8VECTOR(obj)        ((ScmS8Vector*)(obj))
 103 #define SCM_S8VECTORP(obj)       SCM_XTYPEP(obj, SCM_CLASS_S8VECTOR)
 104 #define SCM_S8VECTOR_SIZE(obj)   (SCM_S8VECTOR(obj)->size)
 105 #define SCM_S8VECTOR_ELEMENTS(obj) (SCM_S8VECTOR(obj)->elements)
 106 
 107 extern ScmObj Scm_MakeS8Vector(int size, signed char fill);
 108 extern ScmObj Scm_MakeS8VectorFromArray(int size, const signed char array[]);
 109 extern ScmObj Scm_MakeS8VectorFromArrayShared(int size, signed char array[]);
 110 extern ScmObj Scm_S8VectorFill(ScmS8Vector *vec, signed char fill, int, int);
 111 extern ScmObj Scm_S8VectorRef(ScmS8Vector *vec, int index, ScmObj fallback);
 112 extern ScmObj Scm_S8VectorSet(ScmS8Vector *vec, int index, ScmObj val, int clamp);
 113 extern ScmObj Scm_S8VectorToList(ScmS8Vector *vec, int start, int end);
 114 extern ScmObj Scm_ListToS8Vector(ScmObj list, int clamp);
 115 extern ScmObj Scm_S8VectorCopy(ScmS8Vector *vec, int start, int end);
 116 extern ScmObj Scm_S8VectorCopyX(ScmS8Vector *dst, int dstart,
 117                                   ScmS8Vector *src, int sstart, int send);
 118 extern ScmObj Scm_S8VectorToVector(ScmS8Vector *vec, int start, int end);
 119 extern ScmObj Scm_VectorToS8Vector(ScmVector *vec, int start, int end, int clamp);
 120 
 121 /* arithmetics */
 122 extern ScmObj Scm_S8VectorAdd(ScmS8Vector *s0, ScmObj s1, int clamp);
 123 extern ScmObj Scm_S8VectorAddX(ScmS8Vector *s0, ScmObj s1, int clamp);
 124 extern ScmObj Scm_S8VectorSub(ScmS8Vector *s0, ScmObj s1, int clamp);
 125 extern ScmObj Scm_S8VectorSubX(ScmS8Vector *s0, ScmObj s1, int clamp);
 126 extern ScmObj Scm_S8VectorMul(ScmS8Vector *s0, ScmObj s1, int clamp);
 127 extern ScmObj Scm_S8VectorMulX(ScmS8Vector *s0, ScmObj s1, int clamp);
 128 extern ScmObj Scm_S8VectorDiv(ScmS8Vector *s0, ScmObj s1, int clamp);
 129 extern ScmObj Scm_S8VectorDivX(ScmS8Vector *s0, ScmObj s1, int clamp);
 130 
 131 extern ScmObj Scm_S8VectorAnd(ScmS8Vector *s0, ScmObj s1);
 132 extern ScmObj Scm_S8VectorAndX(ScmS8Vector *s0, ScmObj s1);
 133 extern ScmObj Scm_S8VectorIor(ScmS8Vector *s0, ScmObj s1);
 134 extern ScmObj Scm_S8VectorIorX(ScmS8Vector *s0, ScmObj s1);
 135 extern ScmObj Scm_S8VectorXor(ScmS8Vector *s0, ScmObj s1);
 136 extern ScmObj Scm_S8VectorXorX(ScmS8Vector *s0, ScmObj s1);
 137 
 138 extern ScmObj Scm_S8VectorDotProd(ScmS8Vector *v0, ScmObj v1);
 139 extern ScmObj Scm_S8VectorRangeCheck(ScmS8Vector *v0, ScmObj min, ScmObj max);
 140 extern ScmObj Scm_S8VectorClamp(ScmS8Vector *v0, ScmObj min, ScmObj max);
 141 extern ScmObj Scm_S8VectorClampX(ScmS8Vector *v0, ScmObj min, ScmObj max);
 142 
 143 extern ScmObj Scm_S8VectorSwapBytes(ScmS8Vector *v0);
 144 extern ScmObj Scm_S8VectorSwapBytesX(ScmS8Vector *v0);
 145 
 146 /* U8Vector */
 147 
 148 typedef struct ScmU8VectorRec {
 149     SCM_HEADER;
 150     unsigned int immutable : 1;
 151     int size : (SIZEOF_INT*CHAR_BIT-1);
 152     void *owner;
 153     unsigned char *elements;
 154 } ScmU8Vector;
 155 
 156 SCM_CLASS_DECL(Scm_U8VectorClass);
 157 #define SCM_CLASS_U8VECTOR  (&Scm_U8VectorClass)
 158 
 159 #define SCM_U8VECTOR(obj)        ((ScmU8Vector*)(obj))
 160 #define SCM_U8VECTORP(obj)       SCM_XTYPEP(obj, SCM_CLASS_U8VECTOR)
 161 #define SCM_U8VECTOR_SIZE(obj)   (SCM_U8VECTOR(obj)->size)
 162 #define SCM_U8VECTOR_ELEMENTS(obj) (SCM_U8VECTOR(obj)->elements)
 163 
 164 extern ScmObj Scm_MakeU8Vector(int size, unsigned char fill);
 165 extern ScmObj Scm_MakeU8VectorFromArray(int size, const unsigned char array[]);
 166 extern ScmObj Scm_MakeU8VectorFromArrayShared(int size, unsigned char array[]);
 167 extern ScmObj Scm_U8VectorFill(ScmU8Vector *vec, unsigned char fill, int, int);
 168 extern ScmObj Scm_U8VectorRef(ScmU8Vector *vec, int index, ScmObj fallback);
 169 extern ScmObj Scm_U8VectorSet(ScmU8Vector *vec, int index, ScmObj val, int clamp);
 170 extern ScmObj Scm_U8VectorToList(ScmU8Vector *vec, int start, int end);
 171 extern ScmObj Scm_ListToU8Vector(ScmObj list, int clamp);
 172 extern ScmObj Scm_U8VectorCopy(ScmU8Vector *vec, int start, int end);
 173 extern ScmObj Scm_U8VectorCopyX(ScmU8Vector *dst, int dstart,
 174                                   ScmU8Vector *src, int sstart, int send);
 175 extern ScmObj Scm_U8VectorToVector(ScmU8Vector *vec, int start, int end);
 176 extern ScmObj Scm_VectorToU8Vector(ScmVector *vec, int start, int end, int clamp);
 177 
 178 /* arithmetics */
 179 extern ScmObj Scm_U8VectorAdd(ScmU8Vector *s0, ScmObj s1, int clamp);
 180 extern ScmObj Scm_U8VectorAddX(ScmU8Vector *s0, ScmObj s1, int clamp);
 181 extern ScmObj Scm_U8VectorSub(ScmU8Vector *s0, ScmObj s1, int clamp);
 182 extern ScmObj Scm_U8VectorSubX(ScmU8Vector *s0, ScmObj s1, int clamp);
 183 extern ScmObj Scm_U8VectorMul(ScmU8Vector *s0, ScmObj s1, int clamp);
 184 extern ScmObj Scm_U8VectorMulX(ScmU8Vector *s0, ScmObj s1, int clamp);
 185 extern ScmObj Scm_U8VectorDiv(ScmU8Vector *s0, ScmObj s1, int clamp);
 186 extern ScmObj Scm_U8VectorDivX(ScmU8Vector *s0, ScmObj s1, int clamp);
 187 
 188 extern ScmObj Scm_U8VectorAnd(ScmU8Vector *s0, ScmObj s1);
 189 extern ScmObj Scm_U8VectorAndX(ScmU8Vector *s0, ScmObj s1);
 190 extern ScmObj Scm_U8VectorIor(ScmU8Vector *s0, ScmObj s1);
 191 extern ScmObj Scm_U8VectorIorX(ScmU8Vector *s0, ScmObj s1);
 192 extern ScmObj Scm_U8VectorXor(ScmU8Vector *s0, ScmObj s1);
 193 extern ScmObj Scm_U8VectorXorX(ScmU8Vector *s0, ScmObj s1);
 194 
 195 extern ScmObj Scm_U8VectorDotProd(ScmU8Vector *v0, ScmObj v1);
 196 extern ScmObj Scm_U8VectorRangeCheck(ScmU8Vector *v0, ScmObj min, ScmObj max);
 197 extern ScmObj Scm_U8VectorClamp(ScmU8Vector *v0, ScmObj min, ScmObj max);
 198 extern ScmObj Scm_U8VectorClampX(ScmU8Vector *v0, ScmObj min, ScmObj max);
 199 
 200 extern ScmObj Scm_U8VectorSwapBytes(ScmU8Vector *v0);
 201 extern ScmObj Scm_U8VectorSwapBytesX(ScmU8Vector *v0);
 202 
 203 /* S16Vector */
 204 
 205 typedef struct ScmS16VectorRec {
 206     SCM_HEADER;
 207     unsigned int immutable : 1;
 208     int size : (SIZEOF_INT*CHAR_BIT-1);
 209     void *owner;
 210     short *elements;
 211 } ScmS16Vector;
 212 
 213 SCM_CLASS_DECL(Scm_S16VectorClass);
 214 #define SCM_CLASS_S16VECTOR  (&Scm_S16VectorClass)
 215 
 216 #define SCM_S16VECTOR(obj)        ((ScmS16Vector*)(obj))
 217 #define SCM_S16VECTORP(obj)       SCM_XTYPEP(obj, SCM_CLASS_S16VECTOR)
 218 #define SCM_S16VECTOR_SIZE(obj)   (SCM_S16VECTOR(obj)->size)
 219 #define SCM_S16VECTOR_ELEMENTS(obj) (SCM_S16VECTOR(obj)->elements)
 220 
 221 extern ScmObj Scm_MakeS16Vector(int size, short fill);
 222 extern ScmObj Scm_MakeS16VectorFromArray(int size, const short array[]);
 223 extern ScmObj Scm_MakeS16VectorFromArrayShared(int size, short array[]);
 224 extern ScmObj Scm_S16VectorFill(ScmS16Vector *vec, short fill, int, int);
 225 extern ScmObj Scm_S16VectorRef(ScmS16Vector *vec, int index, ScmObj fallback);
 226 extern ScmObj Scm_S16VectorSet(ScmS16Vector *vec, int index, ScmObj val, int clamp);
 227 extern ScmObj Scm_S16VectorToList(ScmS16Vector *vec, int start, int end);
 228 extern ScmObj Scm_ListToS16Vector(ScmObj list, int clamp);
 229 extern ScmObj Scm_S16VectorCopy(ScmS16Vector *vec, int start, int end);
 230 extern ScmObj Scm_S16VectorCopyX(ScmS16Vector *dst, int dstart,
 231                                   ScmS16Vector *src, int sstart, int send);
 232 extern ScmObj Scm_S16VectorToVector(ScmS16Vector *vec, int start, int end);
 233 extern ScmObj Scm_VectorToS16Vector(ScmVector *vec, int start, int end, int clamp);
 234 
 235 /* arithmetics */
 236 extern ScmObj Scm_S16VectorAdd(ScmS16Vector *s0, ScmObj s1, int clamp);
 237 extern ScmObj Scm_S16VectorAddX(ScmS16Vector *s0, ScmObj s1, int clamp);
 238 extern ScmObj Scm_S16VectorSub(ScmS16Vector *s0, ScmObj s1, int clamp);
 239 extern ScmObj Scm_S16VectorSubX(ScmS16Vector *s0, ScmObj s1, int clamp);
 240 extern ScmObj Scm_S16VectorMul(ScmS16Vector *s0, ScmObj s1, int clamp);
 241 extern ScmObj Scm_S16VectorMulX(ScmS16Vector *s0, ScmObj s1, int clamp);
 242 extern ScmObj Scm_S16VectorDiv(ScmS16Vector *s0, ScmObj s1, int clamp);
 243 extern ScmObj Scm_S16VectorDivX(ScmS16Vector *s0, ScmObj s1, int clamp);
 244 
 245 extern ScmObj Scm_S16VectorAnd(ScmS16Vector *s0, ScmObj s1);
 246 extern ScmObj Scm_S16VectorAndX(ScmS16Vector *s0, ScmObj s1);
 247 extern ScmObj Scm_S16VectorIor(ScmS16Vector *s0, ScmObj s1);
 248 extern ScmObj Scm_S16VectorIorX(ScmS16Vector *s0, ScmObj s1);
 249 extern ScmObj Scm_S16VectorXor(ScmS16Vector *s0, ScmObj s1);
 250 extern ScmObj Scm_S16VectorXorX(ScmS16Vector *s0, ScmObj s1);
 251 
 252 extern ScmObj Scm_S16VectorDotProd(ScmS16Vector *v0, ScmObj v1);
 253 extern ScmObj Scm_S16VectorRangeCheck(ScmS16Vector *v0, ScmObj min, ScmObj max);
 254 extern ScmObj Scm_S16VectorClamp(ScmS16Vector *v0, ScmObj min, ScmObj max);
 255 extern ScmObj Scm_S16VectorClampX(ScmS16Vector *v0, ScmObj min, ScmObj max);
 256 
 257 extern ScmObj Scm_S16VectorSwapBytes(ScmS16Vector *v0);
 258 extern ScmObj Scm_S16VectorSwapBytesX(ScmS16Vector *v0);
 259 
 260 /* U16Vector */
 261 
 262 typedef struct ScmU16VectorRec {
 263     SCM_HEADER;
 264     unsigned int immutable : 1;
 265     int size : (SIZEOF_INT*CHAR_BIT-1);
 266     void *owner;
 267     unsigned short *elements;
 268 } ScmU16Vector;
 269 
 270 SCM_CLASS_DECL(Scm_U16VectorClass);
 271 #define SCM_CLASS_U16VECTOR  (&Scm_U16VectorClass)
 272 
 273 #define SCM_U16VECTOR(obj)        ((ScmU16Vector*)(obj))
 274 #define SCM_U16VECTORP(obj)       SCM_XTYPEP(obj, SCM_CLASS_U16VECTOR)
 275 #define SCM_U16VECTOR_SIZE(obj)   (SCM_U16VECTOR(obj)->size)
 276 #define SCM_U16VECTOR_ELEMENTS(obj) (SCM_U16VECTOR(obj)->elements)
 277 
 278 extern ScmObj Scm_MakeU16Vector(int size, unsigned short fill);
 279 extern ScmObj Scm_MakeU16VectorFromArray(int size, const unsigned short array[]);
 280 extern ScmObj Scm_MakeU16VectorFromArrayShared(int size, unsigned short array[]);
 281 extern ScmObj Scm_U16VectorFill(ScmU16Vector *vec, unsigned short fill, int, int);
 282 extern ScmObj Scm_U16VectorRef(ScmU16Vector *vec, int index, ScmObj fallback);
 283 extern ScmObj Scm_U16VectorSet(ScmU16Vector *vec, int index, ScmObj val, int clamp);
 284 extern ScmObj Scm_U16VectorToList(ScmU16Vector *vec, int start, int end);
 285 extern ScmObj Scm_ListToU16Vector(ScmObj list, int clamp);
 286 extern ScmObj Scm_U16VectorCopy(ScmU16Vector *vec, int start, int end);
 287 extern ScmObj Scm_U16VectorCopyX(ScmU16Vector *dst, int dstart,
 288                                   ScmU16Vector *src, int sstart, int send);
 289 extern ScmObj Scm_U16VectorToVector(ScmU16Vector *vec, int start, int end);
 290 extern ScmObj Scm_VectorToU16Vector(ScmVector *vec, int start, int end, int clamp);
 291 
 292 /* arithmetics */
 293 extern ScmObj Scm_U16VectorAdd(ScmU16Vector *s0, ScmObj s1, int clamp);
 294 extern ScmObj Scm_U16VectorAddX(ScmU16Vector *s0, ScmObj s1, int clamp);
 295 extern ScmObj Scm_U16VectorSub(ScmU16Vector *s0, ScmObj s1, int clamp);
 296 extern ScmObj Scm_U16VectorSubX(ScmU16Vector *s0, ScmObj s1, int clamp);
 297 extern ScmObj Scm_U16VectorMul(ScmU16Vector *s0, ScmObj s1, int clamp);
 298 extern ScmObj Scm_U16VectorMulX(ScmU16Vector *s0, ScmObj s1, int clamp);
 299 extern ScmObj Scm_U16VectorDiv(ScmU16Vector *s0, ScmObj s1, int clamp);
 300 extern ScmObj Scm_U16VectorDivX(ScmU16Vector *s0, ScmObj s1, int clamp);
 301 
 302 extern ScmObj Scm_U16VectorAnd(ScmU16Vector *s0, ScmObj s1);
 303 extern ScmObj Scm_U16VectorAndX(ScmU16Vector *s0, ScmObj s1);
 304 extern ScmObj Scm_U16VectorIor(ScmU16Vector *s0, ScmObj s1);
 305 extern ScmObj Scm_U16VectorIorX(ScmU16Vector *s0, ScmObj s1);
 306 extern ScmObj Scm_U16VectorXor(ScmU16Vector *s0, ScmObj s1);
 307 extern ScmObj Scm_U16VectorXorX(ScmU16Vector *s0, ScmObj s1);
 308 
 309 extern ScmObj Scm_U16VectorDotProd(ScmU16Vector *v0, ScmObj v1);
 310 extern ScmObj Scm_U16VectorRangeCheck(ScmU16Vector *v0, ScmObj min, ScmObj max);
 311 extern ScmObj Scm_U16VectorClamp(ScmU16Vector *v0, ScmObj min, ScmObj max);
 312 extern ScmObj Scm_U16VectorClampX(ScmU16Vector *v0, ScmObj min, ScmObj max);
 313 
 314 extern ScmObj Scm_U16VectorSwapBytes(ScmU16Vector *v0);
 315 extern ScmObj Scm_U16VectorSwapBytesX(ScmU16Vector *v0);
 316 
 317 /* S32Vector */
 318 
 319 typedef struct ScmS32VectorRec {
 320     SCM_HEADER;
 321     unsigned int immutable : 1;
 322     int size : (SIZEOF_INT*CHAR_BIT-1);
 323     void *owner;
 324     ScmInt32 *elements;
 325 } ScmS32Vector;
 326 
 327 SCM_CLASS_DECL(Scm_S32VectorClass);
 328 #define SCM_CLASS_S32VECTOR  (&Scm_S32VectorClass)
 329 
 330 #define SCM_S32VECTOR(obj)        ((ScmS32Vector*)(obj))
 331 #define SCM_S32VECTORP(obj)       SCM_XTYPEP(obj, SCM_CLASS_S32VECTOR)
 332 #define SCM_S32VECTOR_SIZE(obj)   (SCM_S32VECTOR(obj)->size)
 333 #define SCM_S32VECTOR_ELEMENTS(obj) (SCM_S32VECTOR(obj)->elements)
 334 
 335 extern ScmObj Scm_MakeS32Vector(int size, ScmInt32 fill);
 336 extern ScmObj Scm_MakeS32VectorFromArray(int size, const ScmInt32 array[]);
 337 extern ScmObj Scm_MakeS32VectorFromArrayShared(int size, ScmInt32 array[]);
 338 extern ScmObj Scm_S32VectorFill(ScmS32Vector *vec, ScmInt32 fill, int, int);
 339 extern ScmObj Scm_S32VectorRef(ScmS32Vector *vec, int index, ScmObj fallback);
 340 extern ScmObj Scm_S32VectorSet(ScmS32Vector *vec, int index, ScmObj val, int clamp);
 341 extern ScmObj Scm_S32VectorToList(ScmS32Vector *vec, int start, int end);
 342 extern ScmObj Scm_ListToS32Vector(ScmObj list, int clamp);
 343 extern ScmObj Scm_S32VectorCopy(ScmS32Vector *vec, int start, int end);
 344 extern ScmObj Scm_S32VectorCopyX(ScmS32Vector *dst, int dstart,
 345                                   ScmS32Vector *src, int sstart, int send);
 346 extern ScmObj Scm_S32VectorToVector(ScmS32Vector *vec, int start, int end);
 347 extern ScmObj Scm_VectorToS32Vector(ScmVector *vec, int start, int end, int clamp);
 348 
 349 /* arithmetics */
 350 extern ScmObj Scm_S32VectorAdd(ScmS32Vector *s0, ScmObj s1, int clamp);
 351 extern ScmObj Scm_S32VectorAddX(ScmS32Vector *s0, ScmObj s1, int clamp);
 352 extern ScmObj Scm_S32VectorSub(ScmS32Vector *s0, ScmObj s1, int clamp);
 353 extern ScmObj Scm_S32VectorSubX(ScmS32Vector *s0, ScmObj s1, int clamp);
 354 extern ScmObj Scm_S32VectorMul(ScmS32Vector *s0, ScmObj s1, int clamp);
 355 extern ScmObj Scm_S32VectorMulX(ScmS32Vector *s0, ScmObj s1, int clamp);
 356 extern ScmObj Scm_S32VectorDiv(ScmS32Vector *s0, ScmObj s1, int clamp);
 357 extern ScmObj Scm_S32VectorDivX(ScmS32Vector *s0, ScmObj s1, int clamp);
 358 
 359 extern ScmObj Scm_S32VectorAnd(ScmS32Vector *s0, ScmObj s1);
 360 extern ScmObj Scm_S32VectorAndX(ScmS32Vector *s0, ScmObj s1);
 361 extern ScmObj Scm_S32VectorIor(ScmS32Vector *s0, ScmObj s1);
 362 extern ScmObj Scm_S32VectorIorX(ScmS32Vector *s0, ScmObj s1);
 363 extern ScmObj Scm_S32VectorXor(ScmS32Vector *s0, ScmObj s1);
 364 extern ScmObj Scm_S32VectorXorX(ScmS32Vector *s0, ScmObj s1);
 365 
 366 extern ScmObj Scm_S32VectorDotProd(ScmS32Vector *v0, ScmObj v1);
 367 extern ScmObj Scm_S32VectorRangeCheck(ScmS32Vector *v0, ScmObj min, ScmObj max);
 368 extern ScmObj Scm_S32VectorClamp(ScmS32Vector *v0, ScmObj min, ScmObj max);
 369 extern ScmObj Scm_S32VectorClampX(ScmS32Vector *v0, ScmObj min, ScmObj max);
 370 
 371 extern ScmObj Scm_S32VectorSwapBytes(ScmS32Vector *v0);
 372 extern ScmObj Scm_S32VectorSwapBytesX(ScmS32Vector *v0);
 373 
 374 /* U32Vector */
 375 
 376 typedef struct ScmU32VectorRec {
 377     SCM_HEADER;
 378     unsigned int immutable : 1;
 379     int size : (SIZEOF_INT*CHAR_BIT-1);
 380     void *owner;
 381     ScmUInt32 *elements;
 382 } ScmU32Vector;
 383 
 384 SCM_CLASS_DECL(Scm_U32VectorClass);
 385 #define SCM_CLASS_U32VECTOR  (&Scm_U32VectorClass)
 386 
 387 #define SCM_U32VECTOR(obj)        ((ScmU32Vector*)(obj))
 388 #define SCM_U32VECTORP(obj)       SCM_XTYPEP(obj, SCM_CLASS_U32VECTOR)
 389 #define SCM_U32VECTOR_SIZE(obj)   (SCM_U32VECTOR(obj)->size)
 390 #define SCM_U32VECTOR_ELEMENTS(obj) (SCM_U32VECTOR(obj)->elements)
 391 
 392 extern ScmObj Scm_MakeU32Vector(int size, ScmUInt32 fill);
 393 extern ScmObj Scm_MakeU32VectorFromArray(int size, const ScmUInt32 array[]);
 394 extern ScmObj Scm_MakeU32VectorFromArrayShared(int size, ScmUInt32 array[]);
 395 extern ScmObj Scm_U32VectorFill(ScmU32Vector *vec, ScmUInt32 fill, int, int);
 396 extern ScmObj Scm_U32VectorRef(ScmU32Vector *vec, int index, ScmObj fallback);
 397 extern ScmObj Scm_U32VectorSet(ScmU32Vector *vec, int index, ScmObj val, int clamp);
 398 extern ScmObj Scm_U32VectorToList(ScmU32Vector *vec, int start, int end);
 399 extern ScmObj Scm_ListToU32Vector(ScmObj list, int clamp);
 400 extern ScmObj Scm_U32VectorCopy(ScmU32Vector *vec, int start, int end);
 401 extern ScmObj Scm_U32VectorCopyX(ScmU32Vector *dst, int dstart,
 402                                   ScmU32Vector *src, int sstart, int send);
 403 extern ScmObj Scm_U32VectorToVector(ScmU32Vector *vec, int start, int end);
 404 extern ScmObj Scm_VectorToU32Vector(ScmVector *vec, int start, int end, int clamp);
 405 
 406 /* arithmetics */
 407 extern ScmObj Scm_U32VectorAdd(ScmU32Vector *s0, ScmObj s1, int clamp);
 408 extern ScmObj Scm_U32VectorAddX(ScmU32Vector *s0, ScmObj s1, int clamp);
 409 extern ScmObj Scm_U32VectorSub(ScmU32Vector *s0, ScmObj s1, int clamp);
 410 extern ScmObj Scm_U32VectorSubX(ScmU32Vector *s0, ScmObj s1, int clamp);
 411 extern ScmObj Scm_U32VectorMul(ScmU32Vector *s0, ScmObj s1, int clamp);
 412 extern ScmObj Scm_U32VectorMulX(ScmU32Vector *s0, ScmObj s1, int clamp);
 413 extern ScmObj Scm_U32VectorDiv(ScmU32Vector *s0, ScmObj s1, int clamp);
 414 extern ScmObj Scm_U32VectorDivX(ScmU32Vector *s0, ScmObj s1, int clamp);
 415 
 416 extern ScmObj Scm_U32VectorAnd(ScmU32Vector *s0, ScmObj s1);
 417 extern ScmObj Scm_U32VectorAndX(ScmU32Vector *s0, ScmObj s1);
 418 extern ScmObj Scm_U32VectorIor(ScmU32Vector *s0, ScmObj s1);
 419 extern ScmObj Scm_U32VectorIorX(ScmU32Vector *s0, ScmObj s1);
 420 extern ScmObj Scm_U32VectorXor(ScmU32Vector *s0, ScmObj s1);
 421 extern ScmObj Scm_U32VectorXorX(ScmU32Vector *s0, ScmObj s1);
 422 
 423 extern ScmObj Scm_U32VectorDotProd(ScmU32Vector *v0, ScmObj v1);
 424 extern ScmObj Scm_U32VectorRangeCheck(ScmU32Vector *v0, ScmObj min, ScmObj max);
 425 extern ScmObj Scm_U32VectorClamp(ScmU32Vector *v0, ScmObj min, ScmObj max);
 426 extern ScmObj Scm_U32VectorClampX(ScmU32Vector *v0, ScmObj min, ScmObj max);
 427 
 428 extern ScmObj Scm_U32VectorSwapBytes(ScmU32Vector *v0);
 429 extern ScmObj Scm_U32VectorSwapBytesX(ScmU32Vector *v0);
 430 
 431 /* S64Vector */
 432 
 433 typedef struct ScmS64VectorRec {
 434     SCM_HEADER;
 435     unsigned int immutable : 1;
 436     int size : (SIZEOF_INT*CHAR_BIT-1);
 437     void *owner;
 438     ScmInt64 *elements;
 439 } ScmS64Vector;
 440 
 441 SCM_CLASS_DECL(Scm_S64VectorClass);
 442 #define SCM_CLASS_S64VECTOR  (&Scm_S64VectorClass)
 443 
 444 #define SCM_S64VECTOR(obj)        ((ScmS64Vector*)(obj))
 445 #define SCM_S64VECTORP(obj)       SCM_XTYPEP(obj, SCM_CLASS_S64VECTOR)
 446 #define SCM_S64VECTOR_SIZE(obj)   (SCM_S64VECTOR(obj)->size)
 447 #define SCM_S64VECTOR_ELEMENTS(obj) (SCM_S64VECTOR(obj)->elements)
 448 
 449 extern ScmObj Scm_MakeS64Vector(int size, ScmInt64 fill);
 450 extern ScmObj Scm_MakeS64VectorFromArray(int size, const ScmInt64 array[]);
 451 extern ScmObj Scm_MakeS64VectorFromArrayShared(int size, ScmInt64 array[]);
 452 extern ScmObj Scm_S64VectorFill(ScmS64Vector *vec, ScmInt64 fill, int, int);
 453 extern ScmObj Scm_S64VectorRef(ScmS64Vector *vec, int index, ScmObj fallback);
 454 extern ScmObj Scm_S64VectorSet(ScmS64Vector *vec, int index, ScmObj val, int clamp);
 455 extern ScmObj Scm_S64VectorToList(ScmS64Vector *vec, int start, int end);
 456 extern ScmObj Scm_ListToS64Vector(ScmObj list, int clamp);
 457 extern ScmObj Scm_S64VectorCopy(ScmS64Vector *vec, int start, int end);
 458 extern ScmObj Scm_S64VectorCopyX(ScmS64Vector *dst, int dstart,
 459                                   ScmS64Vector *src, int sstart, int send);
 460 extern ScmObj Scm_S64VectorToVector(ScmS64Vector *vec, int start, int end);
 461 extern ScmObj Scm_VectorToS64Vector(ScmVector *vec, int start, int end, int clamp);
 462 
 463 /* arithmetics */
 464 extern ScmObj Scm_S64VectorAdd(ScmS64Vector *s0, ScmObj s1, int clamp);
 465 extern ScmObj Scm_S64VectorAddX(ScmS64Vector *s0, ScmObj s1, int clamp);
 466 extern ScmObj Scm_S64VectorSub(ScmS64Vector *s0, ScmObj s1, int clamp);
 467 extern ScmObj Scm_S64VectorSubX(ScmS64Vector *s0, ScmObj s1, int clamp);
 468 extern ScmObj Scm_S64VectorMul(ScmS64Vector *s0, ScmObj s1, int clamp);
 469 extern ScmObj Scm_S64VectorMulX(ScmS64Vector *s0, ScmObj s1, int clamp);
 470 extern ScmObj Scm_S64VectorDiv(ScmS64Vector *s0, ScmObj s1, int clamp);
 471 extern ScmObj Scm_S64VectorDivX(ScmS64Vector *s0, ScmObj s1, int clamp);
 472 
 473 extern ScmObj Scm_S64VectorAnd(ScmS64Vector *s0, ScmObj s1);
 474 extern ScmObj Scm_S64VectorAndX(ScmS64Vector *s0, ScmObj s1);
 475 extern ScmObj Scm_S64VectorIor(ScmS64Vector *s0, ScmObj s1);
 476 extern ScmObj Scm_S64VectorIorX(ScmS64Vector *s0, ScmObj s1);
 477 extern ScmObj Scm_S64VectorXor(ScmS64Vector *s0, ScmObj s1);
 478 extern ScmObj Scm_S64VectorXorX(ScmS64Vector *s0, ScmObj s1);
 479 
 480 extern ScmObj Scm_S64VectorDotProd(ScmS64Vector *v0, ScmObj v1);
 481 extern ScmObj Scm_S64VectorRangeCheck(ScmS64Vector *v0, ScmObj min, ScmObj max);
 482 extern ScmObj Scm_S64VectorClamp(ScmS64Vector *v0, ScmObj min, ScmObj max);
 483 extern ScmObj Scm_S64VectorClampX(ScmS64Vector *v0, ScmObj min, ScmObj max);
 484 
 485 extern ScmObj Scm_S64VectorSwapBytes(ScmS64Vector *v0);
 486 extern ScmObj Scm_S64VectorSwapBytesX(ScmS64Vector *v0);
 487 
 488 /* U64Vector */
 489 
 490 typedef struct ScmU64VectorRec {
 491     SCM_HEADER;
 492     unsigned int immutable : 1;
 493     int size : (SIZEOF_INT*CHAR_BIT-1);
 494     void *owner;
 495     ScmUInt64 *elements;
 496 } ScmU64Vector;
 497 
 498 SCM_CLASS_DECL(Scm_U64VectorClass);
 499 #define SCM_CLASS_U64VECTOR  (&Scm_U64VectorClass)
 500 
 501 #define SCM_U64VECTOR(obj)        ((ScmU64Vector*)(obj))
 502 #define SCM_U64VECTORP(obj)       SCM_XTYPEP(obj, SCM_CLASS_U64VECTOR)
 503 #define SCM_U64VECTOR_SIZE(obj)   (SCM_U64VECTOR(obj)->size)
 504 #define SCM_U64VECTOR_ELEMENTS(obj) (SCM_U64VECTOR(obj)->elements)
 505 
 506 extern ScmObj Scm_MakeU64Vector(int size, ScmUInt64 fill);
 507 extern ScmObj Scm_MakeU64VectorFromArray(int size, const ScmUInt64 array[]);
 508 extern ScmObj Scm_MakeU64VectorFromArrayShared(int size, ScmUInt64 array[]);
 509 extern ScmObj Scm_U64VectorFill(ScmU64Vector *vec, ScmUInt64 fill, int, int);
 510 extern ScmObj Scm_U64VectorRef(ScmU64Vector *vec, int index, ScmObj fallback);
 511 extern ScmObj Scm_U64VectorSet(ScmU64Vector *vec, int index, ScmObj val, int clamp);
 512 extern ScmObj Scm_U64VectorToList(ScmU64Vector *vec, int start, int end);
 513 extern ScmObj Scm_ListToU64Vector(ScmObj list, int clamp);
 514 extern ScmObj Scm_U64VectorCopy(ScmU64Vector *vec, int start, int end);
 515 extern ScmObj Scm_U64VectorCopyX(ScmU64Vector *dst, int dstart,
 516                                   ScmU64Vector *src, int sstart, int send);
 517 extern ScmObj Scm_U64VectorToVector(ScmU64Vector *vec, int start, int end);
 518 extern ScmObj Scm_VectorToU64Vector(ScmVector *vec, int start, int end, int clamp);
 519 
 520 /* arithmetics */
 521 extern ScmObj Scm_U64VectorAdd(ScmU64Vector *s0, ScmObj s1, int clamp);
 522 extern ScmObj Scm_U64VectorAddX(ScmU64Vector *s0, ScmObj s1, int clamp);
 523 extern ScmObj Scm_U64VectorSub(ScmU64Vector *s0, ScmObj s1, int clamp);
 524 extern ScmObj Scm_U64VectorSubX(ScmU64Vector *s0, ScmObj s1, int clamp);
 525 extern ScmObj Scm_U64VectorMul(ScmU64Vector *s0, ScmObj s1, int clamp);
 526 extern ScmObj Scm_U64VectorMulX(ScmU64Vector *s0, ScmObj s1, int clamp);
 527 extern ScmObj Scm_U64VectorDiv(ScmU64Vector *s0, ScmObj s1, int clamp);
 528 extern ScmObj Scm_U64VectorDivX(ScmU64Vector *s0, ScmObj s1, int clamp);
 529 
 530 extern ScmObj Scm_U64VectorAnd(ScmU64Vector *s0, ScmObj s1);
 531 extern ScmObj Scm_U64VectorAndX(ScmU64Vector *s0, ScmObj s1);
 532 extern ScmObj Scm_U64VectorIor(ScmU64Vector *s0, ScmObj s1);
 533 extern ScmObj Scm_U64VectorIorX(ScmU64Vector *s0, ScmObj s1);
 534 extern ScmObj Scm_U64VectorXor(ScmU64Vector *s0, ScmObj s1);
 535 extern ScmObj Scm_U64VectorXorX(ScmU64Vector *s0, ScmObj s1);
 536 
 537 extern ScmObj Scm_U64VectorDotProd(ScmU64Vector *v0, ScmObj v1);
 538 extern ScmObj Scm_U64VectorRangeCheck(ScmU64Vector *v0, ScmObj min, ScmObj max);
 539 extern ScmObj Scm_U64VectorClamp(ScmU64Vector *v0, ScmObj min, ScmObj max);
 540 extern ScmObj Scm_U64VectorClampX(ScmU64Vector *v0, ScmObj min, ScmObj max);
 541 
 542 extern ScmObj Scm_U64VectorSwapBytes(ScmU64Vector *v0);
 543 extern ScmObj Scm_U64VectorSwapBytesX(ScmU64Vector *v0);
 544 
 545 /* F32Vector */
 546 
 547 typedef struct ScmF32VectorRec {
 548     SCM_HEADER;
 549     unsigned int immutable : 1;
 550     int size : (SIZEOF_INT*CHAR_BIT-1);
 551     void *owner;
 552     float *elements;
 553 } ScmF32Vector;
 554 
 555 SCM_CLASS_DECL(Scm_F32VectorClass);
 556 #define SCM_CLASS_F32VECTOR  (&Scm_F32VectorClass)
 557 
 558 #define SCM_F32VECTOR(obj)        ((ScmF32Vector*)(obj))
 559 #define SCM_F32VECTORP(obj)       SCM_XTYPEP(obj, SCM_CLASS_F32VECTOR)
 560 #define SCM_F32VECTOR_SIZE(obj)   (SCM_F32VECTOR(obj)->size)
 561 #define SCM_F32VECTOR_ELEMENTS(obj) (SCM_F32VECTOR(obj)->elements)
 562 
 563 extern ScmObj Scm_MakeF32Vector(int size, float fill);
 564 extern ScmObj Scm_MakeF32VectorFromArray(int size, const float array[]);
 565 extern ScmObj Scm_MakeF32VectorFromArrayShared(int size, float array[]);
 566 extern ScmObj Scm_F32VectorFill(ScmF32Vector *vec, float fill, int, int);
 567 extern ScmObj Scm_F32VectorRef(ScmF32Vector *vec, int index, ScmObj fallback);
 568 extern ScmObj Scm_F32VectorSet(ScmF32Vector *vec, int index, ScmObj val, int clamp);
 569 extern ScmObj Scm_F32VectorToList(ScmF32Vector *vec, int start, int end);
 570 extern ScmObj Scm_ListToF32Vector(ScmObj list, int clamp);
 571 extern ScmObj Scm_F32VectorCopy(ScmF32Vector *vec, int start, int end);
 572 extern ScmObj Scm_F32VectorCopyX(ScmF32Vector *dst, int dstart,
 573                                   ScmF32Vector *src, int sstart, int send);
 574 extern ScmObj Scm_F32VectorToVector(ScmF32Vector *vec, int start, int end);
 575 extern ScmObj Scm_VectorToF32Vector(ScmVector *vec, int start, int end, int clamp);
 576 
 577 /* arithmetics */
 578 extern ScmObj Scm_F32VectorAdd(ScmF32Vector *s0, ScmObj s1, int clamp);
 579 extern ScmObj Scm_F32VectorAddX(ScmF32Vector *s0, ScmObj s1, int clamp);
 580 extern ScmObj Scm_F32VectorSub(ScmF32Vector *s0, ScmObj s1, int clamp);
 581 extern ScmObj Scm_F32VectorSubX(ScmF32Vector *s0, ScmObj s1, int clamp);
 582 extern ScmObj Scm_F32VectorMul(ScmF32Vector *s0, ScmObj s1, int clamp);
 583 extern ScmObj Scm_F32VectorMulX(ScmF32Vector *s0, ScmObj s1, int clamp);
 584 extern ScmObj Scm_F32VectorDiv(ScmF32Vector *s0, ScmObj s1, int clamp);
 585 extern ScmObj Scm_F32VectorDivX(ScmF32Vector *s0, ScmObj s1, int clamp);
 586 
 587 extern ScmObj Scm_F32VectorAnd(ScmF32Vector *s0, ScmObj s1);
 588 extern ScmObj Scm_F32VectorAndX(ScmF32Vector *s0, ScmObj s1);
 589 extern ScmObj Scm_F32VectorIor(ScmF32Vector *s0, ScmObj s1);
 590 extern ScmObj Scm_F32VectorIorX(ScmF32Vector *s0, ScmObj s1);
 591 extern ScmObj Scm_F32VectorXor(ScmF32Vector *s0, ScmObj s1);
 592 extern ScmObj Scm_F32VectorXorX(ScmF32Vector *s0, ScmObj s1);
 593 
 594 extern ScmObj Scm_F32VectorDotProd(ScmF32Vector *v0, ScmObj v1);
 595 extern ScmObj Scm_F32VectorRangeCheck(ScmF32Vector *v0, ScmObj min, ScmObj max);
 596 extern ScmObj Scm_F32VectorClamp(ScmF32Vector *v0, ScmObj min, ScmObj max);
 597 extern ScmObj Scm_F32VectorClampX(ScmF32Vector *v0, ScmObj min, ScmObj max);
 598 
 599 extern ScmObj Scm_F32VectorSwapBytes(ScmF32Vector *v0);
 600 extern ScmObj Scm_F32VectorSwapBytesX(ScmF32Vector *v0);
 601 
 602 /* F64Vector */
 603 
 604 typedef struct ScmF64VectorRec {
 605     SCM_HEADER;
 606     unsigned int immutable : 1;
 607     int size : (SIZEOF_INT*CHAR_BIT-1);
 608     void *owner;
 609     double *elements;
 610 } ScmF64Vector;
 611 
 612 SCM_CLASS_DECL(Scm_F64VectorClass);
 613 #define SCM_CLASS_F64VECTOR  (&Scm_F64VectorClass)
 614 
 615 #define SCM_F64VECTOR(obj)        ((ScmF64Vector*)(obj))
 616 #define SCM_F64VECTORP(obj)       SCM_XTYPEP(obj, SCM_CLASS_F64VECTOR)
 617 #define SCM_F64VECTOR_SIZE(obj)   (SCM_F64VECTOR(obj)->size)
 618 #define SCM_F64VECTOR_ELEMENTS(obj) (SCM_F64VECTOR(obj)->elements)
 619 
 620 extern ScmObj Scm_MakeF64Vector(int size, double fill);
 621 extern ScmObj Scm_MakeF64VectorFromArray(int size, const double array[]);
 622 extern ScmObj Scm_MakeF64VectorFromArrayShared(int size, double array[]);
 623 extern ScmObj Scm_F64VectorFill(ScmF64Vector *vec, double fill, int, int);
 624 extern ScmObj Scm_F64VectorRef(ScmF64Vector *vec, int index, ScmObj fallback);
 625 extern ScmObj Scm_F64VectorSet(ScmF64Vector *vec, int index, ScmObj val, int clamp);
 626 extern ScmObj Scm_F64VectorToList(ScmF64Vector *vec, int start, int end);
 627 extern ScmObj Scm_ListToF64Vector(ScmObj list, int clamp);
 628 extern ScmObj Scm_F64VectorCopy(ScmF64Vector *vec, int start, int end);
 629 extern ScmObj Scm_F64VectorCopyX(ScmF64Vector *dst, int dstart,
 630                                   ScmF64Vector *src, int sstart, int send);
 631 extern ScmObj Scm_F64VectorToVector(ScmF64Vector *vec, int start, int end);
 632 extern ScmObj Scm_VectorToF64Vector(ScmVector *vec, int start, int end, int clamp);
 633 
 634 /* arithmetics */
 635 extern ScmObj Scm_F64VectorAdd(ScmF64Vector *s0, ScmObj s1, int clamp);
 636 extern ScmObj Scm_F64VectorAddX(ScmF64Vector *s0, ScmObj s1, int clamp);
 637 extern ScmObj Scm_F64VectorSub(ScmF64Vector *s0, ScmObj s1, int clamp);
 638 extern ScmObj Scm_F64VectorSubX(ScmF64Vector *s0, ScmObj s1, int clamp);
 639 extern ScmObj Scm_F64VectorMul(ScmF64Vector *s0, ScmObj s1, int clamp);
 640 extern ScmObj Scm_F64VectorMulX(ScmF64Vector *s0, ScmObj s1, int clamp);
 641 extern ScmObj Scm_F64VectorDiv(ScmF64Vector *s0, ScmObj s1, int clamp);
 642 extern ScmObj Scm_F64VectorDivX(ScmF64Vector *s0, ScmObj s1, int clamp);
 643 
 644 extern ScmObj Scm_F64VectorAnd(ScmF64Vector *s0, ScmObj s1);
 645 extern ScmObj Scm_F64VectorAndX(ScmF64Vector *s0, ScmObj s1);
 646 extern ScmObj Scm_F64VectorIor(ScmF64Vector *s0, ScmObj s1);
 647 extern ScmObj Scm_F64VectorIorX(ScmF64Vector *s0, ScmObj s1);
 648 extern ScmObj Scm_F64VectorXor(ScmF64Vector *s0, ScmObj s1);
 649 extern ScmObj Scm_F64VectorXorX(ScmF64Vector *s0, ScmObj s1);
 650 
 651 extern ScmObj Scm_F64VectorDotProd(ScmF64Vector *v0, ScmObj v1);
 652 extern ScmObj Scm_F64VectorRangeCheck(ScmF64Vector *v0, ScmObj min, ScmObj max);
 653 extern ScmObj Scm_F64VectorClamp(ScmF64Vector *v0, ScmObj min, ScmObj max);
 654 extern ScmObj Scm_F64VectorClampX(ScmF64Vector *v0, ScmObj min, ScmObj max);
 655 
 656 extern ScmObj Scm_F64VectorSwapBytes(ScmF64Vector *v0);
 657 extern ScmObj Scm_F64VectorSwapBytesX(ScmF64Vector *v0);
 658 
 659 
 660 #endif /* GAUCHE_UVECT_H */
 661 

/* [<][>][^][v][top][bottom][index][help] */