Commit 95c0d00944f64ab78e767f08cd1c0cc2c56b1e92
1 parent
6591c0a6
get rid of some function calls when selection interfaces
Showing
5 changed files
with
13 additions
and
67 deletions
| @@ -6,7 +6,7 @@ AC_INIT([cclass], [0.0.1], [Georg Hopp <georg@steffers.org>]) | @@ -6,7 +6,7 @@ AC_INIT([cclass], [0.0.1], [Georg Hopp <georg@steffers.org>]) | ||
| 6 | AM_INIT_AUTOMAKE | 6 | AM_INIT_AUTOMAKE |
| 7 | AC_COPYRIGHT([Copyright (C) 2012 Georg Hopp]) | 7 | AC_COPYRIGHT([Copyright (C) 2012 Georg Hopp]) |
| 8 | AC_REVISION([$Revision: 0.01 $]) | 8 | AC_REVISION([$Revision: 0.01 $]) |
| 9 | -AC_CONFIG_SRCDIR([src/class.c]) | 9 | +AC_CONFIG_SRCDIR([src/testserver.c]) |
| 10 | AC_CONFIG_HEADERS([config.h]) | 10 | AC_CONFIG_HEADERS([config.h]) |
| 11 | AC_CONFIG_MACRO_DIR([m4]) | 11 | AC_CONFIG_MACRO_DIR([m4]) |
| 12 | 12 |
| @@ -64,19 +64,23 @@ | @@ -64,19 +64,23 @@ | ||
| 64 | INIT_IMPL(__VA_ARGS__) \ | 64 | INIT_IMPL(__VA_ARGS__) \ |
| 65 | }; struct class * const _##name = &c_##name | 65 | }; struct class * const _##name = &c_##name |
| 66 | 66 | ||
| 67 | +#define GET_CLASS(object) (*(class_ptr *)((object) - sizeof(void*))) | ||
| 68 | +#define IFACE_GET(class,iface) (interfaceGet(&((class)->impl),(iface))) | ||
| 69 | +#define IFACE_EXISTS(class,iface) (NULL != IFACE_GET((class),(iface))) | ||
| 70 | + | ||
| 67 | /** | 71 | /** |
| 68 | * \todo actually i use gcc feature ## for variadoc... think about | 72 | * \todo actually i use gcc feature ## for variadoc... think about |
| 69 | * a way to make this standard. | 73 | * a way to make this standard. |
| 70 | */ | 74 | */ |
| 71 | #define _CALL(object,_iface,method,...) \ | 75 | #define _CALL(object,_iface,method,...) \ |
| 72 | do { \ | 76 | do { \ |
| 73 | - class_ptr class = class_getClass((object)); \ | 77 | + class_ptr class = GET_CLASS((object)); \ |
| 74 | if (class->init) class->init(); \ | 78 | if (class->init) class->init(); \ |
| 75 | - iface = (struct i_##_iface *)class_getInterface(&class, &i_##_iface); \ | 79 | + iface = (struct i_##_iface *)IFACE_GET(class, &i_##_iface); \ |
| 76 | while ((NULL == iface || NULL == iface->method) && HAS_PARENT(class)) { \ | 80 | while ((NULL == iface || NULL == iface->method) && HAS_PARENT(class)) { \ |
| 77 | class = class->parent; \ | 81 | class = class->parent; \ |
| 78 | if (class->init) class->init(); \ | 82 | if (class->init) class->init(); \ |
| 79 | - iface = (struct i_##_iface *)class_getInterface(&class, &i_##_iface); \ | 83 | + iface = (struct i_##_iface *)IFACE_GET(class, &i_##_iface); \ |
| 80 | }; \ | 84 | }; \ |
| 81 | assert(NULL != iface->method); \ | 85 | assert(NULL != iface->method); \ |
| 82 | } while(0) | 86 | } while(0) |
| @@ -98,20 +102,17 @@ | @@ -98,20 +102,17 @@ | ||
| 98 | #define PARENTCALL(object,_iface,method,...) \ | 102 | #define PARENTCALL(object,_iface,method,...) \ |
| 99 | do { \ | 103 | do { \ |
| 100 | struct i_##_iface * iface; \ | 104 | struct i_##_iface * iface; \ |
| 101 | - class_ptr class = class_getClass((object)); \ | 105 | + class_ptr class = GET_CLASS((object)); \ |
| 102 | if (class->init) class->init(); \ | 106 | if (class->init) class->init(); \ |
| 103 | assert(HAS_PARENT(class)); \ | 107 | assert(HAS_PARENT(class)); \ |
| 104 | class = class->parent; \ | 108 | class = class->parent; \ |
| 105 | if (class->init) class->init(); \ | 109 | if (class->init) class->init(); \ |
| 106 | - iface = (struct i_##_iface *)class_getInterface(&class, &i_##_iface); \ | 110 | + iface = (struct i_##_iface *)IFACE_GET(class, &i_##_iface); \ |
| 107 | assert(NULL != iface->method); \ | 111 | assert(NULL != iface->method); \ |
| 108 | iface->method(object, ##__VA_ARGS__); \ | 112 | iface->method(object, ##__VA_ARGS__); \ |
| 109 | } while(0) | 113 | } while(0) |
| 110 | 114 | ||
| 111 | 115 | ||
| 112 | -#define IFACE_GET(class,iface) (interfaceGet(&((class)->impl),(iface))) | ||
| 113 | -#define IFACE_EXISTS(class,iface) (NULL != IFACE_GET((class),(iface))) | ||
| 114 | - | ||
| 115 | #define HAS_PARENT(class) (NULL != ((class)->parent)) | 116 | #define HAS_PARENT(class) (NULL != ((class)->parent)) |
| 116 | 117 | ||
| 117 | typedef void (* fptr_classInit)(void); | 118 | typedef void (* fptr_classInit)(void); |
| @@ -126,9 +127,6 @@ struct class { | @@ -126,9 +127,6 @@ struct class { | ||
| 126 | struct iface_impl impl; | 127 | struct iface_impl impl; |
| 127 | }; | 128 | }; |
| 128 | 129 | ||
| 129 | -extern void * class_getInterface(class_ptr *, iface_ptr); | ||
| 130 | -extern class_ptr class_getClass(void *); | ||
| 131 | - | ||
| 132 | #endif // __CLASS_H__ | 130 | #endif // __CLASS_H__ |
| 133 | 131 | ||
| 134 | // vim: set ts=4 sw=4: | 132 | // vim: set ts=4 sw=4: |
| @@ -3,9 +3,7 @@ AUTOMAKE_OPTIONS = subdir-objects | @@ -3,9 +3,7 @@ AUTOMAKE_OPTIONS = subdir-objects | ||
| 3 | 3 | ||
| 4 | IFACE = interface/class.c interface/stream_reader.c interface/logger.c \ | 4 | IFACE = interface/class.c interface/stream_reader.c interface/logger.c \ |
| 5 | interface/stream_writer.c interface/http_intro.c \ | 5 | interface/stream_writer.c interface/http_intro.c \ |
| 6 | - interface/subject.c interface/observer.c | ||
| 7 | -CLASS = class.c interface.c | ||
| 8 | -RB = ringbuffer.c ringbuffer/rb_read.c | 6 | + interface/subject.c interface/observer.c interface.c |
| 9 | SOCKET = socket.c socket/accept.c socket/connect.c socket/listen.c | 7 | SOCKET = socket.c socket/accept.c socket/connect.c socket/listen.c |
| 10 | SERVER = server.c server/run.c server/close_conn.c server/poll.c \ | 8 | SERVER = server.c server/run.c server/close_conn.c server/poll.c \ |
| 11 | server/handle_accept.c server/read.c | 9 | server/handle_accept.c server/read.c |
| @@ -41,7 +39,7 @@ AM_CFLAGS = -Wall -I ../include/ | @@ -41,7 +39,7 @@ AM_CFLAGS = -Wall -I ../include/ | ||
| 41 | bin_PROGRAMS = testserver | 39 | bin_PROGRAMS = testserver |
| 42 | 40 | ||
| 43 | testserver_SOURCES = testserver.c \ | 41 | testserver_SOURCES = testserver.c \ |
| 44 | - $(IFACE) $(CLASS) $(SOCKET) $(SERVER) $(LOGGER) $(MSG) $(REQ) \ | 42 | + $(IFACE) $(SOCKET) $(SERVER) $(LOGGER) $(MSG) $(REQ) \ |
| 45 | $(WRITER) $(RESP) $(HEADER) $(PARSER) $(WORKER) $(CB) \ | 43 | $(WRITER) $(RESP) $(HEADER) $(PARSER) $(WORKER) $(CB) \ |
| 46 | $(UTILS) | 44 | $(UTILS) |
| 47 | testserver_CFLAGS = -Wall -I ../include/ | 45 | testserver_CFLAGS = -Wall -I ../include/ |
src/class.c
deleted
100644 → 0
| 1 | -/** | ||
| 2 | - * \file | ||
| 3 | - * Helper functions for class. | ||
| 4 | - * | ||
| 5 | - * \todo rename function to fit in the otherwise used scheme. | ||
| 6 | - * \author Georg Hopp | ||
| 7 | - * | ||
| 8 | - * \copyright | ||
| 9 | - * Copyright (C) 2012 Georg Hopp | ||
| 10 | - * | ||
| 11 | - * This program is free software: you can redistribute it and/or modify | ||
| 12 | - * it under the terms of the GNU General Public License as published by | ||
| 13 | - * the Free Software Foundation, either version 3 of the License, or | ||
| 14 | - * (at your option) any later version. | ||
| 15 | - * | ||
| 16 | - * This program is distributed in the hope that it will be useful, | ||
| 17 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 18 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 19 | - * GNU General Public License for more details. | ||
| 20 | - * | ||
| 21 | - * You should have received a copy of the GNU General Public License | ||
| 22 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
| 23 | - */ | ||
| 24 | - | ||
| 25 | -#include <stdarg.h> | ||
| 26 | -#include <stdlib.h> | ||
| 27 | - | ||
| 28 | -#include "class.h" | ||
| 29 | -#include "interface.h" | ||
| 30 | - | ||
| 31 | -void * | ||
| 32 | -class_getInterface(class_ptr * class, iface_ptr _iface) | ||
| 33 | -{ | ||
| 34 | - void * iface = (void *)IFACE_GET(*class, _iface); | ||
| 35 | - | ||
| 36 | - while(NULL == iface && HAS_PARENT(*class)) { | ||
| 37 | - *class = (*class)->parent; | ||
| 38 | - iface = (void *)IFACE_GET(*class, _iface); | ||
| 39 | - } | ||
| 40 | - | ||
| 41 | - return iface; | ||
| 42 | -} | ||
| 43 | - | ||
| 44 | -class_ptr | ||
| 45 | -class_getClass(void * object) | ||
| 46 | -{ | ||
| 47 | - return *(class_ptr *)(object - sizeof(void*)); | ||
| 48 | -} | ||
| 49 | - | ||
| 50 | -// vim: set ts=4 sw=4: |
| @@ -70,7 +70,7 @@ classDelete(void ** object) | @@ -70,7 +70,7 @@ classDelete(void ** object) | ||
| 70 | void * | 70 | void * |
| 71 | classClone(void * _object) | 71 | classClone(void * _object) |
| 72 | { | 72 | { |
| 73 | - class_ptr class = class_getClass(_object); | 73 | + class_ptr class = GET_CLASS(_object); |
| 74 | void * object = calloc(1, class->object_size + sizeof(void*)); | 74 | void * object = calloc(1, class->object_size + sizeof(void*)); |
| 75 | 75 | ||
| 76 | * (class_ptr *)object = class; | 76 | * (class_ptr *)object = class; |
Please
register
or
login
to post a comment