cis_config
AsciiFileComm.h
1 #include <../tools.h>
2 #include <CommBase.h>
3 #include <../dataio/AsciiFile.h>
4 #include <../dataio/AsciiTable.h>
5 
7 #ifndef CISASCIIFILECOMM_H_
8 #define CISASCIIFILECOMM_H_
9 
11 static unsigned _cisAsciiFilesCreated;
12 
18 static inline
19 int init_ascii_file_comm(comm_t *comm) {
20  // Don't check base validity since address is name
21  comm->is_file = 1;
22  comm->type = ASCII_FILE_COMM;
23  strcpy(comm->address, comm->name);
24  asciiFile_t *handle = (asciiFile_t*)malloc(sizeof(asciiFile_t));
25  if (handle == NULL) {
26  cislog_error("init_ascii_file_comm: Failed to malloc asciiFile handle.");
27  return -1;
28  }
29  if (strcmp(comm->direction, "send") == 0)
30  handle[0] = asciiFile(comm->address, "w", NULL, NULL);
31  else
32  handle[0] = asciiFile(comm->address, "r", NULL, NULL);
33  comm->handle = (void*)handle;
34  int ret = af_open(handle);
35  if (ret != 0) {
36  cislog_error("init_ascii_file_comm: Could not open %s", comm->name);
37  comm->valid = 0;
38  }
39  return ret;
40 };
41 
47 static inline
48 int new_ascii_file_address(comm_t *comm) {
49  sprintf(comm->name, "temp%d", _cisAsciiFilesCreated);
50  int ret = init_ascii_file_comm(comm);
51  return ret;
52 };
53 
59 static inline
60 int free_ascii_file_comm(comm_t *x) {
61  if (x->handle != NULL) {
62  asciiFile_t *file = (asciiFile_t*)x->handle;
63  af_close(file);
64  free(x->handle);
65  x->handle = NULL;
66  }
67  return 0;
68 };
69 
75 static inline
76 int ascii_file_comm_nmsg(const comm_t x) {
77  // Prevent C4100 warning on windows by referencing param
78 #ifdef _WIN32
79  x;
80 #endif
81  // TODO: Count lines in file.
82  return 0;
83 };
84 
94 static inline
95 int ascii_file_comm_send(const comm_t x, const char *data, const size_t len) {
96  if (is_eof(data))
97  return 0;
98  // Prevent C4100 warning on windows by referencing param
99 #ifdef _WIN32
100  len;
101 #endif
102  asciiFile_t *file = (asciiFile_t*)x.handle;
103  return af_writeline_full(file[0], data);
104 };
105 
118 static inline
119 int ascii_file_comm_recv(const comm_t x, char **data, size_t len,
120  const int allow_realloc) {
121  asciiFile_t *file = (asciiFile_t*)x.handle;
122  if (allow_realloc) {
123  return af_readline_full(file[0], data, (size_t*)(&len));
124  } else {
125  return af_readline_full_norealloc(file[0], data[0], len);
126  }
127 };
128 
133 #define ascii_file_comm_send_nolimit ascii_file_comm_send
134 
139 #define ascii_file_comm_recv_nolimit ascii_file_comm_recv
140 
141 
142 #endif /*CISASCIIFILECOMM_H_*/
void * handle
Pointer to handle for comm.
Definition: CommBase.h:25
Communication structure.
Definition: CommBase.h:19
char address[COMM_ADDRESS_SIZE]
Comm address.
Definition: CommBase.h:22
comm_type type
Comm type.
Definition: CommBase.h:20
int is_file
Flag specifying if the comm connects directly to a file.
Definition: CommBase.h:36
char direction[COMM_DIR_SIZE]
send or recv for direction messages will go.
Definition: CommBase.h:23
char name[COMM_NAME_SIZE]
Comm name.
Definition: CommBase.h:21
int valid
1 if communicator initialized, 0 otherwise.
Definition: CommBase.h:24
Structure containing information about an ASCII text file.
Definition: AsciiFile.h:11