#pragma once
/***********************************************************
 Copyright (c) 2019 Qualcomm Technologies, Inc.
 All Rights Reserved.
 Confidential and Proprietary - Qualcomm Technologies, Inc.
************************************************************/

/**
 * Interface to the SMCInvoke skeleton_app functionality.
 */

/** @cond */

// AUTOGENERATED FILE: DO NOT EDIT

#include <cstdint>
#include "object.h"
#include "proxy_base.hpp"

class IISMCIExample {
   public:
    virtual ~IISMCIExample() {}

    virtual int32_t add(uint32_t val1_val, uint32_t val2_val, uint32_t* result_ptr) = 0;

   protected:
    static const ObjectOp OP_add = 0;
};

class ISMCIExample : public IISMCIExample, public ProxyBase {
   public:
    ISMCIExample() {}
    ISMCIExample(Object impl) : ProxyBase(impl) {}
    virtual ~ISMCIExample() {}

    virtual int32_t add(uint32_t val1_val, uint32_t val2_val, uint32_t* result_ptr) {
        ObjectArg a[2]={{{0,0}}};
        struct s1 {
            uint32_t m_val1;
            uint32_t m_val2;
        } i;
        a[0].b = (ObjectBuf) {&i, 8};
        i.m_val1 = val1_val;
        i.m_val2 = val2_val;
        a[1].b = (ObjectBuf) {result_ptr, sizeof(uint32_t)};

        return invoke(OP_add, a, ObjectCounts_pack(1, 1, 0, 0));
    }

};

