#pragma once
// AUTOGENERATED FILE: DO NOT EDIT

#include <stdint.h>
#include "object.h"

/** @cond */

#define IVaultKeeper_OP_readSbox 0
#define IVaultKeeper_OP_readVault 1
#define IVaultKeeper_OP_writeVault 2

static inline int32_t
IVaultKeeper_release(Object self)
{
  return Object_invoke(self, Object_OP_release, 0, 0);
}

static inline int32_t
IVaultKeeper_retain(Object self)
{
  return Object_invoke(self, Object_OP_retain, 0, 0);
}

static inline int32_t
IVaultKeeper_readSbox(Object self, uint32_t commandProtocol_val, uint32_t commandNumber_val, const void *clientId_ptr, size_t clientId_len, uint32_t sboxType_val, void *output_ptr, size_t output_len, size_t *output_lenout)
{
  ObjectArg a[3];
  struct {
    uint32_t m_commandProtocol;
    uint32_t m_commandNumber;
    uint32_t m_sboxType;
  } i;
  a[0].b = (ObjectBuf) { &i, 12 };
  i.m_commandProtocol = commandProtocol_val;
  i.m_commandNumber = commandNumber_val;
  a[1].bi = (ObjectBufIn) { clientId_ptr, clientId_len * 1 };
  i.m_sboxType = sboxType_val;
  a[2].b = (ObjectBuf) { output_ptr, output_len * 1 };

  int32_t result = Object_invoke(self, IVaultKeeper_OP_readSbox, a, ObjectCounts_pack(2, 1, 0, 0));

  *output_lenout = a[2].b.size / 1;

  return result;
}

static inline int32_t
IVaultKeeper_readVault(Object self, uint32_t commandProtocol_val, uint32_t commandNumber_val, const void *clientId_ptr, size_t clientId_len, uint32_t vaultType_val, void *output_ptr, size_t output_len, size_t *output_lenout)
{
  ObjectArg a[3];
  struct {
    uint32_t m_commandProtocol;
    uint32_t m_commandNumber;
    uint32_t m_vaultType;
  } i;
  a[0].b = (ObjectBuf) { &i, 12 };
  i.m_commandProtocol = commandProtocol_val;
  i.m_commandNumber = commandNumber_val;
  a[1].bi = (ObjectBufIn) { clientId_ptr, clientId_len * 1 };
  i.m_vaultType = vaultType_val;
  a[2].b = (ObjectBuf) { output_ptr, output_len * 1 };

  int32_t result = Object_invoke(self, IVaultKeeper_OP_readVault, a, ObjectCounts_pack(2, 1, 0, 0));

  *output_lenout = a[2].b.size / 1;

  return result;
}

static inline int32_t
IVaultKeeper_writeVault(Object self, uint32_t commandProtocol_val, uint32_t commandNumber_val, const void *clientId_ptr, size_t clientId_len, uint32_t vaultType_val, const void *input_ptr, size_t input_len)
{
  ObjectArg a[3];
  struct {
    uint32_t m_commandProtocol;
    uint32_t m_commandNumber;
    uint32_t m_vaultType;
  } i;
  a[0].b = (ObjectBuf) { &i, 12 };
  i.m_commandProtocol = commandProtocol_val;
  i.m_commandNumber = commandNumber_val;
  a[1].bi = (ObjectBufIn) { clientId_ptr, clientId_len * 1 };
  i.m_vaultType = vaultType_val;
  a[2].bi = (ObjectBufIn) { input_ptr, input_len * 1 };

  return Object_invoke(self, IVaultKeeper_OP_writeVault, a, ObjectCounts_pack(3, 0, 0, 0));
}



