点データの辞書式順序ソートの実行
Namespace: fvalgcliAssembly: fvalgcli (in fvalgcli.dll) Version: 3.1.0.0 (3.1.0.11)
Syntax
C# |
---|
public static int fnFIE_cg_ordering_data_sort( PNT_T_PTR pnts, int pnt_num, ref PNT_T_PTR ord_pnts, ref int ord_pnt_num, ref INT_PTR org_to_ord, ref INT_PTR ord_to_org ) |
Visual Basic |
---|
Public Shared Function fnFIE_cg_ordering_data_sort ( pnts As PNT_T_PTR, pnt_num As Integer, ByRef ord_pnts As PNT_T_PTR, ByRef ord_pnt_num As Integer, ByRef org_to_ord As INT_PTR, ByRef ord_to_org As INT_PTR ) As Integer |
Parameters
- pnts
- Type: fvalgcli..::..PNT_T_PTR
入力元データ
- pnt_num
- Type: System..::..Int32
入力元データの点の数( pnts の要素数 )
- ord_pnts
- Type: fvalgcli..::..PNT_T_PTR%
ソートデータ配列。(IntPtr.Zero で初期化してください。)- 確保されている要素数: pnt_num
- 有効な要素数: ord_pnt_num
- ord_pnt_num
- Type: System..::..Int32%
ソートデータの点の数( ord_pnts の有効な要素数 )
- org_to_ord
- Type: fvalgcli..::..INT_PTR%
元データ番号からソートデータ番号への変換表。(IntPtr.Zero で初期化してください。)- 確保されている要素数: pnt_num
- 有効な要素数: pnt_num
- ord_to_org
- Type: fvalgcli..::..INT_PTR%
ソートデータ番号から元データ番号への変換表。(IntPtr.Zero で初期化してください。)- 確保されている要素数: pnt_num
- 有効な要素数: ord_pnt_num
Return Value
Type: Int32以下のエラーコードを返します。
エラーコード:
f_err | 内容 |
---|---|
F_ERR_NONE | 正常終了 |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された |
F_ERR_NOMEMORY | メモリ不足 |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
Remarks
Examples
C# | Copy |
---|---|
// $Revision: 1.1 $ using System; using System.Collections.Generic; using System.Text; using fvalgcli; namespace TC { public partial class FIE { [FvPluginExecute] public void fnFIE_cg_ordering_data_sort() { int status = (int)f_err.F_ERR_NONE; PNT_T_PTR pnts = IntPtr.Zero; // [in] 入力元データ. int pnt_num = 16; // [in] 入力元データの点の数( pnts の要素数 ). PNT_T_PTR ord_pnts = IntPtr.Zero; // [out] ソートデータ配列. int ord_pnt_num = 0; // [out] ソートデータの点の数( ord_pnts, ord_to_org の有効な要素数 ). INT_PTR org_to_ord = IntPtr.Zero; // [out] 元データ番号からソートデータ番号への変換表. INT_PTR ord_to_org = IntPtr.Zero; // [out] ソートデータ番号から元データ番号への変換表. try { Random rand = new Random(); const int rand_min = 0; const int rand_max = 99; // 入力元データを確保、設定する. pnts = PNT_T_PTR.alloc(pnt_num); for (int i = 0; i < pnt_num; i++) { int x = rand.Next(rand_min, rand_max); int y = rand.Next(rand_min, rand_max); pnts[i] = PNT_T.init(x, y); } // 点データの辞書式順序ソートの実行. status = api.fnFIE_cg_ordering_data_sort(pnts, pnt_num, ref ord_pnts, ref ord_pnt_num, ref org_to_ord, ref ord_to_org); Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "エラーが発生しました。({0})", (f_err)status); // 結果を出力する. ConsoleOut.WriteFunctionName(": \t"); Console.Write("ord_pnt_num = {0}", ord_pnt_num); bool check = true; // 確認. { const int new_line = 8; // 入力元データ. Console.Write("\n\tpnts ..."); for (int i = 0; i < pnt_num; i++) { if (i % new_line == 0) Console.Write("\n\t"); Console.Write("[{0,2}]({1,2}, {2,2}),\t", i, pnts[i].x, pnts[i].y); } // ソートデータ. Console.Write("\n\tord_pnts ..."); int current_x = 0; int current_y = 0; for (int i = 0; i < ord_pnt_num; i++) { if (i % new_line == 0) Console.Write("\n\t"); Console.Write("[{0,2}]({1,2}, {2,2}),\t", i, ord_pnts[i].x, ord_pnts[i].y); // Compare ... if (ord_pnts[i].x < current_x) check = false; if (ord_pnts[i].x == current_x && ord_pnts[i].y <= current_y) check = false; current_x = ord_pnts[i].x; current_y = ord_pnts[i].y; } // 元データ番号からソートデータ番号への変換表. Console.Write("\n\torg_to_ord ..."); for (int i = 0; i < pnt_num; i++) { if (i % new_line == 0) Console.Write("\n\t"); int index = org_to_ord[i]; Console.Write("[{0,2}]{1,2},\t", i, index); // Compare ... if (pnts[i].x != ord_pnts[index].x || pnts[i].y != ord_pnts[index].y) check = false; } // ソートデータ番号から元データ番号への変換表. Console.Write("\n\tord_to_org ..."); for (int i = 0; i < ord_pnt_num; i++) { if (i % new_line == 0) Console.Write("\n\t"); int index = ord_to_org[i]; Console.Write("[{0,2}]{1,2},\t", i, index); // Compare ... if (ord_pnts[i].x != pnts[index].x || ord_pnts[i].y != pnts[index].y) check = false; } } Console.Write("\n\t... "); ConsoleOut.IsTrue(check); } catch (System.Exception ex) { throw ex; } finally { pnts.Dispose(); ord_pnts.Dispose(); org_to_ord.Dispose(); ord_to_org.Dispose(); } } } } |
Visual Basic | Copy |
---|---|
' $Revision: 1.1 $ Imports System.Collections.Generic Imports System.Text Imports fvalgcli Public Partial Class FIE <FvPluginExecute> _ Public Sub fnFIE_cg_ordering_data_sort() Dim status As Integer = CInt(f_err.F_ERR_NONE) Dim pnts As PNT_T_PTR = IntPtr.Zero ' [in] 入力元データ. Dim pnt_num As Integer = 16 ' [in] 入力元データの点の数( pnts の要素数 ). Dim ord_pnts As PNT_T_PTR = IntPtr.Zero ' [out] ソートデータ配列. Dim ord_pnt_num As Integer = 0 ' [out] ソートデータの点の数( ord_pnts, ord_to_org の有効な要素数 ). Dim org_to_ord As INT_PTR = IntPtr.Zero ' [out] 元データ番号からソートデータ番号への変換表. Dim ord_to_org As INT_PTR = IntPtr.Zero ' [out] ソートデータ番号から元データ番号への変換表. Try Dim rand As New Random() Const rand_min As Integer = 0 Const rand_max As Integer = 99 ' 入力元データを確保、設定する. pnts = PNT_T_PTR.alloc(pnt_num) For i As Integer = 0 To pnt_num - 1 Dim x As Integer = rand.[Next](rand_min, rand_max) Dim y As Integer = rand.[Next](rand_min, rand_max) pnts(i) = PNT_T.init(x, y) Next ' 点データの辞書式順序ソートの実行. status = api.fnFIE_cg_ordering_data_sort(pnts, pnt_num, ord_pnts, ord_pnt_num, org_to_ord, ord_to_org) Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "エラーが発生しました。({0})", CType(status, f_err)) ' 結果を出力する. ConsoleOut.WriteFunctionName(": " & vbTab) Console.Write("ord_pnt_num = {0}", ord_pnt_num) Dim check As Boolean = True ' 確認. If True Then Const new_line As Integer = 8 ' 入力元データ. Console.Write(vbLf & vbTab & "pnts ...") For i As Integer = 0 To pnt_num - 1 If i Mod new_line = 0 Then Console.Write(vbLf & vbTab) End If Console.Write("[{0,2}]({1,2}, {2,2})," & vbTab, i, pnts(i).x, pnts(i).y) Next ' ソートデータ. Console.Write(vbLf & vbTab & "ord_pnts ...") Dim current_x As Integer = 0 Dim current_y As Integer = 0 For i As Integer = 0 To ord_pnt_num - 1 If i Mod new_line = 0 Then Console.Write(vbLf & vbTab) End If Console.Write("[{0,2}]({1,2}, {2,2})," & vbTab, i, ord_pnts(i).x, ord_pnts(i).y) ' Compare ... If ord_pnts(i).x < current_x Then check = False End If If ord_pnts(i).x = current_x AndAlso ord_pnts(i).y <= current_y Then check = False End If current_x = ord_pnts(i).x current_y = ord_pnts(i).y Next ' 元データ番号からソートデータ番号への変換表. Console.Write(vbLf & vbTab & "org_to_ord ...") For i As Integer = 0 To pnt_num - 1 If i Mod new_line = 0 Then Console.Write(vbLf & vbTab) End If Dim index As Integer = org_to_ord(i) Console.Write("[{0,2}]{1,2}," & vbTab, i, index) ' Compare ... If pnts(i).x <> ord_pnts(index).x OrElse pnts(i).y <> ord_pnts(index).y Then check = False End If Next ' ソートデータ番号から元データ番号への変換表. Console.Write(vbLf & vbTab & "ord_to_org ...") For i As Integer = 0 To ord_pnt_num - 1 If i Mod new_line = 0 Then Console.Write(vbLf & vbTab) End If Dim index As Integer = ord_to_org(i) Console.Write("[{0,2}]{1,2}," & vbTab, i, index) ' Compare ... If ord_pnts(i).x <> pnts(index).x OrElse ord_pnts(i).y <> pnts(index).y Then check = False End If Next End If Console.Write(vbLf & vbTab & "... ") ConsoleOut.IsTrue(check) Catch ex As System.Exception Throw ex Finally pnts.Dispose() ord_pnts.Dispose() org_to_ord.Dispose() ord_to_org.Dispose() End Try End Sub End Class |