Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 45 additions & 43 deletions dotnet/DDS_Core/DDS.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Text;
using DDS_Core.Helpers;
using DDS_Core.Native;
using static System.Formats.Asn1.AsnWriter;

namespace DDS_Core;

Expand Down Expand Up @@ -77,9 +75,7 @@ public int SetThreading(in int code)
/// <param name="maxMemoryMB">Maximum memory in megabytes.</param>
/// <param name="maxThreads">Maximum number of threads.</param>
[Obsolete("Use SolverContext instead.")]
public void SetResources(in int maxMemoryMB, in int maxThreads)

=> DdsNative.SetResources(maxMemoryMB, maxThreads);
public void SetResources(in int maxMemoryMB, in int maxThreads) => DdsNative.SetResources(maxMemoryMB, maxThreads);

Comment thread
mortensp marked this conversation as resolved.
/// <summary>
/// Frees memory used by the solver.
Expand Down Expand Up @@ -189,6 +185,8 @@ public int SolveAllBoards( in BoardsPBN boards
public int SolveAllBoards( in Boards bop
, out SolvedBoards solved)
{
solved = default;

//Note: To step into c++ code you must set a break in c++?
var rc = DdsNative.SolveAllBoardsBin( bop
, out solved);
Expand Down Expand Up @@ -290,12 +288,13 @@ public int CalcAllTables( in DdTableDealsPBN dealsp
/// and contracts for both North-South and East-West, based on vulnerability.
/// </summary>
/// <param name="table"></param>
/// <param name="pres"></param>
/// <param name="vulnerable"></param>
/// <param name="pres"></param>
/// <returns></returns>
public int Par( in DdTableResults table
, in int vulnerable
, out ParResults pres
, in int vulnerable)
)
{
var rc = DdsNative.Par( table
, out pres
Expand Down Expand Up @@ -362,23 +361,23 @@ public int CalcPar( in DdTableDeal tableDeal
/// </para>
/// </remarks>
/// <param name="tableDealPBN">
/// Deal represented as card holdings for each hand.
/// Deal represented as a PBN string for each hand.
/// </param>
/// <param name="vulnerable">
/// Vulnerability (0=None, 1=Both, 2=NS, 3=EW).
/// </param>
/// <param name="tableResults">
/// Output: double dummy table results.
/// </param>
/// /// <param name="vulnerable">
/// Vulnerability (0=None, 1=Both, 2=NS, 3=EW).
/// </param>
/// <param name="parResults">
/// Output: par score and contract strings.
/// </param>
/// <returns>
/// Error code (<c>RETURN_NO_FAULT</c> on success).
/// </returns>
public int CalcPar( in DdTableDealPBN tableDealPBN
, out DdTableResults tableResults
, in int vulnerable
Comment thread
mortensp marked this conversation as resolved.
, out DdTableResults tableResults
, out ParResults parResults)
{
var rc = DdsNative.CalcParPBN( tableDealPBN
Expand All @@ -394,12 +393,13 @@ public int CalcPar( in DdTableDealPBN tableDealPBN
/// Calculates par score and contracts for both sides based on the double dummy table results.
/// </summary>
/// <param name="table">Double dummy table results.</param>
/// <param name="sidesRes">Output: par results for both sides.</param>
/// <param name="vulnerable">Vulnerability (0=None, 1=Both, 2=NS, 3=EW).</param>
/// <param name="sidesRes">Output: par results for both sides.</param>
/// <returns>Error code (<c>RETURN_NO_FAULT</c> on success).</returns>
public int ParSide( in DdTableResults table
, in int vulnerable
, out ParResultsDealers sidesRes
, in int vulnerable)
)
{
var rc = DdsNative.SidesPar( table
, out sidesRes
Expand All @@ -413,14 +413,15 @@ public int ParSide( in DdTableResults table
/// Calculates par score and contracts for a specific dealer and vulnerability.
/// </summary>
/// <param name="table"></param>
/// <param name="pres"></param>
/// <param name="dealer"></param>
/// <param name="vulnerable"></param>
/// <param name="pres"></param>
/// <returns></returns>
public int ParDealer( in DdTableResults table
, out ParResultsDealer pres
, in int dealer
, in int vulnerable)
, in int vulnerable
, out ParResultsDealer pres
)
{
var rc = DdsNative.DealerPar( table
, out pres
Expand All @@ -435,14 +436,15 @@ public int ParDealer( in DdTableResults table
/// Calculates par score and contract types for both sides for a specific dealer and vulnerability.
/// </summary>
/// <param name="table"></param>
/// <param name="pres"></param>
/// <param name="dealer"></param>
/// <param name="vulnerable"></param>
/// <param name="pres"></param>
/// <returns></returns>
public int DealerParBothSides( in DdTableResults table
, out ParResultsMaster pres
, in int dealer
, in int vulnerable)
, in int vulnerable
, out ParResultsMaster pres
)
{
var rc = DdsNative.DealerParBin( table
, out pres
Expand All @@ -457,12 +459,13 @@ public int DealerParBothSides( in DdTableResults table
/// calculates par score and contract types for both sides based on the double dummy table results.
/// </summary>
/// <param name="table">Double dummy table results.</param>
/// <param name="sidesRes">Output: par results for both sides.</param>
/// <param name="vulnerable">Vulnerability (0=None, 1=Both, 2=NS, 3=EW).</param>
/// <param name="sidesRes">Output: par results for both sides.</param>
/// <returns>Error code (<c>RETURN_NO_FAULT</c> on success).</returns>
public int ParAll( in DdTableResults table
, in int vulnerable
, out ParResultsMasters sidesRes
, in int vulnerable)
)
{
var rc = DdsNative.SidesParBin( table
, out sidesRes
Expand All @@ -479,13 +482,14 @@ public int ParAll( in DdTableResults table
/// </summary>
/// <param name="dl">The deal to analyze.</param>
/// <param name="play">The play trace to analyze.</param>
/// <param name="solved">The result of the analysis, including optimal line and tricks.</param>
/// <param name="thrId">The thread ID for parallel processing.</param>
/// <param name="solved">The result of the analysis, including optimal line and tricks.</param>
/// <returns>Error code (<c>RETURN_NO_FAULT</c> on success).</returns>
public int AnalysePlay( in Deal dl
, in PlayTraceBin play
, in int thrId
, out SolvedPlay solved
, in int thrId)
)
{
var rc = DdsNative.AnalysePlayBin( dl
, in play
Expand All @@ -500,13 +504,14 @@ public int AnalysePlay( in Deal dl
/// </summary>
/// <param name="dlPBN">The PBN deal to analyze.</param>
/// <param name="playPBN">The play trace in PBN format to analyze.</param>
/// <param name="solved">The result of the analysis, including optimal line and tricks.</param>
/// <param name="thrId">The thread ID for parallel processing.</param>
/// <param name="solved">The result of the analysis, including optimal line and tricks.</param>
/// <returns>Error code (<c>RETURN_NO_FAULT</c> on success).</returns>
public int AnalysePlay( in DealPBN dlPBN
, in PlayTracePBN playPBN
, in int thrId
, out SolvedPlay solved
, in int thrId)
)
{
var rc = DdsNative.AnalysePlayPBN( dlPBN
, in playPBN
Expand All @@ -521,39 +526,39 @@ public int AnalysePlay( in DealPBN dlPBN
/// </summary>
/// <param name="bop">The boards to analyze.</param>
/// <param name="plp">The play traces to analyze.</param>
/// <param name="solved">The result of the analysis, including optimal lines and tricks.</param>
/// <param name="chunkSize">The chunk size for parallel processing.</param>
/// <param name="solved">The result of the analysis, including optimal lines and tricks.</param>
/// <returns>Error code (<c>RETURN_NO_FAULT</c> on success).</returns>
public int AnalyseAllPlays( in Boards bop
, in PlayTracesBin plp
, in int chunkSize
, out SolvedPlays solved
, in int chunkSize)
)
{

solved = new();
solved = new();

var rc = DdsNative.AnalyseAllPlaysBin( bop
, plp
, out solved
, chunkSize);
var rc = DdsNative.AnalyseAllPlaysBin( bop
, plp
, out solved
, chunkSize);

ThrowIfError(rc, nameof(AnalyseAllPlays));
return rc;

ThrowIfError(rc, nameof(AnalyseAllPlays));
return rc;
}

/// <summary>
/// Analyzes all play traces for a given set of boards in PBN format and determines the optimal lines of play.
/// </summary>
/// <param name="bopPBN">The boards in PBN format to analyze.</param>
/// <param name="plpPBN">The play traces in PBN format to analyze.</param>
/// <param name="solved">The result of the analysis, including optimal lines and tricks.</param>
/// <param name="chunkSize">The chunk size for parallel processing.</param>
/// <param name="solved">The result of the analysis, including optimal lines and tricks.</param>
/// <returns>Error code (<c>RETURN_NO_FAULT</c> on success).</returns>
public int AnalyseAllPlays( in BoardsPBN bopPBN
, in PlayTracesPBN plpPBN
, in int chunkSize
, out SolvedPlays solved
, in int chunkSize)
)
{
solved = new();
var rc = DdsNative.AnalyseAllPlaysPBN( bopPBN
Expand Down Expand Up @@ -621,17 +626,14 @@ public void ErrorMessage( in int code
DdsNative.ErrorMessage(code, str);
line = str.ToString();
}


#endregion

#region private methods
[Conditional("DEBUG")]
private static void ThrowIfError(in int result, in string functionName)
{
#if DEBUG
if (result != (int)SolveBoardResult.NoFault)
throw new InvalidOperationException($"{functionName} failed with code {result}: {result.GetRCErrorMessage()}");
#endif
}
#endregion
}
18 changes: 6 additions & 12 deletions dotnet/DDS_Core/DataModel/SolverContext.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using DDS_Core.Helpers;
using DDS_Core.Native;

Expand Down Expand Up @@ -66,17 +61,17 @@ public int SolveBoard( in Deal dl
#region CalcDdTable - Double Dummy Table and Par
public int CalcDdTable(in DdTableDeal table_deal, out DdTableResults table_results)
{
var rc = DdsNative.calc_ddtable( Handle
var rc = DdsNative.dds_calc_dd_table( Handle
, in table_deal
, out table_results);

ThrowIfError(rc, nameof(SolveBoard));
ThrowIfError(rc, nameof(CalcDdTable));
return rc;
}

public int CalcDdTable(in DdTableDealPBN table_deal_pbn, out DdTableResults table_results)
{
var rc = DdsNative.calc_ddtable_pbn( Handle
var rc = DdsNative.dds_calc_dd_table_pbn( Handle
, in table_deal_pbn
, out table_results);

Expand Down Expand Up @@ -117,7 +112,7 @@ public int CalcPar( in DdTableDeal table_deal
, out DdTableResults table_results
, out ParResults par_results)
{
var rc = DdsNative.calc_par( Handle
var rc = DdsNative.dds_calc_par( Handle
, in table_deal
, vulnerable
, out table_results
Expand All @@ -142,12 +137,11 @@ public int CalcPar( in DdTableDeal table_deal
#endregion

#region private methods
[Conditional("DEBUG")]
private static void ThrowIfError(int result, string functionName)
{
#if DEBUG
if (result != (int)SolveBoardResult.NoFault)
throw new InvalidOperationException($"{functionName} failed with code {result}: {result.GetRCErrorMessage()}");
#endif
}
#endregion
}
Expand Down
8 changes: 1 addition & 7 deletions dotnet/DDS_Core/Helpers/SolverContextHandle.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Metadata;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using DDS_Core.Native;

namespace DDS_Core;
Expand Down
14 changes: 6 additions & 8 deletions dotnet/DDS_Core/Native/DdsNative.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
using System;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices;
using System.Text;
using static System.Net.WebRequestMethods;

namespace DDS_Core.Native;

Expand Down Expand Up @@ -59,18 +57,18 @@ public static extern int dds_solve_board( SolverContextHandle ctx

#region Call_dd
// [DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
//public static extern int calc_ddtable( in DdTableDeal table_deal
//public static extern int dds_calc_dd_table( in DdTableDeal table_deal
// , out DdTableResults table_results);
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
public static extern int calc_ddtable( SolverContextHandle ctx
public static extern int dds_calc_dd_table( SolverContextHandle ctx
, in DdTableDeal table_deal
, out DdTableResults table_results);

// [DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
//public static extern int calc_dd_table_pbn( in DdTableDealPBN table_deal_pbn
//public static extern int dds_calc_dd_table_pbn( in DdTableDealPBN table_deal_pbn
// , out DdTableResults table_results);
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
public static extern int calc_ddtable_pbn( SolverContextHandle ctx
public static extern int dds_calc_dd_table_pbn( SolverContextHandle ctx
, in DdTableDealPBN table_deal_pbn
, out DdTableResults table_results);
#endregion
Expand All @@ -82,7 +80,7 @@ public static extern int calc_ddtable_pbn( SolverContextHandle ctx
// , out DdTableResults table_results
// , out ParResults par_results);
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
public static extern int calc_par( SolverContextHandle ctx
public static extern int dds_calc_par( SolverContextHandle ctx
, in DdTableDeal table_deal
, int vulnerable
, out DdTableResults table_results
Expand Down
Loading
Loading