2013年8月17日土曜日

【なでしこ】プラグインを作ってみる ~設計編 その3~

次に、メモリ(バッファ)制御系の関数の仕様を決めます。

------ここから------

 ・バッファ確保
    書式:バッファ確保([int]サイズ)
    戻値:[int]ハンドル
    説明:メモリを動的に確保して、そのハンドルを返す。成功した場合、
       0以上のハンドル値が、失敗した場合には-1が返される。
        
          なお、メモリは動的に確保されているので、使用後はかならず
          ハンドルの解放を実施して確保されたメモリ領域を解放する
          こと。

・バッファクリア
    書式:バッファクリア([int]ハンドル、[int]クリア値)
    戻値:[int]結果
    説明:バッファ確保命令で取得したハンドルの領域をクリア値を用いて
       クリアする。クリア値には0~255(0xFF)までの1byte値を指定
          する。
        
          成功した場合は0が、無効なハンドル、クリア値を指定した
          場合は-1が返される。

・バッファコピー
    書式:バッファコピー([int]元ハンドル、[int]先ハンドル、[int]サイズ)
    戻値:[int]結果
    説明:既に確保されているコピー元ハンドルから、コピー先ハンドルに
       データをコピーする。先ハンドルはバッファでなくては
          ならないが、元ハンドルについてはバッファ、もしくは
          上記バイト確保命令で取得したハンドルでも良い。
        
          成功した場合は0が、無効なハンドルを指定した場合には-1が
          返される。

・バッファ読込
    書式:バッファ読込([int]ハンドル、[int]オフセット)
    戻値:[int]読込データ
    説明:既に確保されているメモリ領域(ハンドル)の、所定のオフセット
       位置から、1byteのデータを取得して返す。
        
          無効な引数を指定した場合には0が返される。

・バッファ書込
    書式:バッファ書込([int]ハンドル、[int]オフセット、[int]データ)
    戻値:[int]結果
    説明:既に確保されているメモリ領域(ハンドル)の、所定のオフセット
       位置に、1byteのデータを書き込む。データには0~255の値を
          指定する。
        
          成功した場合には0が、無効な引数を指定した場合には-1が
          返される。

・バッファ比較
    書式:バッファ比較([int]ハンドル、[int]ハンドル、[int]サイズ)
    戻値:[int]結果
    説明:既に確保されている2つのバッファハンドルのサイズ分のデータ
       を比較する。
        
          比較した結果内容が同じであれば1、違っていれば0、エラーが
          あった場合には-1を返す。

------ここまで------

一般的にCで実施するmalloc, memcpy, memset, memcmpなどが使える
様にするために上記の関数を準備します。読み書きは1byteずつに
しましたが、複数にした方がいいのかなあ…。バッファコピーもオフセット
はつけませんでしたが、任意の位置に任意のサイズコピーできるほうが
いい気がしてきたので、その内仕様を変更しようかと思います。

freeに相当する関数がここには含まれてませんが、ハンドルを開放する
ための関数を後ほど準備します。

※最終的なものは修正後、まとめて公開します。