Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(129)

Side by Side Diff: experimental/windows_debugger/debugger/test_debugger/my_struct_to_json.h

Issue 10928195: First round of dead file removal (Closed) Base URL: https://github.com/samclegg/nativeclient-sdk.git@master
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 #pragma once
2 #include "my_json.h"
3 #include <iostream>
4 #include <sstream>
5
6 namespace json {
7 class StructFieldDefinition {
8 public:
9 enum Type {FT_INT, FT_ENUM, FT_FLAGS, FT_PTR, FT_STR, FT_USTR, FT_HANDLE};
10
11 StructFieldDefinition(const std::string& name, Type type, size_t size, size_t offset, size_t unicode_offset = 0)
12 : name_(name), type_(type), size_(size), offset_(offset), unicode_offset_(un icode_offset) {}
13
14 void ParseEnumValues(const std::string& key_value_pairs);
15 std::string GetEnumName(long long id);
16
17 public:
18 std::string name_;
19 Type type_;
20 size_t size_;
21 size_t offset_;
22 size_t unicode_offset_;
23 std::map<long long, std::string> enum_values_;
24 };
25
26 class StructDefinition {
27 public:
28 StructDefinition(const std::string& name) : name_(name) {}
29 ~StructDefinition();
30
31 void AddFieldDefinition(StructFieldDefinition* def);
32 size_t GetFieldNum() const;
33 StructFieldDefinition* GetFieldDefinition(size_t pos);
34 StructFieldDefinition* GetFieldDefinition(const std::string& name);
35
36 public:
37 std::string name_;
38 std::deque<StructFieldDefinition*> fields_;
39 };
40
41 class StructDefinitions {
42 public:
43 StructDefinitions();
44 ~StructDefinitions();
45
46 void AddStructDefinition(StructDefinition* def);
47 StructDefinition* FindStructDefinition(const std::string& name);
48
49 public:
50 std::map<std::string, StructDefinition*> structs_;
51 };
52
53 class StructTextCreator : public Visitor {
54 public:
55 StructTextCreator();
56 ~StructTextCreator();
57
58 void SetGenerateComments(bool on, StructDefinitions* struct_defs);
59 void CreateText(const Value& value_in, std::string* text_out);
60
61 virtual void Visit(Null& element);
62 virtual void Visit(Number& element);
63 virtual void Visit(Boolean& element);
64 virtual void Visit(String& element);
65 virtual void Visit(Blob& element);
66 virtual void Visit(Array& element);
67 virtual void Visit(Object& element);
68
69 protected:
70 void OutputObject(int offset, Object& value_in, std::ostringstream* buff_out) ;
71 void OutputValue(int offset, Value& value_in, std::ostringstream* buff_out);
72 void OutputOffset(int offset, std::ostringstream* buff_out);
73 std::string CreateCommentFor(Value* prop, StructFieldDefinition* fd_def);
74
75 bool generate_comments_;
76 StructDefinitions* struct_defs_;
77 std::string comment_;
78 int offset_;
79 std::ostringstream* buff_out_;
80 };
81
82 Value* CreateValueFromStructField(const void* struct_ptr, const char* struct_nam e, StructFieldDefinition& field_def);
83 Object* CreateFromStruct(const void* struct_ptr, const char* struct_name, Struct Definitions& defs);
84 void AddIntConst(int id, const char* name, std::string* str);
85
86 #define START_STRUCT_DEF(T) do { json::StructDefinition* sd = new json::StructDe finition(#T); T tmp
87
88 #define OFFSET_OF(Name) ((char*)&tmp.Name - (char*)&tmp)
89
90 #define DEF_ENUM_FIELD(Name, Values) do {\
91 json::StructFieldDefinition* def = new json::StructFieldDefinition(#Name, json ::StructFieldDefinition::FT_ENUM, sizeof(tmp.Name), OFFSET_OF(Name));\
92 def->ParseEnumValues(Values); sd->AddFieldDefinition(def); } while(false)
93
94 #define DEF_HANDLE_FIELD(Name) \
95 sd->AddFieldDefinition(new json::StructFieldDefinition(#Name, json::StructFiel dDefinition::FT_HANDLE, sizeof(tmp.Name), OFFSET_OF(Name)))
96
97 #define DEF_PTR_FIELD(Name) \
98 sd->AddFieldDefinition(new json::StructFieldDefinition(#Name, json::StructFiel dDefinition::FT_PTR, sizeof(tmp.Name), OFFSET_OF(Name)))
99
100 #define DEF_STR_FIELD(Name) \
101 sd->AddFieldDefinition(new json::StructFieldDefinition(#Name, json::StructFiel dDefinition::FT_STR, sizeof(tmp.Name), OFFSET_OF(Name)))
102
103 #define DEF_INT_FIELD(Name) \
104 sd->AddFieldDefinition(new json::StructFieldDefinition(#Name, json::StructFiel dDefinition::FT_INT, sizeof(tmp.Name), OFFSET_OF(Name)))
105
106 #define DEF_USTR_FIELD(Name, FUnicode) \
107 sd->AddFieldDefinition(new json::StructFieldDefinition(#Name, json::StructFiel dDefinition::FT_USTR, sizeof(tmp.Name), OFFSET_OF(Name), OFFSET_OF(FUnicode)))
108
109 #define STOP_STRUCT_DEF defs->AddStructDefinition(sd); } while(false)
110
111 #define ADD_INT_C(x, str) json::AddIntConst(x, #x, &str)
112
113 } // namespace json
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698