Skip to content

Instantly share code, notes, and snippets.

@d630200x
Last active March 4, 2020 14:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save d630200x/10e18136440df1101932ed7aac4410cd to your computer and use it in GitHub Desktop.
Save d630200x/10e18136440df1101932ed7aac4410cd to your computer and use it in GitHub Desktop.
#include "colaPrivate.h"
/*publice method define*/
cola_t* cola_newObj()
{
cola_t* self = (cola_t*)malloc(sizeof(cola_t));
self->m_data = (cola_data_t*)malloc(sizeof(cola_data_t));
self->m_vTable = (iDrink_vTable_t*)malloc(sizeof(iDrink_vTable_t));
self->m_vTable->init = &cola_init;
self->m_vTable->deleteObj = &cola_deleteObj;
self->m_vTable->set_price = &cola_set_price;
self->m_vTable->get_price = &cola_get_price;
self->m_vTable->set_ice = &cola_set_ice;
self->m_vTable->get_ice = &cola_get_ice;
self->m_vTable->set_size = &cola_set_size;
self->m_vTable->get_size = &cola_get_size;
return self;
}
void cola_set_price(cola_t* self, int price)
{
self->m_data->m_price = price;
}
int cola_get_price(cola_t* self)
{
return self->m_data->m_price;
}
void cola_set_ice(cola_t* self, bool ice)
{
self->m_data->m_ice = ice;
}
bool cola_get_ice(cola_t* self)
{
return self->m_data->m_ice;
}
void cola_set_size(cola_t* self, int size)
{
self->m_data->m_size = size;
}
int cola_get_size(cola_t* self)
{
return self->m_data->m_size;
}
/*private method define*/
static void cola_init(cola_t* self)
{
self->m_data->m_price = 0;
self->m_data->m_ice = true;
self->m_data->m_size = 0;
}
static void cola_deleteObj(cola_t* self)
{
free(self->m_vTable);
free(self->m_data);
free(self);
}
#pragma once
#include "common.h"
typedef struct _Cola_ cola_t;
/*publice method declaration*/
cola_t* cola_newObj();
void cola_set_price(cola_t* self, int price);
int cola_get_price(cola_t* self);
void cola_set_ice(cola_t* self, bool ice);
bool cola_get_ice(cola_t* self);
void cola_set_size(cola_t* self, int size);
int cola_get_size(cola_t* self);
#pragma once
#include "cola.h"
#include "iDrink.h"
typedef struct _Cola_Data_ cola_data_t;
struct _Cola_{
cola_data_t* m_data;
iDrink_vTable_t* m_vTable;
};
/*private variable declaration*/
struct _Cola_Data_{
int m_price;
bool m_ice;
int m_size;
};
/*private method declaration*/
static void cola_init(cola_t* self);
static void cola_deleteObj(cola_t* self);
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include "iDrink.h"
void iDrink_init(iDrink_t* self)
{
self->m_vTable->init(self);
}
void iDrink_deleteObj(iDrink_t* self)
{
self->m_vTable->deleteObj(self);
}
void iDrink_set_price(iDrink_t* self, int price)
{
self->m_vTable->set_price(self, price);
}
int iDrink_get_price(iDrink_t* self)
{
return self->m_vTable->get_price(self);
}
void iDrink_set_ice(iDrink_t* self, bool ice)
{
self->m_vTable->set_ice(self, ice);
}
bool iDrink_get_ice(iDrink_t* self)
{
return self->m_vTable->get_ice(self);
}
void iDrink_set_size(iDrink_t* self, int size)
{
self->m_vTable->set_size(self, size);
}
int iDrink_get_size(iDrink_t* self)
{
return self->m_vTable->get_size(self);
}
#pragma once
#include "common.h"
#define S_SIZE 1
#define M_SIZE 2
#define L_SIZE 3
typedef struct _i_Drink_ iDrink_t;
typedef struct _i_Drink_v_Table_{
void (*init)(void*);
void (*deleteObj)(iDrink_t*);
void (*set_price)(iDrink_t*, int);
int (*get_price)(iDrink_t*);
void (*set_ice)(iDrink_t*, bool);
bool (*get_ice)(iDrink_t*);
void (*set_size)(iDrink_t*, int);
int (*get_size)(iDrink_t*);
}iDrink_vTable_t;
struct _i_Drink_{
void* m_data;
iDrink_vTable_t* m_vTable;
};
void iDrink_init(iDrink_t* self);
void iDrink_deleteObj(iDrink_t* self);
void iDrink_set_price(iDrink_t* self, int price);
int iDrink_get_price(iDrink_t* self);
void iDrink_set_ice(iDrink_t* self, bool ice);
bool iDrink_get_ice(iDrink_t* self);
void iDrink_set_size(iDrink_t* self, int size);
int iDrink_get_size(iDrink_t* self);
#include "common.h"
#include "iDrink.h"
#include "cola.h"
int main()
{
iDrink_t* m_cola = cola_newObj();
iDrink_init(m_cola);
iDrink_set_ice(m_cola, true);
iDrink_set_size(m_cola, L_SIZE);
iDrink_set_price(m_cola, 50);
printf("prince: %d\n", iDrink_get_price(m_cola));
printf("ice: %d\n", iDrink_get_ice(m_cola));
printf("size: %d\n", iDrink_get_size(m_cola));
iDrink_deleteObj(m_cola);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment