OSDN Git Service

マルチプロジェクト型にレポジトリを変更するために移動した
[toppersasp4lpc/asp.git] / asp / cfg / toppers / nm_symbol.hpp
1 /*
2  *  TOPPERS Software
3  *      Toyohashi Open Platform for Embedded Real-Time Systems
4  *
5  *  Copyright (C) 2005-2008 by TAKAGI Nobuhisa
6  * 
7  *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
8  *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
9  *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
10  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
11  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
12  *      スコード中に含まれていること.
13  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
14  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
15  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
16  *      の無保証規定を掲載すること.
17  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
18  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
19  *      と.
20  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
21  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
22  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
23  *        報告すること.
24  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
25  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
26  *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
27  *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
28  *      免責すること.
29  * 
30  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
31  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
32  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
33  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
34  *  の責任を負わない.
35  * 
36  */
37 /*!
38  *  \file   toppers/nm_symbol.hpp
39  *  \brief  "nm"コマンドで得られるシンボルテーブルを扱うための宣言定義
40  *
41  *  このファイルで定義されるクラス
42  *  \code
43  *  class nm_symbol;
44  *  \endcode
45  */
46 #ifndef TOPPERS_NM_SYMBOL_HPP_
47 #define TOPPERS_NM_SYMBOL_HPP_
48
49 #include "toppers/config.hpp"
50 #include <iosfwd>
51 #include <string>
52 #include <map>
53
54 namespace toppers
55 {
56
57   /*!
58    *  \class  nm_symbol nm_symbol.hpp "toppers/nm_symbol.hpp"
59    *  \brief  `nm'コマンドで得られるシンボルテーブルを扱うためのクラス
60    *
61    *  \sa nm_symbol::entry
62    */
63   class nm_symbol
64   {
65   public:
66     /*!
67      *  \struct entry nm_symbol.hpp "toppers/nm_symbol.hpp"
68      *  \brief  アドレスとタイプ情報を格納する構造体
69      *
70      *  `nm'コマンドの出力結果が、
71      *  \code
72      *  01234567 T foo
73      *  \endcode
74      *  となった場合、0x01234567が address に、'T'が type に格納されます。
75      */
76     struct entry
77     {
78       unsigned long address;
79       int type;
80     };
81
82     /*!
83      *  \brief  デフォルトコンストラクタ
84      */
85     nm_symbol() {}
86     /*!
87      *  \brief  コンストラクタ
88      *  \param  istr  入力ストリーム
89      */
90     explicit nm_symbol( std::istream& istr ) { load( istr ); }
91
92     void load( std::istream& istr );
93     entry const find( std::string const& symbol ) const; 
94   private:
95     std::map< std::string, entry > symbol_map_;
96   };
97
98 }
99
100 #endif  // ! TOPPERS_NM_SYMBOL_HPP_