Mike McCormack : wininet: Use a lookup table sorted by index so we
don' t need a loop to do lookups.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Mar 30 05:44:02 CST 2006
Module: wine
Branch: refs/heads/master
Commit: 7f5e273214bb4d75824efc7133b366b4703450a6
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=7f5e273214bb4d75824efc7133b366b4703450a6
Author: Mike McCormack <mike at codeweavers.com>
Date: Thu Mar 30 18:02:54 2006 +0900
wininet: Use a lookup table sorted by index so we don't need a loop to do lookups.
---
dlls/wininet/http.c | 156 ++++++++++++++++++++++++++-------------------------
1 files changed, 79 insertions(+), 77 deletions(-)
diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
index 70dfc38..1e32e4c 100644
--- a/dlls/wininet/http.c
+++ b/dlls/wininet/http.c
@@ -1163,12 +1163,6 @@ lend:
return handle;
}
-typedef struct std_hdr_data
-{
- const WCHAR* hdrStr;
- INT hdrIndex;
-} std_hdr_data;
-
static const WCHAR szAccept[] = { 'A','c','c','e','p','t',0 };
static const WCHAR szAccept_Charset[] = { 'A','c','c','e','p','t','-','C','h','a','r','s','e','t', 0 };
static const WCHAR szAccept_Encoding[] = { 'A','c','c','e','p','t','-','E','n','c','o','d','i','n','g',0 };
@@ -1223,65 +1217,82 @@ static const WCHAR szVia[] = { 'V','i','
static const WCHAR szWarning[] = { 'W','a','r','n','i','n','g',0 };
static const WCHAR szWWW_Authenticate[] = { 'W','W','W','-','A','u','t','h','e','n','t','i','c','a','t','e',0 };
-static const std_hdr_data SORTED_STANDARD_HEADERS[] = {
- {szAccept, HTTP_QUERY_ACCEPT,},
- {szAccept_Charset, HTTP_QUERY_ACCEPT_CHARSET,},
- {szAccept_Encoding, HTTP_QUERY_ACCEPT_ENCODING,},
- {szAccept_Language, HTTP_QUERY_ACCEPT_LANGUAGE,},
- {szAccept_Ranges, HTTP_QUERY_ACCEPT_RANGES,},
- {szAge, HTTP_QUERY_AGE,},
- {szAllow, HTTP_QUERY_ALLOW,},
- {szAuthorization, HTTP_QUERY_AUTHORIZATION,},
- {szCache_Control, HTTP_QUERY_CACHE_CONTROL,},
- {szConnection, HTTP_QUERY_CONNECTION,},
- {szContent_Base, HTTP_QUERY_CONTENT_BASE,},
- {szContent_Encoding, HTTP_QUERY_CONTENT_ENCODING,},
- {szContent_ID, HTTP_QUERY_CONTENT_ID,},
- {szContent_Language, HTTP_QUERY_CONTENT_LANGUAGE,},
- {szContent_Length, HTTP_QUERY_CONTENT_LENGTH,},
- {szContent_Location, HTTP_QUERY_CONTENT_LOCATION,},
- {szContent_MD5, HTTP_QUERY_CONTENT_MD5,},
- {szContent_Range, HTTP_QUERY_CONTENT_RANGE,},
- {szContent_Transfer_Encoding,HTTP_QUERY_CONTENT_TRANSFER_ENCODING,},
- {szContent_Type, HTTP_QUERY_CONTENT_TYPE,},
- {szCookie, HTTP_QUERY_COOKIE,},
- {szDate, HTTP_QUERY_DATE,},
- {szETag, HTTP_QUERY_ETAG,},
- {szExpect, HTTP_QUERY_EXPECT,},
- {szExpires, HTTP_QUERY_EXPIRES,},
- {szFrom, HTTP_QUERY_DERIVED_FROM,},
- {szHost, HTTP_QUERY_HOST,},
- {szIf_Match, HTTP_QUERY_IF_MATCH,},
- {szIf_Modified_Since, HTTP_QUERY_IF_MODIFIED_SINCE,},
- {szIf_None_Match, HTTP_QUERY_IF_NONE_MATCH,},
- {szIf_Range, HTTP_QUERY_IF_RANGE,},
- {szIf_Unmodified_Since, HTTP_QUERY_IF_UNMODIFIED_SINCE,},
- {szLast_Modified, HTTP_QUERY_LAST_MODIFIED,},
- {szLocation, HTTP_QUERY_LOCATION,},
- {szMax_Forwards, HTTP_QUERY_MAX_FORWARDS,},
- {szMime_Version, HTTP_QUERY_MIME_VERSION,},
- {szPragma, HTTP_QUERY_PRAGMA,},
- {szProxy_Authenticate, HTTP_QUERY_PROXY_AUTHENTICATE,},
- {szProxy_Authorization, HTTP_QUERY_PROXY_AUTHORIZATION,},
- {szProxy_Connection, HTTP_QUERY_PROXY_CONNECTION,},
- {szPublic, HTTP_QUERY_PUBLIC,},
- {szRange, HTTP_QUERY_RANGE,},
- {szReferer, HTTP_QUERY_REFERER,},
- {szRetry_After, HTTP_QUERY_RETRY_AFTER,},
- {szServer, HTTP_QUERY_SERVER,},
- {szSet_Cookie, HTTP_QUERY_SET_COOKIE,},
- {szStatus, HTTP_QUERY_STATUS_CODE,},
- {szTransfer_Encoding, HTTP_QUERY_TRANSFER_ENCODING,},
- {szUnless_Modified_Since, HTTP_QUERY_UNLESS_MODIFIED_SINCE,},
- {szUpgrade, HTTP_QUERY_UPGRADE,},
- {szURI, HTTP_QUERY_URI,},
- {szUser_Agent, HTTP_QUERY_USER_AGENT,},
- {szVary, HTTP_QUERY_VARY,},
- {szVia, HTTP_QUERY_VIA,},
- {szWarning, HTTP_QUERY_WARNING,},
- {szWWW_Authenticate, HTTP_QUERY_WWW_AUTHENTICATE,},
+static const LPCWSTR header_lookup[] = {
+ szMime_Version, /* HTTP_QUERY_MIME_VERSION = 0 */
+ szContent_Type, /* HTTP_QUERY_CONTENT_TYPE = 1 */
+ szContent_Transfer_Encoding,/* HTTP_QUERY_CONTENT_TRANSFER_ENCODING = 2 */
+ szContent_ID, /* HTTP_QUERY_CONTENT_ID = 3 */
+ NULL, /* HTTP_QUERY_CONTENT_DESCRIPTION = 4 */
+ szContent_Length, /* HTTP_QUERY_CONTENT_LENGTH = 5 */
+ szContent_Language, /* HTTP_QUERY_CONTENT_LANGUAGE = 6 */
+ szAllow, /* HTTP_QUERY_ALLOW = 7 */
+ szPublic, /* HTTP_QUERY_PUBLIC = 8 */
+ szDate, /* HTTP_QUERY_DATE = 9 */
+ szExpires, /* HTTP_QUERY_EXPIRES = 10 */
+ szLast_Modified, /* HTTP_QUERY_LAST_MODIFIED = 11 */
+ NULL, /* HTTP_QUERY_MESSAGE_ID = 12 */
+ szURI, /* HTTP_QUERY_URI = 13 */
+ szFrom, /* HTTP_QUERY_DERIVED_FROM = 14 */
+ NULL, /* HTTP_QUERY_COST = 15 */
+ NULL, /* HTTP_QUERY_LINK = 16 */
+ szPragma, /* HTTP_QUERY_PRAGMA = 17 */
+ NULL, /* HTTP_QUERY_VERSION = 18 */
+ szStatus, /* HTTP_QUERY_STATUS_CODE = 19 */
+ NULL, /* HTTP_QUERY_STATUS_TEXT = 20 */
+ NULL, /* HTTP_QUERY_RAW_HEADERS = 21 */
+ NULL, /* HTTP_QUERY_RAW_HEADERS_CRLF = 22 */
+ szConnection, /* HTTP_QUERY_CONNECTION = 23 */
+ szAccept, /* HTTP_QUERY_ACCEPT = 24 */
+ szAccept_Charset, /* HTTP_QUERY_ACCEPT_CHARSET = 25 */
+ szAccept_Encoding, /* HTTP_QUERY_ACCEPT_ENCODING = 26 */
+ szAccept_Language, /* HTTP_QUERY_ACCEPT_LANGUAGE = 27 */
+ szAuthorization, /* HTTP_QUERY_AUTHORIZATION = 28 */
+ szContent_Encoding, /* HTTP_QUERY_CONTENT_ENCODING = 29 */
+ NULL, /* HTTP_QUERY_FORWARDED = 30 */
+ NULL, /* HTTP_QUERY_FROM = 31 */
+ szIf_Modified_Since, /* HTTP_QUERY_IF_MODIFIED_SINCE = 32 */
+ szLocation, /* HTTP_QUERY_LOCATION = 33 */
+ NULL, /* HTTP_QUERY_ORIG_URI = 34 */
+ szReferer, /* HTTP_QUERY_REFERER = 35 */
+ szRetry_After, /* HTTP_QUERY_RETRY_AFTER = 36 */
+ szServer, /* HTTP_QUERY_SERVER = 37 */
+ NULL, /* HTTP_TITLE = 38 */
+ szUser_Agent, /* HTTP_QUERY_USER_AGENT = 39 */
+ szWWW_Authenticate, /* HTTP_QUERY_WWW_AUTHENTICATE = 40 */
+ szProxy_Authenticate, /* HTTP_QUERY_PROXY_AUTHENTICATE = 41 */
+ szAccept_Ranges, /* HTTP_QUERY_ACCEPT_RANGES = 42 */
+ szSet_Cookie, /* HTTP_QUERY_SET_COOKIE = 43 */
+ szCookie, /* HTTP_QUERY_COOKIE = 44 */
+ NULL, /* HTTP_QUERY_REQUEST_METHOD = 45 */
+ NULL, /* HTTP_QUERY_REFRESH = 46 */
+ NULL, /* HTTP_QUERY_CONTENT_DISPOSITION = 47 */
+ szAge, /* HTTP_QUERY_AGE = 48 */
+ szCache_Control, /* HTTP_QUERY_CACHE_CONTROL = 49 */
+ szContent_Base, /* HTTP_QUERY_CONTENT_BASE = 50 */
+ szContent_Location, /* HTTP_QUERY_CONTENT_LOCATION = 51 */
+ szContent_MD5, /* HTTP_QUERY_CONTENT_MD5 = 52 */
+ szContent_Range, /* HTTP_QUERY_CONTENT_RANGE = 53 */
+ szETag, /* HTTP_QUERY_ETAG = 54 */
+ szHost, /* HTTP_QUERY_HOST = 55 */
+ szIf_Match, /* HTTP_QUERY_IF_MATCH = 56 */
+ szIf_None_Match, /* HTTP_QUERY_IF_NONE_MATCH = 57 */
+ szIf_Range, /* HTTP_QUERY_IF_RANGE = 58 */
+ szIf_Unmodified_Since, /* HTTP_QUERY_IF_UNMODIFIED_SINCE = 59 */
+ szMax_Forwards, /* HTTP_QUERY_MAX_FORWARDS = 60 */
+ szProxy_Authorization, /* HTTP_QUERY_PROXY_AUTHORIZATION = 61 */
+ szRange, /* HTTP_QUERY_RANGE = 62 */
+ szTransfer_Encoding, /* HTTP_QUERY_TRANSFER_ENCODING = 63 */
+ szUpgrade, /* HTTP_QUERY_UPGRADE = 64 */
+ szVary, /* HTTP_QUERY_VARY = 65 */
+ szVia, /* HTTP_QUERY_VIA = 66 */
+ szWarning, /* HTTP_QUERY_WARNING = 67 */
+ szExpect, /* HTTP_QUERY_EXPECT = 68 */
+ szProxy_Connection, /* HTTP_QUERY_PROXY_CONNECTION = 69 */
+ szUnless_Modified_Since, /* HTTP_QUERY_UNLESS_MODIFIED_SINCE = 70 */
};
+#define LAST_TABLE_HEADER (sizeof(header_lookup)/sizeof(header_lookup[0]))
+
/***********************************************************************
* HTTP_HttpQueryInfoW (internal)
*/
@@ -1384,20 +1395,11 @@ static BOOL WINAPI HTTP_HttpQueryInfoW(
return TRUE;
}
default:
- if (level >= 0 && level <= HTTP_QUERY_MAX )
- {
- int i;
- for (i = 0; i < sizeof(SORTED_STANDARD_HEADERS)/sizeof(std_hdr_data) ; i++)
- {
- if (SORTED_STANDARD_HEADERS[i].hdrIndex == level)
- {
- index = HTTP_GetCustomHeaderIndex(lpwhr,
- (LPWSTR)SORTED_STANDARD_HEADERS[i].hdrStr,
- requested_index,request_only);
- break;
- }
- }
- }
+ assert (LAST_TABLE_HEADER == (HTTP_QUERY_UNLESS_MODIFIED_SINCE + 1));
+
+ if (level >= 0 && level < LAST_TABLE_HEADER && header_lookup[level])
+ index = HTTP_GetCustomHeaderIndex(lpwhr, header_lookup[level],
+ requested_index,request_only);
}
if (index >= 0)
More information about the wine-cvs
mailing list