BREWSDK覚え書

//====================================================
//    Melt BREW SDK 覚え書
//====================================================


C++のインナクラスは内のクラスから外のクラスの変数を触れない

//===================================================
//    Object
//===================================================
・BrewSmartObject
 ・参照オブジェクト型
 ・実体(Dataクラス)へのポインタとインタフェースを持つ
 ・Dataクラスをfriend宣言
 ・Dataクラス
  ・Dataはインナークラス(080630 New!! そうとも限らない)
  ・Objectの実体と具体的な処理をもつ

 ・コンストラクタは3種
   通常のコンストラク
   NULLコンストラク
   コピーコンストラク
 ・デストラクタは1種
 ・代入演算子オーバーロードは通常時とnull時の2種

 ・このクラスの継承方法、利用方法は必須。

 ・BrewRefObject(以下に記述)を継承


・BrewRefObject
 ・参照オブジェクト型クラスの基底クラス?
 ・コンストラクタ、デストラクタはBrewSmartObjectといっしょ
 ・以下を所持
   実体へのポインタ
   参照カウンタ(以下に記述)
 ・参照カウントが0になったら自動で開放してくれる(参照カウンタクラスがやってる)
 ・NULLの代入でも開放してくれる
 ・参照渡しの代入OK?
 ・==と!=の比較はポインタを投げつける比較でもOK?
  (グローバルな関数をfriendにしてる?よくわからない(friendの意味が))


・BrewRefCountDeleterBase
 ・参照カウントの基本クラス。以下4種
   BrewRefCountNullDeleter        ポインタを解放しない
   BrewRefCountDeleter        ポインタを普通に解放する
   BrewRefCountArrayDeleter        配列用。ポインタは解放
   BrewRefCountBrewInterfaceDeleter    IBASE_Release()?(わかんね)BrewHelper
    → BrewHelper関数の開放を使う
 ・型固有のIDを返す機能付き?
 ・memory_poolを継承(以下に記述)


・memory_pool
 ・継承するとnew、delete(配列含む)でメモリの確保が可能になるクラス
 ・メモリの確保はBrewMemoryPoolクラス(以下に記述)で行っている


・BrewMemoryPool
 ・起動時?に必要な分だけガバッと確保して、その領域でメモリ管理するクラス
 ・allocateとdeallocateで全体領域の確保と解放
 ・mallocとfreeでインスタンスのメモリ確保と解放
 ・dmallocクラス(記述orz)を使ってfreeした領域を使いまわせるようになってるのか?


・BresString
 ・javaのようなStringクラス
 ・BrewSmartObjectと同じくBrewRefObjectを継承


//===================================================
//    Stream
//===================================================

・Stream全体の共通項目
 ・BrewSmartObjectの継承クラス

 ・BrewIn(Out)putStreamは更に3系統に分かれる
  ・BrewIn(Out)putStream
   ・BrewByteArrayIn(Out)putStream
    ・static::Createでインスタンスの作成
    ・シークの、先頭位置、現在位置、終端位置の設定。 現在位置の取得。 
    ・ファイルサイズの取得
   ・BrewFileIn(Out)putStream
    ・static::Openでインスタンスの作成
    ・シークの、先頭位置、現在位置、終端位置の設定。 現在位置の取得。 
    ・ファイルサイズの取得
   ・BrewUnzipStream
    ・static::Createでインスタンスの作成
  ・BrewDataIn(Out)putStream
   ・byte、short、intの読み(書き)ができる
   ・IsError()で読み(書き)の成否を確認できる


 ・5種全てのクラスにData*のgetterが2つずつある。
  ・ひとつはData*を返し、もう一つはconst Data*を返している。
  ・FileStreamのみconstにキャストせずconstで返している

 ・指定サイズのデータをbyte[]型のバッファに読み(書き)ができる


//===================================================
//    システム系
//===================================================
・BrewKey
 ・キー入力の基底クラス
 ・BrewUserKeyクラスとBrewSystemKeyクラスをサブクラスとする
 ・Press Down Release Upの4状態を取得できる
 ・指定キーまたはすべてのキーをUp状態(押されていない状態)にできる

 ・BrewUserKey
  ・Press Release状態にできる
 ・BrewSystemKey
  ・Press Release状態にできる

・BrewFileManager
 ・ファイルのIOを制御するクラス
  このクラスを通してファイル入力、出力、作成、削除を行う
 ・Streamクラスの使い方が分からなくてもこちらの使用方法さえ理解すればなんとかなりそう。

・BrewHelper
 ・ヘルパクラスのラッパ
  ライブラリがさらにラップしているから、ヘルプを読みながら使える程度でよさそう。



//===================================================
//    Math系
//===================================================

・BrewMath
 ・sqrt sin cos atanをサポート
・BrewRandom
 ・乱数クラス
・BrewProbability
 ・確立クラス





//===================================================
//    Main
//===================================================
・BrewApplet
 ・メインクラス
 ・BrewMathを所持
 ・BrewFileManagerを所持

 ・BrewRefObject --+-- BrewSmartObject---下図へ


 ・BrewSmartObject ----+-- BrewString
            |
            |//=========================================
            |//    IOStream系 input output、Data含む
            |//=========================================
            +-- BrewIn(Out)putStream(Data)---+--- BrewByteArrayIn(Out)putStream(Data)
            |                |
            |                +--- BrewFileIn(Out)putStream(Data)
            |                |
            |                +--- BrewUnzipStream(Data) (inputのみ)
            |
            +-- BrewDataIn(Out)putStream(Data) 
            |
            |//=======================
            |//    Key系
            |//=======================
            +-- BrewKey(Data)--------+-- BrewUserKey(Data) 
            |            |
            |            +-- BrewSystemKey(Data) 
            |
            |//=======================
            |//    Math
            |//=======================
            +-- BrewMath(Data)