Top

FileBuff クラスおよびその補助クラス (FileBuff, FileBuffRegion)

これらは, ADL ファイルの内容を読むためのクラス (See: here for details).

クラス一覧(class list)


FileBuff

概要(Summary)

ADL ファイルの内容を読むためのクラス.

現在は, FileBuff オブジェクトの生成時に, (コンストラクタ内で) ファイルの内容を全てメモリ上に読み込む実装になっている.

    ((cite: hotspot/src/share/vm/adlc/filebuff.hpp))
    //------------------------------FileBuff--------------------------------------
    // This class defines a nicely behaved buffer of text.  Entire file of text
    // is read into buffer at creation, with sentinels at start and end.
    class FileBuff {

使われ方(Usage)

adlc の main() 関数の中で作成され, ADLParse のコンストラクタへと引き渡される. その後, ADLParse::parse() 内で使用される.

    ((cite: hotspot/src/share/vm/adlc/main.cpp))
    int main(int argc, char *argv[])
    {
    ...
      // Build the File Buffer, Parse the input, & Generate Code
      FileBuff  ADL_Buf(&AD._ADL_file, AD); // Create a file buffer for input file
    ...
      ADL_Parse = new ADLParser(ADL_Buf, AD); // Create a parser to parse the buffer

内部構造(Internal structure)

実際のコンストラクタの実装は以下の通り. (ファイルサイズ分の領域を確保し, fread() で一度に読んでいる)

    ((cite: hotspot/src/share/vm/adlc/filebuff.cpp))
    // Create a new parsing buffer
    FileBuff::FileBuff( BufferedFile *fptr, ArchDesc& archDesc) : _fp(fptr), _AD(archDesc) {
    ...
      _filepos = ftell(_fp->_fp);   // Find offset of end of file
      _bufferSize = _filepos + 5;   // Filepos points to last char, so add padding
    ...
      _bigbuf = new char[_bufferSize]; // Create buffer to hold text for parser
    ...
      _bufmax += fread(_buf, 1, _bufferSize-2, _fp->_fp); // Fill buffer & set end value
    ...
    }

詳細(Details)

See: here for details


FileBuffRegion

概要(Summary)

?? (このクラスは使用箇所が見当たらないような...)

ファイル中の一部分だけを扱うためのクラス.

    ((cite: hotspot/src/share/vm/adlc/filebuff.hpp))
    //------------------------------FileBuffRegion---------------------------------
    // A buffer region is really a region of some file, specified as a linked list
    // of offsets and lengths.  These regions can be merged; overlapping regions
    // will coalesce.
    class FileBuffRegion {

使われ方(Usage)

(どこで使われている? 使用箇所が見つからないが... #TODO)

内部構造(Internal structure)

内部では linked list 形式で表現しており, 各要素がそれぞれの領域を表すための「ファイル先頭からの offset とその領域の length」を持っている.

(正確には FileBuffRegion は linked list の1要素を表すクラスで, _next フィールドで次の FileBuffRegion オブジェクトにつながることでリストを形成する)

また, 2つの FileBuffRegion の領域をマージした結果を返すメソッドを提供している.

詳細(Details)

See: here for details



This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.