📄 dce_matrix.c
字号:
/***************************************Ho Chi Minh City University of Technology Computer Science Department Distributed Computing Environment (DCE)Written by Nguyen Van Noi -59406114File dce_matrix.c on Tue Nov 17 18:31:12 1998****************************************/#include <stdio.h>#include "dcec.h"int readn (register int, register char *, register);int writen (register int, register char *, register);pmatrixinitmatrix (int type, int row, int col, void **ppvoid, mf_t f){ int i, j; pmatrix pm = (pmatrix) malloc (sizeof (matrix)); if (!pm) return NULL; pm->type = type; pm->row = row; pm->col = col; pm->_ppvoid = ppvoid; if (f) { for (i = 0; i < row; i++) for (j = 0; j < col; j++) f (pm, i, j); } return pm;}pmatrixnewmatrix (int type, int row, int col, mf_t f){ int i, j; pmatrix pm = (pmatrix) malloc (sizeof (matrix)); if (!pm) return NULL; pm->type = type; pm->row = row; pm->col = col; pm->_ppvoid = NULL; if (!(pm->_ppvoid = (void **) malloc (sizeof (void *) * row))) { free (pm); return NULL; } for (i = 0; i < row; i++) pm->_ppvoid[i] = NULL; for (i = 0; i < row; i++) if (!(pm->_ppvoid[i] = (void *) malloc (type * col))) { freematrix (pm); return NULL; } if (f) { for (i = 0; i < pm->row; i++) for (j = 0; j < pm->col; j++) f (pm, i, j); } return pm;}voidfreematrix (pmatrix pm){ int i; if (pm->_ppvoid) { for (i = 0; i < pm->row; i++) if (pm->_ppvoid[i]) free (pm->_ppvoid[i]); } free (pm);}intwritematrix (int fd, pmatrix pm){ int i; if (writen (fd, (char *) &(pm->type), sizeof (pm->type)) < 0) return -1; if (writen (fd, (char *) &(pm->row), sizeof (pm->row)) < 0) return -1; if (writen (fd, (char *) &(pm->col), sizeof (pm->col)) < 0) return -1; for (i = 0; i < pm->row; i++) if (writen (fd, (char *) (pm->_ppvoid[i]), pm->type * pm->col) < 0) return -1; return pm->row * pm->col;}pmatrixreadmatrix (int fd){ int i, type, row, col; pmatrix pm; if (readn (fd, (char *) &type, sizeof (type)) < 0) return NULL; if (readn (fd, (char *) &row, sizeof (row)) < 0) return NULL; if (readn (fd, (char *) &col, sizeof (col)) < 0) return NULL; if (!(pm = newmatrix (type, row, col, NULL))) return NULL; for (i = 0; i < row; i++) if (readn (fd, (char *) (pm->_ppvoid[i]), type * col) < 0) { freematrix (pm); return NULL; } return pm;}voidprintmatrix (pmatrix pm, FILE * fo, mf_t fm){ int i, j; FILE *f = (fo) ? fo : stderr; fprintf (f, "\nSize of 1 element : %d bytes.Dim : %d row %d col\n", pm->type, pm->row, pm->col); for (i = 0; i < pm->row; i++) { for (j = 0; j < pm->col; j++) if (fm) fm (pm, i, j); fprintf (f, "\n"); }}intreadn (register int fd, register char *ptr, register nbytes){ int nread, nleft = nbytes; while (nleft > 0) { nread = read (fd, ptr, nleft); if (nread < 0) return nread; else if (nread == 0) break; nleft -= nread; ptr += nread; } return nbytes - nleft;}intwriten (register int fd, register char *ptr, register nbytes){ int nwritten, nleft = nbytes; while (nleft > 0) { nwritten = write (fd, ptr, nleft); if (nwritten <= 0) return nwritten; nleft -= nwritten; ptr += nwritten; } return nbytes - nleft;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -