kjk / moriarty-sm

This URL has Read+Write access

moriarty-sm / FieldMetaData.h
100644 122 lines (91 sloc) 4.051 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#ifndef INFOMAN_FIELD_METADATA_H__
#define INFOMAN_FIELD_METADATA_H__
 
#include "LookupManager.h"
 
#define prefixFieldGetUrl "Get-Url-"
 
#define fieldVerifyRegCode "Verify-Registration-Code"
#define fieldGetRegCodeDaysToExpire "Get-Reg-Code-Days-To-Expire"
#define fieldGetLatestClientVersion "Get-Latest-Client-Version"
#define fieldGetUrl "Get-Url"
#define fieldClientInfo clientInfoField
#define fieldRegistrationCode regCodeField
#define fieldProtocolVersion protocolVersionField
#define fieldGetCookie getCookieField
#define fieldCurrentBoxOffice "Current-Box-Office"
 
#define fieldError "Error"
#define fieldCookie cookieField
#define fieldEBookVersion "eBook-Version"
#define fieldLatestClientVersion "Latest-Client-Version"
#define fieldTransactionId transactionIdField
#define fieldNoResults "No-Results"
 
 
#define fieldHoroscope "Horoscope"
#define fieldDream "Dream-Interpretation"
#define fieldGetUrlEBookBrowse prefixFieldGetUrl "eBook-browse"
 
#define fieldRecipesList "Recipes-List"
#define fieldRecipe "Recipe"
 
#define fieldStocksList "Stocks-List"
#define fieldStocksListByName "Stocks-List-By-Name"
#define fieldStock "Stock"
 
#define fieldWeather "Weather"
#define fieldWeatherMultiselect "Weather-Multiselect"
 
#define fieldCurrency "Currency-Conversion"
 
#define fieldJoke "Joke"
#define fieldJokesList "Jokes-List"
 
#define fieldMoviesData "Movies-Data"
 
 
#define fieldLocationAmbiguous "Location-Ambiguous"
#define fieldLocationUnknown "Location-Unknown"
 
enum ResponseFieldType {
    fieldTypeValue,
    fieldTypePayload,
};
 
class BinaryIncrementalProcessor;
class InfoManConnection;
 
typedef status_t (InfoManConnection::* ResponseFieldValueHandler)(const char*, ulong_t, const char*, ulong_t);
typedef status_t (InfoManConnection::* ResponsePayloadCompletionHandler)(BinaryIncrementalProcessor&);
 
struct ResponseFieldDescriptor {
 
// WARNING: Visual C++ 2005 B2 seems to be broken when aligning pointers-to-member-functions.
// That's why these ugly fillXxxx__ unions are used. (eVC 3.0 seems to be broken as well)
#if _MSC_VER
 
    union {
        const char* name;
        ulong_t fillName__;
    };
 
    union {
        ResponseFieldType type;
        ulong_t fillType__;
    };
 
    union {
        ResponseFieldValueHandler valueHandler;
        ulong_t fillValueHandler__[4];
    };
    
    union {
        ResponsePayloadCompletionHandler payloadCompletionHandler;
        ulong_t fillPayloadCompletionHandler__[4];
    };
 
    union {
        LookupResult lookupResult;
        ulong_t fillLookupResult__;
    };
 
    union {
        const char* dataSinkName;
        ulong_t fillDataSinkName__;
    };
 
    union {
        bool dataSinkIsHistoryCache;
        ulong_t fillDataSinkIsHistoryCache__;
    };
#else
    const char* name;
    ResponseFieldType type;
    ResponseFieldValueHandler valueHandler;
    ResponsePayloadCompletionHandler payloadCompletionHandler;
    LookupResult lookupResult;
    const char* dataSinkName;
    bool dataSinkIsHistoryCache;
#endif
 
    bool operator<(const ResponseFieldDescriptor& other) const;
};
 
const ResponseFieldDescriptor* ResponseFieldFind(const char* name);
 
#ifndef NDEBUG
void test_ResponseFieldsSorted();
#endif
 
#endif