# DataWrapper

## 概要 - Abstract

このライブラリ data.DataWrapper は、任意型の変数値を構造体でラッピングする機能を提供します。主に配列データをラッピングするのに使用します。

VCSSLではジャグ配列が禁止されているため、配列の要素数は、各次元内では一様である必要があります。
例えば、要素数の異なる1次元の配列データをまとめて、2次元配列にする事はできません。

そこで配列データを構造体でラッピングする事により、この制約を回避する事ができます。
上の例では、1次元配列データをラッピングした構造体を作り、その構造体の配列を作る事で、2次元のジャグ配列のような構造を実現できます。

このモジュールでは、そのようなラッピング用途のために、ジェネリック構造体 DataWrapperが提供されます。
wrap関数で、任意型変数のデータをラッピングし、DataWrapper 構造体に変換する事ができます。また、unwrap関数で、元のデータを取り出す事もできます。

なお、DataWrapperは、実際にdata.WrappedList,WrappedStack,WrappedQueueの実装に使用されています。
これらのライブラリでは、DataWrapperによって、要素数の異なる配列に対応したコレクション機能を実現しています。

## 目次 - Index

struct DataWrapper<Type>
  任意型のデータをラッピングする構造体です。
DataWrapper<Type> wrap<Type>(Type arg)
  任意型のデータをラッピングします。
Type unwrap<Type>(DataWrapper<Type> wrapper)
  ラッピングしているデータを取り出します。

## 構造体 - Structs

文法的定義 - Signature | struct DataWrapper<Type>
構造体名 - Name | DataWrapper<Type>
役割 - Role | 任意型のデータをラッピングする構造体です。

## 変数 - Variables

- なし - None -

## 関数 - Functions

文法的定義 - Signature | DataWrapper<Type> wrap<Type>(Type arg)
関数名 - Name | wrap<Type>
役割 - Role | 任意型のデータをラッピングします。
引数 - Arguments | (Type型) arg : ラッピングするデータ
戻り値 - Return | (DataWrapper<Type>型) 入力値のラッパー

文法的定義 - Signature | Type unwrap<Type>(DataWrapper<Type> wrapper)
関数名 - Name | unwrap<Type>
役割 - Role | ラッピングしているデータを取り出します。
引数 - Arguments | (DataWrapper<Type>型) wrapper : データを取り出すラッパー
戻り値 - Return | (Type型) ラッパーが保持している値