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
|
/*
* Copyright (c) 2007 Wayne Meissner. All rights reserved.
*
* This file is part of jffi.
*
* This code is free software: you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License version 3 only, as
* published by the Free Software Foundation.
*
* This code 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 Lesser General Public License
* version 3 for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with this work. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>
#include <string.h>
typedef char Signed8;
typedef short Signed16;
typedef int Signed32;
typedef long long Signed64;
typedef float Float32;
typedef double Float64;
typedef long SignedLong;
struct test1 {
char b;
short s;
int i;
long long j;
SignedLong l;
float f;
double d;
char string[32];
};
#define T(x, type) \
type struct_field_##type(struct test1* t) { return t->x; } \
struct type##Align { char first; type value; }; \
type struct_align_##type(struct type##Align* a) { return a->value; }
T(b, Signed8);
T(s, Signed16);
T(i, Signed32);
T(j, Signed64);
T(f, Float32);
T(d, Float64);
Signed64 struct_field_SignedLong(struct test1* t) { return t->l; }
struct SignedLongAlign { char first; SignedLong value; };
Signed64 struct_align_SignedLong(struct SignedLongAlign* a) { return a->value; }
void
struct_set_string(struct test1* t, char* s)
{
strcpy(t->string, s);
}
struct test1*
struct_make_struct(char b, short s, int i, long long ll, float f, double d)
{
static struct test1 t;
memset(&t, 0, sizeof(t));
t.b = b;
t.s = s;
t.i = i;
t.j = ll;
t.f = f;
t.d = d;
return &t;
}
|