double書き込み (Scilab ゲートウェイ) リスト中にdoubleの行列を追加する方法.
既存のデータから作成.

## 呼び出し手順

入力引数プロファイル:

    SciErr createMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const double* _pdblReal)

    SciErr createComplexMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const double* _pdblReal, const double* _pdblImg)

名前指定変数プロファイル:

    SciErr createMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const double* _pdblReal)

    SciErr createComplexMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const double* _pdblReal, const double* _pdblImg)

## 引数

_pvCtx

  Scilab環境ポインタ, api_scilab.hで定義された"pvApiCtx"で指定.

_iVar

  変数を代入したいScilabメモリの位置.

_pstName

  "名前指定" 関数の変数名.

_piParent

  新規要素の親のアドレス.

_iItemPos

  リストにおける新規要素の位置.

_iRows

  新規変数の行数.

_iCols

  新規変数の列数.

_pdblReal

  データ配列(大きさ: _iCols * _iRows)の実部のアドレス.

_pdblImg

  データ配列(大きさ: _iCols * _iRows)の虚部のアドレス.

SciErr

  エラーメッセージの履歴と最初のエラー番号が保存されるエラー構造体.

Scilabメモリに直接書き込む.

## 呼び出し手順

入力引数プロファイル:

    SciErr allocMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, double** _pdblReal)

    SciErr allocComplexMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, double** _pdblReal, double** _pdblImg)

## 引数

_pvCtx

  Scilab環境ポインタ, api_scilab.hで定義された"pvApiCtx"で指定.

_iVar

  変数を代入したいScilabメモリの位置.

_piParent

  新規要素の親のアドレス.

_iItemPos

  リストにおける新規要素の位置.

_iRows

  新規変数の行数.

_iCols

  新規変数の列数.

_pdblReal

  返されるデータ配列の実部のアドレス (大きさ: _iCols * _iRows).

_pdblImg

  返されるデータ配列の虚部のアドレス (大きさ: _iCols * _iRows).

SciErr

  エラーメッセージの履歴と最初のエラー番号が保存されるエラー構造体.

## 説明

このヘルプはリスト中にdoubleの行列を追加する方法を記述します.

Scilabのメモリに書き込む際には2種類の関数を使用できます.

