#include "labcomm.h"
#include "labcomm_private.h"
#include "jg.h"

static unsigned char signature_bytes_jg_foo[] = {
// struct { 8 fields
17, 
  8, 
  // double 'b'
  1, 
  98, 
  38, 
  // int 'c'
  1, 
  99, 
  35, 
  // int 'd'
  1, 
  100, 
  35, 
  // string 'e'
  1, 
  101, 
  39, 
  // boolean 'f'
  1, 
  102, 
  32, 
  // short 'g'
  1, 
  103, 
  34, 
  // long 'h'
  1, 
  104, 
  36, 
  // float 'i'
  1, 
  105, 
  37, 
// }
};
struct labcomm_signature labcomm_signature_jg_foo = {
  LABCOMM_SAMPLE, "foo",
  (int (*)(struct labcomm_signature *, void *))labcomm_sizeof_jg_foo,
  sizeof(signature_bytes_jg_foo),
  signature_bytes_jg_foo,
  0
 };
static void decode_jg_foo(
  struct labcomm_reader *r,
  void (*handle)(
    jg_foo *v,
    void *context
  ),
  void *context
)
{
  jg_foo v;
  v.b = labcomm_read_double(r);
  v.c = labcomm_read_int(r);
  v.d = labcomm_read_int(r);
  v.e = labcomm_read_string(r);
  v.f = labcomm_read_boolean(r);
  v.g = labcomm_read_short(r);
  v.h = labcomm_read_long(r);
  v.i = labcomm_read_float(r);
  handle(&v, context);
  {
    labcomm_memory_free(r->memory, 1, v.e);
  }
}
int labcomm_decoder_register_jg_foo(
  struct labcomm_decoder *d,
  void (*handler)(
    jg_foo *v,
    void *context
  ),
  void *context
)
{
  return labcomm_internal_decoder_register(
    d,
    &labcomm_signature_jg_foo,
    (labcomm_decoder_function)decode_jg_foo,
    (labcomm_handler_function)handler,
    context
  );
}
int labcomm_decoder_ioctl_jg_foo(
  struct labcomm_decoder *d,
  int ioctl_action,
  ...
)
{
  int result;
  va_list va;
  va_start(va, ioctl_action);
  result = labcomm_internal_decoder_ioctl(
    d, &labcomm_signature_jg_foo, 
    ioctl_action, va);
  va_end(va);
  return result;
}
static int encode_jg_foo(
  struct labcomm_writer *w,
  jg_foo *v
)
{
  int result = 0;
  result = labcomm_write_double(w, (*v).b);
  if (result != 0) { return result; }
  result = labcomm_write_int(w, (*v).c);
  if (result != 0) { return result; }
  result = labcomm_write_int(w, (*v).d);
  if (result != 0) { return result; }
  result = labcomm_write_string(w, (*v).e);
  if (result != 0) { return result; }
  result = labcomm_write_boolean(w, (*v).f);
  if (result != 0) { return result; }
  result = labcomm_write_short(w, (*v).g);
  if (result != 0) { return result; }
  result = labcomm_write_long(w, (*v).h);
  if (result != 0) { return result; }
  result = labcomm_write_float(w, (*v).i);
  if (result != 0) { return result; }
  return result;
}
int labcomm_encode_jg_foo(
struct labcomm_encoder *e,
jg_foo *v
)
{
return labcomm_internal_encode(e, &labcomm_signature_jg_foo, (labcomm_encoder_function)encode_jg_foo, v);
}
int labcomm_encoder_register_jg_foo(
  struct labcomm_encoder *e
)
{
  return labcomm_internal_encoder_register(
    e,
    &labcomm_signature_jg_foo,
    (labcomm_encoder_function)encode_jg_foo
  );
}
int labcomm_encoder_ioctl_jg_foo(
  struct labcomm_encoder *e,
  int ioctl_action,
  ...
)
{
  int result;
  va_list va;
  va_start(va, ioctl_action);
  result = labcomm_internal_encoder_ioctl(
    e, &labcomm_signature_jg_foo, 
    ioctl_action, va);
  va_end(va);
  return result;
}
int labcomm_sizeof_jg_foo(jg_foo *v)
{
  int result = labcomm_size_packed32(labcomm_signature_jg_foo.index);
  result += 0 + strlen((*v).e);
  result += 31;
  return result;
}
LABCOMM_CONSTRUCTOR void init_jg__signatures(void)
{
  static int initialized = 0;
  if (initialized == 0) {
    initialized = 1;
    labcomm_set_local_index(&labcomm_signature_jg_foo);
  }
}