dp_codinfo.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __BARRYJDG_CODINFO_H__
00023 #define __BARRYJDG_CODINFO_H__
00024
00025
00026 #include "dll.h"
00027 #include <iosfwd>
00028 #include <string>
00029 #include <vector>
00030 #include <stdint.h>
00031
00032
00033 namespace Barry {
00034
00035 namespace JDG {
00036
00037
00038 class BXEXPORT DebugFileEntry
00039 {
00040 private:
00041 protected:
00042
00043 public:
00044 std::string fileName;
00045 std::string appName;
00046 uint32_t uniqueId;
00047
00048 void Dump(std::ostream &os) const;
00049 };
00050
00051
00052 class BXEXPORT DebugFileList : public std::vector<DebugFileEntry>
00053 {
00054 public:
00055 typedef std::vector<DebugFileEntry> base_type;
00056 typedef base_type::iterator iterator;
00057 typedef base_type::const_iterator const_iterator;
00058
00059 public:
00060 void AddElement(uint32_t uniqueid, const std::string &appname, const std::string &filename);
00061 void Dump(std::ostream &os) const;
00062 };
00063 inline std::ostream& operator<<(std::ostream &os, const DebugFileList &list) {
00064 list.Dump(os);
00065 return os;
00066 }
00067
00068
00069 class BXEXPORT ClassEntry
00070 {
00071 private:
00072 protected:
00073
00074 public:
00075
00076 int index;
00077
00078
00079 std::string className;
00080 std::string classPath;
00081 std::string sourceFile;
00082
00083 uint32_t type;
00084 uint32_t unknown02;
00085 uint32_t unknown03;
00086 uint32_t id;
00087 uint32_t unknown05;
00088 uint32_t unknown06;
00089 uint32_t unknown07;
00090 uint32_t unknown08;
00091
00092 std::string GetFullClassName() { return classPath + "." + className; };
00093 };
00094
00095
00096 class BXEXPORT ClassList : public std::vector<ClassEntry>
00097 {
00098 public:
00099 typedef std::vector<ClassEntry> base_type;
00100 typedef base_type::iterator iterator;
00101 typedef base_type::const_iterator const_iterator;
00102
00103 public:
00104 void CreateDefaultEntries();
00105 };
00106
00107
00108
00109
00110
00111 class BXEXPORT CodInfo
00112 {
00113 private:
00114 uint32_t ParseNextHeaderField(std::istream &input);
00115 uint32_t ParseNextTypeField(std::istream &input);
00116
00117 void ParseAppName(std::istream &input);
00118 void ParseUniqueId(std::istream &input);
00119
00120 void ParseBoolean(std::istream &input);
00121 void ParseByte(std::istream &input);
00122 void ParseChar(std::istream &input);
00123 void ParseShort(std::istream &input);
00124 void ParseInt(std::istream &input);
00125 void ParseLong(std::istream &input);
00126 void ParseClass(std::istream &input);
00127 void ParseArray(std::istream &input);
00128 void ParseVoid(std::istream &input);
00129 void ParseDouble(std::istream &input);
00130
00131 protected:
00132
00133 public:
00134 uint32_t uniqueId;
00135 std::string appName;
00136 ClassList classList;
00137
00138 bool LoadDebugFile(const char *filename);
00139
00140 void ParseHeaderSection(std::istream &input);
00141 void ParseTypeSection(std::istream &input);
00142 void ParseResourceSection(std::istream &input);
00143
00144 uint32_t GetUniqueId();
00145 std::string GetAppName();
00146 };
00147
00148
00149 BXEXPORT void SearchDebugFile(DebugFileList &list);
00150 BXEXPORT bool LoadDebugInfo(const DebugFileList &list, const char *filename, CodInfo &info);
00151 BXEXPORT bool LoadDebugInfo(const DebugFileList &list, const uint32_t uniqueId, const std::string module, CodInfo &info);
00152
00153
00154 }
00155
00156 }
00157
00158
00159 #endif
00160