Browse Source

* change sources

master
Alex 'AdUser' Z 10 years ago
parent
commit
623d6dd63e
  1. 11
      src/Makefile
  2. 35
      src/bitmap.c
  3. 3
      src/bitmap.h
  4. 17
      src/image.c
  5. 5
      src/image.h
  6. 17
      src/test-image.c
  7. 34
      tests/bitmap.c

11
src/Makefile

@ -0,0 +1,11 @@
all: test-bitmap
%.o: %.c
gcc -O0 -Wall -Wextra -pedantic -ggdb $< -o $@
test-bitmap: test-bitmap.c bitmap.c
gcc -Wall -Wextra -pedantic -g -ggdb test-bitmap.c bitmap.c -o test-bitmap
clean:
rm -f *.o
rm -f test-bitmap

35
src/bitmap.c

@ -0,0 +1,35 @@
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Library General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301, USA
*/
#include "main.h"
#include "bitmap.h"
int bitmap_compare(bitmap *a, bitmap *b)
{
uint16_t row = 0;
uint16_t bit = 0;
size_t cnt = 0;
for (row = 0; row < 16; row++) {
bit = 1 << 15;
while (bit) {
cnt += !!(((*a)[row] & bit) ^ ((*b)[row] & bit));
bit >>= 1;
}
}
return cnt;
}

3
src/bitmap.h

@ -0,0 +1,3 @@
typedef uint16_t bitmap[16];
int bitmap_compare(bitmap *a, bitmap *b);

17
src/image.c

@ -19,23 +19,6 @@
#include <gd.h>
int bitmap_compare(image_bitmap * const a, image_bitmap * const b)
{
uint16_t row = 0;
uint16_t bit = 0;
size_t cnt = 0;
for (row = 0; row < 16; row++) {
bit = 1 << 15;
while (bit) {
cnt += !!(((*a)[row] & bit) ^ ((*b)[row] & bit));
bit >>= 1;
}
}
return cnt;
}
int image_load(void)
{
return 1;

5
src/image.h

@ -1,6 +1 @@
#define SAMPLE_SIZE sizeof(uint16_t)
typedef uint16_t image_bitmap[16];
int bitmap_compare(image_bitmap * const a, image_bitmap * const b);
int image_load(void);

17
src/test-image.c

@ -1,17 +0,0 @@
#include "main.h"
#include "image.h"
int main(int argc, char **argv)
{
int i = 0;
image_bitmap a, b;
for (i = 0; i < 16; i++) {
a[i] = 0x0000;
b[i] = 0xFFFF;
}
printf("%u\n", bitmap_compare(&a, &b));
return 1;
}

34
tests/bitmap.c

@ -0,0 +1,34 @@
#include "main.h"
#include "bitmap.h"
int
main(int argc, char **argv)
{
bitmap a, b;
memset (&a, 0x00, 16 * sizeof(uint16_t));
memset (&b, 0x00, 16 * sizeof(uint16_t));
assert(bitmap_compare(&a, &b) == 0);
memset (&a, 0xFE, 16 * sizeof(uint16_t));
memset (&b, 0xFF, 16 * sizeof(uint16_t));
assert(bitmap_compare(&a, &b) == 32);
memset (&a, 0x00, 16 * sizeof(uint16_t));
memset (&b, 0x55, 16 * sizeof(uint16_t));
assert(bitmap_compare(&a, &b) == 128);
memset (&a, 0x00, 16 * sizeof(uint16_t));
memset (&b, 0xAA, 16 * sizeof(uint16_t));
assert(bitmap_compare(&a, &b) == 128);
memset (&a, 0xAA, 16 * sizeof(uint16_t));
memset (&b, 0x55, 16 * sizeof(uint16_t));
assert(bitmap_compare(&a, &b) == 256);
memset (&a, 0x00, 16 * sizeof(uint16_t));
memset (&b, 0xFF, 16 * sizeof(uint16_t));
assert(bitmap_compare(&a, &b) == 256);
return 0;
}
Loading…
Cancel
Save