## Class context

hamigaki::bjam::context —

bjamのコンテキスト情報を保持するクラス。

## Synopsis

    class context {
    public:
      // construct/copy/destruct
      context();

      // frame functions
      frame& current_frame();
      void push_frame(const frame&);
      void pop_frame();

      // module functions
      boost::optional<std::string> caller_module_name(std::size_t) const;
      string_list back_trace(std::size_t, std::size_t = 0) const;
      module& get_module(const boost::optional<std::string>&);
      const module& get_module(const boost::optional<std::string>&) const;
      std::pair<module_iterator,module_iterator> module_entries() const;
      bool is_defined_module(const boost::optional<std::string>&) const;
      bool change_module(const boost::optional<std::string>&);

      // target functions
      target& get_target(const std::string&);
      std::pair<module_iterator,module_iterator> target_entries() const;
      string_list targets_to_update() const;
      void targets_to_update(const string_list&);

      // rule functions
      void set_builtin_rule(const std::string&, const list_of_list&,
                            const boost::function1<string_list,context>&,
                            bool = true);
      rule_definition get_rule_definition(const std::string&) const;
      string_list invoke_rule(const std::string&, const list_of_list&);

      // directory functions
      std::string working_directory() const;
      void working_directory(const std::string&);
    };

## Description

### `context` construct/copy/destruct

1.     context();

### `context` frame functions

1.     frame& current_frame();

   Effects: | 現在のフレーム情報を返す

2.     void push_frame(const frame& f);

   Effects: | フレーム情報をスタックに追加し、それを現在のフレーム情報とする

3.     void pop_frame();

   Effects: | 現在のフレーム情報をスタックから削除し、直前のフレーム情報を現在のフレーム情報とする

### `context` module functions

1.     boost::optional<std::string> caller_module_name(std::size_t level) const;

   呼び出し元のモジュール名を返す。`level`は呼び出しの深さを指定するパラメータで、0が現在のフレームを意味する。

   Returns: | 呼び出し元のモジュール名

2.     string_list back_trace(std::size_t level, std::size_t skip = 0) const;

   呼び出しフレームのバックトレース情報を返す。`level`はバックトレースの深さ指定するパラメータで、0ならば全てのフレームが利用される。`skip`は、スキップするフレームの深さを指定するパラメータで、0なら現在のフレームから開始される。

   返される各バックトレース情報は次の形式を取る。

   jamファイル名 行番号 モジュール名 ルール名

   なお、モジュール名の末尾には「.」が付加される。

   Returns: | バックトレース情報のリスト

3.     module& get_module(const boost::optional<std::string>& name);

   Effects: | フレーム情報をスタックに追加し、それを現在のフレーム情報とする

4.     const module& get_module(const boost::optional<std::string>& name) const;

   Returns: | `name`に対応するモジュール

5.     std::pair<module_iterator,module_iterator> module_entries() const;

   Returns: | 全モジュールを列挙する反復子のペア

6.     bool is_defined_module(const boost::optional<std::string>& name) const;

   Returns: | `name`に対応するモジュールが定義されているかどうか

7.     bool change_module(const boost::optional<std::string>& name);

   Effects: | 現在のフレームのモジュールを`name`で指定されたモジュールに変更する

### `context` target functions

1.     target& get_target(const std::string& name);

   Returns: | `name`に対応するターゲット

2.     std::pair<module_iterator,module_iterator> target_entries() const;

   Returns: | 全ターゲットを列挙する反復子のペア

3.     string_list targets_to_update() const;

   Returns: | 組み込みルール`UPDATE`で設定されたターゲット名のリスト

4.     void targets_to_update(const string_list& x);

   Effects: | 更新すべきターゲット名のリストを設定する。組み込みルール`UPDATE`から呼ばれる。

### `context` rule functions

1.     void set_builtin_rule(const std::string& name, const list_of_list& params,
                             const boost::function1<string_list,context>& func,
                             bool exported = true);

   組み込み関数を登録する。引数の意味は次表の通り。

   引数 | 意味
   --- | ---
   name | ルール名
   params | パラメタ宣言
   func | 組み込み関数の実装
   exported | 他のモジュールからアクセス可能か

2.     rule_definition get_rule_definition(const std::string& name) const;

   Returns: | `name`に対応した組み込み関数の定義

3.     string_list invoke_rule(const std::string& name, const list_of_list& args);

   ルール`name`を引数`args`で呼び出す。

   Returns: | ルールからの戻り値

### `context` directory functions

1.     std::string working_directory() const;

   Returns: | bjamの作業ディレクトリ

2.     void working_directory(const std::string& dir);

   Effects: | bjamの作業ディレクトリを`dir`に設定する。

| 製作著作 © 2007 Takeshi Mouri