1/* Implementation of the RESHAPE intrinsic for packed arrays 2 Copyright (C) 2002-2020 Free Software Foundation, Inc. 3 Contributed by Paul Brook <paul@nowt.org> 4 5This file is part of the GNU Fortran 95 runtime library (libgfortran). 6 7Libgfortran is free software; you can redistribute it and/or 8modify it under the terms of the GNU General Public 9License as published by the Free Software Foundation; either 10version 3 of the License, or (at your option) any later version. 11 12Ligbfortran is distributed in the hope that it will be useful, 13but WITHOUT ANY WARRANTY; without even the implied warranty of 14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15GNU General Public License for more details. 16 17Under Section 7 of GPL version 3, you are granted additional 18permissions described in the GCC Runtime Library Exception, version 193.1, as published by the Free Software Foundation. 20 21You should have received a copy of the GNU General Public License and 22a copy of the GCC Runtime Library Exception along with this program; 23see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 24<http://www.gnu.org/licenses/>. */ 25 26#include "libgfortran.h" 27 28#include <string.h> 29 30/* Reshape function where all arrays are packed. Basically just memcpy. */ 31 32void 33reshape_packed (char * restrict ret, index_type rsize, const char * source, 34 index_type ssize, const char * pad, index_type psize) 35{ 36 index_type size; 37 38 size = (rsize > ssize) ? ssize : rsize; 39 memcpy (ret, source, size); 40 ret += size; 41 rsize -= size; 42 while (rsize > 0) 43 { 44 size = (rsize > psize) ? psize : rsize; 45 memcpy (ret, pad, size); 46 ret += size; 47 rsize -= size; 48 } 49} 50