00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <stdlib.h>
00026 #include <errno.h>
00027
00028 #include "data_object.h"
00029 #include "buffer_action.h"
00030 #include "buffer_action_internal.h"
00031 #include "debug.h"
00032
00033 struct buffer_action {
00034 void *impl;
00035 struct buffer_action_funcs *funcs;
00036 };
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 int buffer_action_create_impl(buffer_action_t **action, void *impl,
00052 struct buffer_action_funcs *funcs)
00053 {
00054 if (action == NULL)
00055 return_error(EINVAL);
00056
00057 *action = malloc(sizeof(buffer_action_t));
00058
00059 if (*action == NULL)
00060 return_error(ENOMEM);
00061
00062 (*action)->impl = impl;
00063 (*action)->funcs = funcs;
00064
00065 return 0;
00066 }
00067
00068
00069
00070
00071
00072
00073
00074
00075 void *buffer_action_get_impl(buffer_action_t *action)
00076 {
00077 return action->impl;
00078 }
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092 int buffer_action_do(buffer_action_t *action)
00093 {
00094 if (action == NULL)
00095 return_error(EINVAL);
00096
00097 return (*action->funcs->do_func)(action);
00098 }
00099
00100
00101
00102
00103
00104
00105
00106
00107 int buffer_action_undo(buffer_action_t *action)
00108 {
00109 if (action == NULL)
00110 return_error(EINVAL);
00111
00112 return (*action->funcs->undo_func)(action);
00113 }
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129 int buffer_action_private_copy(buffer_action_t *action, data_object_t *dobj)
00130 {
00131 if (action == NULL || dobj == NULL)
00132 return_error(EINVAL);
00133
00134 return (*action->funcs->private_copy_func)(action, dobj);
00135 }
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145 int buffer_action_to_event(buffer_action_t *action,
00146 struct bless_buffer_event_info *event_info)
00147 {
00148 if (action == NULL || event_info == NULL)
00149 return_error(EINVAL);
00150
00151 return (*action->funcs->to_event_func)(action, event_info);
00152 }
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162 int buffer_action_free(buffer_action_t *action)
00163 {
00164 if (action == NULL)
00165 return_error(EINVAL);
00166
00167 (*action->funcs->free_func)(action);
00168 free(action);
00169 return 0;
00170 }