blob: c602a31b4903f6731226df251bcfc801086c244b [file] [log] [blame]
/*
* Copyright 2011 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Author: jmaessen@google.com (Jan Maessen)
#ifndef NET_INSTAWEB_REWRITER_PUBLIC_IMAGE_DATA_LOOKUP_H_
#define NET_INSTAWEB_REWRITER_PUBLIC_IMAGE_DATA_LOOKUP_H_
#include <cstddef>
#include "pagespeed/kernel/base/basictypes.h"
#include "pagespeed/kernel/base/string_util.h"
namespace net_instaweb {
// The following four helper functions were moved here for testability. We ran
// into problems with sign extension under different compiler versions, and we'd
// like to catch regressions on that front in the future.
// char to int *without sign extension*.
inline int CharToInt(char c) {
uint8 uc = static_cast<uint8>(c);
return static_cast<int>(uc);
}
inline int JpegIntAtPosition(const StringPiece& buf, size_t pos) {
return (CharToInt(buf[pos]) << 8) |
(CharToInt(buf[pos + 1]));
}
inline int GifIntAtPosition(const StringPiece& buf, size_t pos) {
return (CharToInt(buf[pos + 1]) << 8) |
(CharToInt(buf[pos]));
}
inline int PngIntAtPosition(const StringPiece& buf, size_t pos) {
return (CharToInt(buf[pos ]) << 24) |
(CharToInt(buf[pos + 1]) << 16) |
(CharToInt(buf[pos + 2]) << 8) |
(CharToInt(buf[pos + 3]));
}
inline bool PngSectionIdIs(const char* hdr,
const StringPiece& buf, size_t pos) {
return ((buf[pos + 4] == hdr[0]) &&
(buf[pos + 5] == hdr[1]) &&
(buf[pos + 6] == hdr[2]) &&
(buf[pos + 7] == hdr[3]));
}
namespace ImageHeaders {
// Constants that are shared by Image and its tests.
extern const char kPngHeader[];
extern const size_t kPngHeaderLength;
extern const char kPngIHDR[];
extern const size_t kPngIHDRLength;
extern const size_t kIHDRDataStart;
extern const size_t kPngIntSize;
extern const char kGifHeader[];
extern const size_t kGifHeaderLength;
extern const size_t kGifDimStart;
extern const size_t kGifIntSize;
extern const size_t kJpegIntSize;
} // namespace ImageHeaders
} // namespace net_instaweb
#endif // NET_INSTAWEB_REWRITER_PUBLIC_IMAGE_DATA_LOOKUP_H_