cis_config
CisInterface.h
1 #include <../tools.h>
2 #include <../communication/communication.h>
3 #include <../dataio/AsciiFile.h>
4 #include <../dataio/AsciiTable.h>
5 
7 #ifndef CISINTERFACE_H_
8 #define CISINTERFACE_H_
9 
11 #define cisOutput_t comm_t
12 #define cisInput_t comm_t
13 #define cis_free free_comm
14 
15 //==============================================================================
40 //==============================================================================
41 
52 static inline
53 cisOutput_t cisOutputFmt(const char *name, const char *fmtString){
54  cisOutput_t ret = init_comm(name, "send", _default_comm,
55  (void*)fmtString);
56  return ret;
57 };
58 
68 static inline
69 cisInput_t cisInputFmt(const char *name, const char *fmtString){
70  cisInput_t ret = init_comm(name, "recv", _default_comm,
71  (void*)fmtString);
72  return ret;
73 };
74 
82 static inline
83 cisOutput_t cisOutput(const char *name) {
84  cisOutput_t ret = cisOutputFmt(name, NULL);
85  return ret;
86 };
87 
95 static inline
96 cisInput_t cisInput(const char *name){
97  cisInput_t ret = cisInputFmt(name, NULL);
98  return ret;
99 };
100 
110 static inline
111 int cis_send(const cisOutput_t cisQ, const char *data, const size_t len) {
112  return comm_send(cisQ, data, len);
113 };
114 
120 static inline
121 int cis_send_eof(const cisOutput_t cisQ) {
122  return comm_send_eof(cisQ);
123 };
124 
135 static inline
136 int cis_recv(const cisInput_t cisQ, char *data, const size_t len){
137  return comm_recv(cisQ, data, len);
138 };
139 
151 static inline
152 int cis_send_nolimit(const cisOutput_t cisQ, const char *data, const size_t len){
153  return comm_send_nolimit(cisQ, data, len);
154 };
155 
161 static inline
162 int cis_send_nolimit_eof(const cisOutput_t cisQ) {
163  return comm_send_nolimit_eof(cisQ);
164 };
165 
179 static inline
180 int cis_recv_nolimit(const cisInput_t cisQ, char **data, const size_t len0){
181  return comm_recv_nolimit(cisQ, data, len0);
182 };
183 
184 
185 //==============================================================================
207 //==============================================================================
208 
218 static inline
219 int vcisSend(const cisOutput_t cisQ, va_list ap) {
220  return vcommSend(cisQ, ap);
221 };
222 
235 static inline
236 int vcisRecv(const cisInput_t cisQ, va_list ap) {
237  return vcommRecv(cisQ, ap);
238 };
239 
249 static inline
250 int cisSend(const cisOutput_t cisQ, ...){
251  va_list ap;
252  va_start(ap, cisQ);
253  int ret = vcommSend(cisQ, ap);
254  va_end(ap);
255  return ret;
256 };
257 
269 static inline
270 int cisRecv(const cisInput_t cisQ, ...){
271  va_list ap;
272  va_start(ap, cisQ);
273  int ret = vcommRecv(cisQ, ap);
274  va_end(ap);
275  return ret;
276 };
277 
288 static inline
289 int vcisSend_nolimit(const cisOutput_t cisQ, va_list ap) {
290  return vcommSend_nolimit(cisQ, ap);
291 };
292 
305 static inline
306 int vcisRecv_nolimit(const cisInput_t cisQ, va_list ap) {
307  return vcommRecv_nolimit(cisQ, ap);
308 };
309 
320 static inline
321 int cisSend_nolimit(const cisOutput_t cisQ, ...) {
322  va_list ap;
323  va_start(ap, cisQ);
324  int ret = vcommSend_nolimit(cisQ, ap);
325  va_end(ap);
326  return ret;
327 };
328 
340 static inline
341 int cisRecv_nolimit(const cisInput_t cisQ, ...) {
342  va_list ap;
343  va_start(ap, cisQ);
344  int ret = vcommRecv_nolimit(cisQ, ap);
345  va_end(ap);
346  return ret;
347 };
348 
349 
350 //==============================================================================
392 //==============================================================================
393 
399 #define cisRpc_t comm_t
400 
411 static inline
412 cisRpc_t cisRpc(const char *name, const char *outFormat, const char *inFormat) {
413  return init_comm(name, outFormat, RPC_COMM, inFormat);
414 };
415 
426 static inline
427 comm_t cisRpcClient(const char *name, const char *outFormat, const char *inFormat){
428  return init_comm(name, outFormat, CLIENT_COMM, inFormat);
429 };
430 
441 static inline
442 comm_t cisRpcServer(const char *name, const char *inFormat, const char *outFormat){
443  return init_comm(name, inFormat, SERVER_COMM, outFormat);
444 };
445 
456 static inline
457 int vrpcSend(const cisRpc_t rpc, va_list ap) {
458  int ret = vcommSend_nolimit(rpc, ap);
459  return ret;
460 };
461 
475 static inline
476 int vrpcRecv(const cisRpc_t rpc, va_list ap) {
477  int ret = vcommRecv_nolimit(rpc, ap);
478  return ret;
479 };
480 
491 static inline
492 int rpcSend(const cisRpc_t rpc, ...){
493  va_list ap;
494  va_start(ap, rpc);
495  int ret = vrpcSend(rpc, ap);
496  va_end(ap);
497  return ret;
498 };
499 
513 static inline
514 int rpcRecv(const cisRpc_t rpc, ...) {
515  va_list ap;
516  va_start(ap, rpc);
517  int ret = vrpcRecv(rpc, ap);
518  va_end(ap);
519  return ret;
520 };
521 
535 static inline
536 int vrpcCall(const cisRpc_t rpc, va_list ap) {
537  int sret, rret;
538  rret = 0;
539 
540  // Create copy for receiving
541  va_list op;
542  va_copy(op, ap);
543 
544  // pack the args and call
545  sret = vcommSend_nolimit(rpc, ap);
546  if (sret < 0) {
547  cislog_error("vrpcCall: vcisSend_nolimit error: ret %d: %s", sret, strerror(errno));
548  return -1;
549  }
550 
551  // Advance through sent arguments
552  cislog_debug("vrpcCall: Used %d arguments in send", sret);
553  int i;
554  for (i = 0; i < sret; i++) {
555  va_arg(op, void*);
556  }
557 
558  // unpack the messages into the remaining variable arguments
559  // va_list op;
560  // va_copy(op, ap);
561  rret = vcommRecv_nolimit(rpc, op);
562  va_end(op);
563 
564  return rret;
565 };
566 
580 static inline
581 int rpcCall(const cisRpc_t rpc, ...){
582  int ret;
583  va_list ap;
584  va_start(ap, rpc);
585  ret = vrpcCall(rpc, ap);
586  va_end(ap);
587  return ret;
588 };
589 
590 
591 //==============================================================================
630 //==============================================================================
631 
633 #define cisAsciiFileInput_t comm_t
634 #define cisAsciiFileOutput_t comm_t
635 
641 static inline
642 comm_t cisAsciiFileOutput(const char *name) {
643  comm_t out = init_comm(name, "send", _default_comm, NULL);
644  return out;
645 };
646 
652 static inline
653 comm_t cisAsciiFileOutput_local(const char *name) {
654  comm_t out = init_comm(name, "send", ASCII_FILE_COMM, NULL);
655  return out;
656 };
657 
663 static inline
664 comm_t cisAsciiFileInput(const char *name) {
665  comm_t out = init_comm(name, "recv", _default_comm, NULL);
666  return out;
667 };
668 
669 
675 static inline
676 comm_t cisAsciiFileInput_local(const char *name) {
677  comm_t out = init_comm(name, "recv", ASCII_FILE_COMM, NULL);
678  return out;
679 };
680 
681 
682 
683 //==============================================================================
766 //==============================================================================
767 
769 #define cisAsciiTableInput_t comm_t
770 #define cisAsciiTableOutput_t comm_t
771 #define cisAsciiArrayInput_t comm_t
772 #define cisAsciiArrayOutput_t comm_t
773 
781 static inline
782 comm_t cisAsciiTableOutput(const char *name, const char *format_str) {
783  int flag = 0;
784  comm_t out = init_comm(name, "send", _default_comm, NULL);
785  if (out.valid) {
786  flag = update_serializer(out.serializer, ASCII_TABLE_SERI,
787  (void*)format_str);
788  if (flag == 0) {
789  asciiTable_t *table = (asciiTable_t*)(out.serializer->info);
790  flag = at_update(table, name, "0");
791  }
792  }
793  // TODO: Make sure this is freed.
794  /* asciiTable_t *table = (asciiTable_t*)malloc(sizeof(asciiTable_t)); */
795  /* table[0] = asciiTable(name, "0", format_str, */
796  /* NULL, NULL, NULL); */
797  /* out.serializer.type = ASCII_TABLE_SERI; */
798  /* out.serializer.info = (void*)table; */
799  if (flag < 0) {
800  out.valid = 0;
801  }
802  return out;
803 };
804 
810 static inline
811 comm_t cisAsciiTableInput(const char *name) {
812  return init_comm(name, "recv", _default_comm, NULL);
813 };
814 
822 static inline
823 comm_t cisAsciiTableOutput_local(const char *name, const char *format_str) {
824  return init_comm(name, "send", ASCII_TABLE_COMM, (void*)format_str);
825 };
826 
832 static inline
833 comm_t cisAsciiTableInput_local(const char *name) {
834  return init_comm(name, "recv", ASCII_TABLE_COMM, NULL);
835 };
836 
844 static inline
845 comm_t cisAsciiArrayOutput(const char *name, const char *format_str) {
846  comm_t out = cisAsciiTableOutput(name, format_str);
847  out.serializer->type = ASCII_TABLE_ARRAY_SERI;
848  return out;
849 };
850 
856 static inline
857 comm_t cisAsciiArrayInput(const char *name) {
858  comm_t out = cisAsciiTableInput(name);
859  // Don't set this so it is updated when it is received.
860  // out.serializer->type = ASCII_TABLE_ARRAY_SERI;
861  return out;
862 };
863 
871 static inline
872 comm_t cisAsciiArrayOutput_local(const char *name, const char *format_str) {
873  comm_t out = init_comm(name, "send", ASCII_TABLE_COMM, (void*)format_str);
874  out.serializer->type = ASCII_TABLE_ARRAY_SERI;
875  return out;
876 };
877 
883 static inline
884 comm_t cisAsciiArrayInput_local(const char *name) {
885  comm_t out = init_comm(name, "recv", ASCII_TABLE_COMM, NULL);
886  out.serializer->type = ASCII_TABLE_ARRAY_SERI;
887  return out;
888 };
889 
890 #endif /*CISINTERFACE_H_*/
Communication structure.
Definition: CommBase.h:19
Structure containing information about an ASCII table.
Definition: AsciiTable.h:76