hash.h (2116B)
1/* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, 13 * software distributed under the License is distributed on an 14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 * KIND, either express or implied. See the License for the 16 * specific language governing permissions and limitations 17 * under the License. 18 */ 19 20 21#ifndef _GUAC_HASH_H 22#define _GUAC_HASH_H 23 24/** 25 * Provides functions and structures for producing likely-to-be-unique hash 26 * values for images. 27 * 28 * @file hash.h 29 */ 30 31#include <cairo/cairo.h> 32 33/** 34 * Produces a 24-bit hash value from all pixels of the given surface. The 35 * surface provided must be RGB or ARGB with each pixel stored in 32 bits. 36 * The hashing algorithm used is a variant of the cyclic polynomial rolling 37 * hash. 38 * 39 * @param surface The Cairo surface to hash. 40 * @return An arbitrary 24-bit unsigned integer value intended to be well 41 * distributed across different images. 42 */ 43unsigned int guac_hash_surface(cairo_surface_t* surface); 44 45/** 46 * Given two Cairo surfaces, returns zero if the data contained within each 47 * is identical, and a positive or negative value if the value of the first 48 * is found to be lexically greater or less than the second respectively. 49 * 50 * @param a The first Cairo surface to compare. 51 * @param b The Cairo surface to compare the first surface against. 52 * @return Zero if the data contained within each is identical, and a positive 53 * or negative value if the value of the first is found to be lexically 54 * greater or less than the second respectively. 55 */ 56int guac_surface_cmp(cairo_surface_t* a, cairo_surface_t* b); 57 58#endif 59