/* ----------------- */ /* --- nrmem1x.c --- */ /* ----------------- */ /* * Copyright (c) 2000-2014, Lionel Lacassagne, All rights reserved * Univ Paris Sud XI, CNRS */ #include #include #include #include "mypredef.h" #include "nrtype.h" #include "nrdef.h" #include "nrmacro.h" #include "nrkernel.h" #include "nrmem1x.h" /* --------------------------------------- */ IMAGE_EXPORT(void) roll_si16vector(sint16 *v, long nl, long nh) /* --------------------------------------- */ /* * left rotate a uint16 vector with subscript range v[nl..nh] * nl & nh can be, respectively bigger and smaller than the * values used to allocate the vector (svector) * no check on nl and nh is done */ { long i; sint16 tmp; tmp = v[nl]; for(i=nl; inl) { len = nh - nl + 1; memcpy(dst, src + nl, len); } else { len1 = m - nl; memcpy(dst, src + nl, len1); len2 = nh + 1; memcpy(dst+len1, src + nh, len2); } } /* ------------------------------------------------------------------------------- */ IMAGE_EXPORT(void) copy_si16vector_mod(sint16 *src, long nl, long nh, long m, sint16 *dst) /* ------------------------------------------------------------------------------- */ { long len; long len1, len2; if(nh>nl) { len = nh - nl + 1; memcpy(dst, src + nl, len*sizeof(uint16)); } else { len1 = m - nl; memcpy(dst, src + nl, len1*sizeof(uint16)); len2 = nh + 1; memcpy(dst+len1, src + nh, len2*sizeof(uint16)); } } /* --------------------------------------------------------------------------------- */ IMAGE_EXPORT(void) copy_ui16vector_mod(uint16 *src, long nl, long nh, long m, uint16 *dst) /* --------------------------------------------------------------------------------- */ { long len; long len1, len2; if(nh>nl) { len = nh - nl + 1; memcpy(dst, src + nl, len*sizeof(uint16)); } else { len1 = m - nl; memcpy(dst, src + nl, len1*sizeof(uint16)); len2 = nh + 1; memcpy(dst+len1, src + nh, len2*sizeof(uint16)); } } /* --------------------------------------------------------------------------- */ IMAGE_EXPORT(void) copy_ui32vector_mod(uint32 *src, long nl, long nh, long m, uint32 *dst) /* --------------------------------------------------------------------------- */ { long len; long len1, len2; if(nh>nl) { len = nh - nl + 1; memcpy(dst, src + nl, len*sizeof(uint32)); } else { len1 = m - nl; memcpy(dst, src + nl, len1*sizeof(uint32)); len2 = nh + 1; memcpy(dst+len1, src + nh, len2*sizeof(uint32)); } } /* --------------------------------------------------------------------------- */ IMAGE_EXPORT(void) copy_si32vector_mod(sint32 *src, long nl, long nh, long m, sint32 *dst) /* --------------------------------------------------------------------------- */ { long len; long len1, len2; if(nh>nl) { len = nh - nl + 1; memcpy(dst, src + nl, len*sizeof(sint32)); } else { len1 = m - nl; memcpy(dst, src + nl, len1*sizeof(sint32)); len2 = nh + 1; memcpy(dst+len1, src + nh, len2*sizeof(sint32)); } } /* ------------------------------------------------------------------------------ */ IMAGE_EXPORT(void) copy_f32vector_mod(float32 *src, long nl, long nh, long m, float32 *dst) /* ------------------------------------------------------------------------------ */ { long len; long len1, len2; if(nh>nl) { len = nh - nl + 1; memcpy(dst, src + nl, len*sizeof(float32)); } else { len1 = m - nl; memcpy(dst, src + nl, len1*sizeof(float32)); len2 = nh + 1; memcpy(dst+len1, src + nh, len2*sizeof(float32)); } } /* --------------------------------------------------------------------------------- */ IMAGE_EXPORT(void) copy_f64vector_mod(float64 *src, long nl, long nh, long m, float64 *dst) /* --------------------------------------------------------------------------------- */ { long len; long len1, len2; if(nh>nl) { len = nh - nl + 1; memcpy(dst, src + nl, len*sizeof(float64)); } else { len1 = m - nl; memcpy(dst, src + nl, len1*sizeof(float64)); len2 = nh + 1; memcpy(dst+len1, src + nh, len2*sizeof(float64)); } }