]>
git.saurik.com Git - wxWidgets.git/blob - utils/dialoged/src/symbtabl.cpp
a2f42f5a93834745a2be45845571d5d8af8c7cc0
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxResourceSymbolTable
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
13 #pragma implementation "symbtabl.h"
16 // For compilers that support precompilation, includes "wx/wx.h".
17 #include "wx/wxprec.h"
34 wxResourceSymbolTable::wxResourceSymbolTable():
35 m_hashTable(wxKEY_STRING
)
39 wxResourceSymbolTable::~wxResourceSymbolTable()
46 bool wxResourceSymbolTable::ReadIncludeFile(const wxString
& filename
)
49 if (!file
.Open(filename
, wxFile::read
))
52 off_t len
= file
.Length();
57 char* p
= str
.GetWriteBuf(len
+ 1);
59 if (file
.Read(p
, len
) == ofsInvalid
)
66 // Look for #define occurrences
67 size_t pos
= str
.Find("#define");
70 size_t len
= str
.Length();
74 // Eat whitespace until symbol
75 while ((str
[i
] == ' ' || str
[i
] == '\t') && (i
< len
))
81 while (str
[i
] != ' ' && str
[i
] != '\t' && (i
< len
))
85 wxString
symbol(str
.Mid(start
, (end
- start
+ 1)));
87 // Eat whitespace until number
88 while ((str
[i
] == ' ' || str
[i
] == '\t') && (i
< len
))
94 while (str
[i
] != ' ' && str
[i
] != '\t' && str
[i
] != '\n' && (i
< len
))
99 wxString
numStr(str
.Mid(startNum
, (endNum
- startNum
+ 1)));
101 long id
= atol(numStr
);
103 AddSymbol(symbol
, id
);
105 str
= str
.Right(len
- i
);
106 pos
= str
.Find("#define");
112 bool wxResourceSymbolTable::WriteIncludeFile(const wxString
& filename
)
115 if (!file
.Open(filename
, wxFile::write
))
118 m_hashTable
.BeginFind();
120 wxNode
* node
= m_hashTable
.Next();
123 char* str
= node
->key
.string
;
124 long id
= (long) node
->Data() ;
127 line
.Printf("#define %s %ld\n", str
, id
);
129 file
.Write(line
, line
.Length());
131 node
= m_hashTable
.Next();
136 void wxResourceSymbolTable::Clear()
141 bool wxResourceSymbolTable::AddSymbol(const wxString
& symbol
, long id
)
143 m_hashTable
.Put(symbol
, (wxObject
*) id
);
148 wxString
wxResourceSymbolTable::GetSymbolForId(long id
)
150 m_hashTable
.BeginFind();
152 wxNode
* node
= m_hashTable
.Next();
155 char* str
= node
->key
.string
;
156 if (str
&& ( ((long) node
->Data()) == id
) )
157 return wxString(str
);
159 node
= m_hashTable
.Next();
164 long wxResourceSymbolTable::GetIdForSymbol(const wxString
& symbol
)
166 return (long) m_hashTable
.Get(symbol
);
169 bool wxResourceSymbolTable::SymbolExists(const wxString
& symbol
) const
171 return (m_hashTable
.Get(symbol
) != NULL
);