## ゲートウェイのソース

    #include "api_scilab.h"
    int list_createlist(char *fname,void* pvApiCtx)
    {
    	SciErr sciErr;
    	int *piAddr             = NULL;
    	int* piChild            = NULL;
    	double pdblData1[]      = {1,3,5,2,4,6};
    	double pdblData2[]      = {6,4,2,5,3,1};
    	char *pstData[]         = {"may","be","the","with","puffin","you"};
    	short psData[]          = {1,4,2,5,3,6};
    	double pdblPoly1[]      = {1};
    	double pdblPoly2[]      = {-2,-1};
    	double pdblPoly3[]      = {1,2,3};
    	double pdblPoly4[]      = {-4,-3,-2,-1};
    	double pdblPoly5[]      = {1,2,3,4,5};
    	double pdblPoly6[]      = {-6,-5,-4,-3,-2,-1};
    	double *pdblPoly[]      = {pdblPoly1, pdblPoly3, pdblPoly5, pdblPoly2, pdblPoly4, pdblPoly6};
    	int piCoef[]            = {1,3,5,2,4,6};
    	int piNbItemRow[]       = {1,2,1};
    	int piColPos[]          = {8,4,7,2};
    	double pdblSReal[]      = {1,2,3,4};
    	double pdblSImg[]       = {4,3,2,1};
    	int piBool[]            = {1,0,1,0,1,0,1,0,1};
    	double* pdblDataPtr     = NULL;
    	sciErr = createList(pvApiCtx, nbInputArgument(pvApiCtx) + 1, 8, &piAddr);
    	if(sciErr.iErr)
    	{
    		printError(&sciErr, 0);
    		return 0;
    	}
    	sciErr = createComplexMatrixOfDoubleInList(pvApiCtx, nbInputArgument(pvApiCtx) + 1, piAddr, 1, 3, 2, pdblData1, pdblData2);
    	if(sciErr.iErr)
    	{
    		printError(&sciErr, 0);
    		return 0;
    	}
    	sciErr = createMatrixOfStringInList(pvApiCtx, nbInputArgument(pvApiCtx) + 1, piAddr, 2, 2, 3, pstData);
    	if(sciErr.iErr)
    	{
    		printError(&sciErr, 0);
    		return 0;
    	}
    	sciErr = createMatrixOfInteger16InList(pvApiCtx, nbInputArgument(pvApiCtx) + 1, piAddr, 3, 2, 3, psData);
    	if(sciErr.iErr)
    	{
    		printError(&sciErr, 0);
    		return 0;
    	}
    	sciErr = createMatrixOfPolyInList(pvApiCtx, nbInputArgument(pvApiCtx) + 1, piAddr, 4, "x", 3, 2, piCoef, pdblPoly);
    	if(sciErr.iErr)
    	{
    		printError(&sciErr, 0);
    		return 0;
    	}
    	sciErr = createComplexSparseMatrixInList(pvApiCtx, nbInputArgument(pvApiCtx) + 1, piAddr, 5, 3, 10, 4, piNbItemRow, piColPos, pdblSReal, pdblSImg);
    	if(sciErr.iErr)
    	{
    		printError(&sciErr, 0);
    		return 0;
    	}
    	sciErr = createMatrixOfBooleanInList(pvApiCtx, nbInputArgument(pvApiCtx) + 1, piAddr, 6, 3, 3, piBool);
    	if(sciErr.iErr)
    	{
    		printError(&sciErr, 0);
    		return 0;
    	}
    	sciErr = createBooleanSparseMatrixInList(pvApiCtx, nbInputArgument(pvApiCtx) + 1, piAddr, 7, 3, 10, 4, piNbItemRow, piColPos);
    	if(sciErr.iErr)
    	{
    		printError(&sciErr, 0);
    		return 0;
    	}
    	//add list in list
    	sciErr = createListInList(pvApiCtx, nbInputArgument(pvApiCtx) + 1, piAddr, 8, 3, &piChild);
    	if(sciErr.iErr)
    	{
    		printError(&sciErr, 0);
    		return 0;
    	}
    	sciErr = createMatrixOfDoubleInList(pvApiCtx, nbInputArgument(pvApiCtx) + 1, piChild, 1, 3, 2, pdblData1);
    	if(sciErr.iErr)
    	{
    		printError(&sciErr, 0);
    		return 0;
    	}
    	sciErr = createSparseMatrixInList(pvApiCtx, nbInputArgument(pvApiCtx) + 1, piChild, 2, 3, 10, 4, piNbItemRow, piColPos, pdblSReal);
    	if(sciErr.iErr)
    	{
    		printError(&sciErr, 0);
    		return 0;
    	}
    	pdblDataPtr     = (double*)malloc(sizeof(double) * 4);
    	pdblDataPtr[0]  = 1;
    	pdblDataPtr[1]  = 2;
    	pdblDataPtr[2]  = 3;
    	pdblDataPtr[3]  = 4;
    	sciErr = createPointerInList(pvApiCtx, nbInputArgument(pvApiCtx) + 1, piChild, 3, pdblDataPtr);
    	if(sciErr.iErr)
    	{
    		printError(&sciErr, 0);
    		return 0;
    	}
    	AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
    	return 0;
    }

## Scilabテストスクリプト

    size_ref    = 8;
    type_ref    = ["constant","string","int16","polynomial", "sparse", "boolean", "boolean sparse", "list"];
    dim_ref     = list([3,2],[2,3],[2,3],[3,2],[3,10],[3,3],[3,10],3);
    l = list_createlist();
    if size(l) <> size_ref then error("failed"), end
    for i = 1 : size_ref
        if typeof(l(i)) <> type_ref(i) then error("failed"), end
        if size(l(i)) <> dim_ref(i) then error("failed"), end
    end