点データの辞書式順序ソートの実行

Namespace: fvalgcli
Assembly: 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 imageCopy
//    $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 imageCopy
'    $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

See Also