📄 fann_error.c
字号:
/* Fast Artificial Neural Network Library (fann) Copyright (C) 2003 Steffen Nissen (lukesky@diku.dk) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA*/#include <stdio.h>#include <stdlib.h>#include <stdarg.h>#include <string.h>#include "config.h"#include "fann.h"#include "fann_internal.h"#include "fann_errno.h"#ifdef _MSC_VER#define vsnprintf _vsnprintf#define snprintf _snprintf#endif/* resets the last error number */FANN_EXTERNAL void FANN_API fann_reset_errno(struct fann_error *errdat){ errdat->errno_f = 0;}/* resets the last errstr */FANN_EXTERNAL void FANN_API fann_reset_errstr(struct fann_error *errdat){ if ( errdat->errstr != NULL ) free(errdat->errstr); errdat->errstr = NULL;}/* returns the last error number */FANN_EXTERNAL unsigned int FANN_API fann_get_errno(struct fann_error *errdat){ return errdat->errno_f;}/* returns the last errstr */FANN_EXTERNAL char * FANN_API fann_get_errstr(struct fann_error *errdat){ char *errstr = errdat->errstr; fann_reset_errno(errdat); fann_reset_errstr(errdat); return errstr;}/* change where errors are logged to */FANN_EXTERNAL void FANN_API fann_set_error_log(struct fann_error *errdat, FILE *log_file){ errdat->error_log = log_file;}/* prints the last error to the error log (default stderr) */FANN_EXTERNAL void FANN_API fann_print_error(struct fann_error *errdat) { if ( (errdat->errno_f != FANN_E_NO_ERROR) && (errdat->error_log != NULL) ){ fputs(errdat->errstr, errdat->error_log); }}/* INTERNAL FUNCTION Populate the error information */void fann_error(struct fann_error *errdat, const unsigned int errno_f, ...){ va_list ap; char * errstr; if (errdat != NULL) errdat->errno_f = errno_f; if(errdat != NULL && errdat->errstr != NULL){ errstr = errdat->errstr; }else{ errstr = (char *)malloc(FANN_ERRSTR_MAX); if(errstr == NULL){ fprintf(stderr, "Unable to allocate memory.\n"); return; } } va_start(ap, errno_f); switch ( errno_f ) { case FANN_E_NO_ERROR: break; case FANN_E_CANT_OPEN_CONFIG_R: vsprintf(errstr, "Unable to open configuration file \"%s\" for reading.\n", ap); break; case FANN_E_CANT_OPEN_CONFIG_W: vsprintf(errstr, "Unable to open configuration file \"%s\" for writing.\n", ap); break; case FANN_E_WRONG_CONFIG_VERSION: vsprintf(errstr, "Wrong version of configuration file, aborting read of configuration file \"%s\".\n", ap); break; case FANN_E_CANT_READ_CONFIG: vsprintf(errstr, "Error reading info from configuration file \"%s\".\n", ap); break; case FANN_E_CANT_READ_NEURON: vsprintf(errstr, "Error reading neuron info from configuration file \"%s\".\n", ap); break; case FANN_E_CANT_READ_CONNECTIONS: vsprintf(errstr, "Error reading connections from configuration file \"%s\".\n", ap); break; case FANN_E_WRONG_NUM_CONNECTIONS: vsprintf(errstr, "ERROR connections_so_far=%d, total_connections=%d\n", ap); break; case FANN_E_CANT_OPEN_TD_W: vsprintf(errstr, "Unable to open train data file \"%s\" for writing.\n", ap); break; case FANN_E_CANT_OPEN_TD_R: vsprintf(errstr, "Unable to open train data file \"%s\" for writing.\n", ap); break; case FANN_E_CANT_READ_TD: vsprintf(errstr, "Error reading info from train data file \"%s\", line: %d.\n", ap); break; case FANN_E_CANT_ALLOCATE_MEM: sprintf(errstr, "Unable to allocate memory.\n"); break; case FANN_E_CANT_TRAIN_ACTIVATION: sprintf(errstr, "Unable to train with the selected activation function.\n"); break; case FANN_E_CANT_USE_ACTIVATION: sprintf(errstr, "Unable to use the selected activation function.\n"); break; case FANN_E_TRAIN_DATA_MISMATCH: sprintf(errstr, "Training data must be of equivalent structure."); break; default: vsprintf(errstr, "Unknown error.\n", ap); break; } va_end(ap); if ( errdat == NULL ) { fprintf(stderr, "FANN Error %d: %s", errno_f, errstr); } else { errdat->errstr = errstr; if ( errdat->error_log != NULL ) { fprintf(errdat->error_log, "FANN Error %d: %s", errno_f, errstr); } }}/* INTERNAL FUNCTION Initialize an error data strcuture */void fann_init_error_data(struct fann_error *errdat){ errdat->errstr = NULL; errdat->errno_f = 0; errdat->error_log = stderr;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -