2019-07-27 17:45:39 +00:00
|
|
|
using System;
|
|
|
|
using System.Runtime.InteropServices;
|
2019-08-15 14:56:20 +00:00
|
|
|
using PorygonSharp.EvalValues;
|
2019-07-27 17:45:39 +00:00
|
|
|
|
|
|
|
namespace PorygonSharp
|
|
|
|
{
|
|
|
|
internal struct EvaluateResult : IDisposable
|
|
|
|
{
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
|
|
private struct EvaluateResultInternal
|
|
|
|
{
|
|
|
|
public readonly IntPtr Value;
|
2019-08-15 14:56:20 +00:00
|
|
|
public readonly bool Result;
|
2019-07-27 17:45:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
private readonly IntPtr _ptr;
|
|
|
|
private readonly EvaluateResultInternal _internal;
|
|
|
|
public EvaluateResult(IntPtr ptr)
|
|
|
|
{
|
|
|
|
_ptr = ptr;
|
|
|
|
_internal = Marshal.PtrToStructure<EvaluateResultInternal>(ptr);
|
|
|
|
}
|
|
|
|
|
|
|
|
public EvalValue GetValue()
|
|
|
|
{
|
2019-08-15 14:56:20 +00:00
|
|
|
return new EvalValue(_internal.Value);
|
2019-07-27 17:45:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public bool IsSuccess()
|
|
|
|
{
|
2019-08-15 14:56:20 +00:00
|
|
|
return !_internal.Result;
|
2019-07-27 17:45:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public string GetError()
|
|
|
|
{
|
|
|
|
return GetErrorMessage(_ptr);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void Dispose()
|
|
|
|
{
|
|
|
|
Marshal.FreeHGlobal(_ptr);
|
|
|
|
}
|
|
|
|
|
|
|
|
[DllImport("libPorygonLang", EntryPoint = "GetResultError", CallingConvention = CallingConvention.Cdecl)]
|
|
|
|
private static extern string GetErrorMessage(IntPtr ptr);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|