Задача написать учебный пример по Abstract data type на примере Си.
Что получилось:
stack.h:
// ...
struct Stack_s;
typedef struct Stack_s Stack;
// Old: typedef int Item;
typedef int8_t Item;
// Old: Stack* stack_create ();
// Old: void stack_destroy (Stack **stack);
// Old: Stack* stack_clone (Stack *stack);
Stack* stack_create (void);
void stack_destroy (Stack *stack);
Stack* stack_clone (const Stack *stack);
size_t stack_size (const Stack *stack);
int stack_is_empty (const Stack *stack);
void stack_push (Stack *stack, Item item);
Item stack_pop (Stack *stack);
Item stack_top (const Stack *stack);
void stack_clear (Stack *stack);
// ...
stack.c:
#include "stack.h"
struct Stack_s {
// Полное описание структуры стека скрыто от пользователя
// ...
};
// Old: Stack* stack_create() {
Stack* stack_create(void) {
// Создать стек можно только используя stack_create
// ...
}
// ...
main.c:
#include <stdio.h>
#include <stack.h>
int main(void) {
Stack *stack = stack_create();
stack_push(stack, 1);
stack_push(stack, 2);
stack_push(stack, 3);
while(!stack_is_empty(stack)) {
printf("%d\n", stack_pop(stack));
}
// Old: stack_destroy(&stack);
stack_destroy(stack);
return 0;
}
Хочется конструктивной (и не очень) критики.
Не смог найти хороших ссылок по именованию и минимальному набору функций (в том числе как удалять «объект»).
З.Ы.: Про GObject, Cello, OOC toolkit, Axel T. Schreiner, Object-Oriented Programming with ANSI-C слыхал