g_memblock.c

来自「c语言是面向过程的程序语言」· C语言 代码 · 共 119 行

C
119
字号
/* ****************************** * Object Oriented Programming in C * * Author: Laurent Deniau, Laurent.Deniau@cern.ch * * For more information, please see the paper: * http://home.cern.ch/ldeniau/html/oopc/oopc.html * ****************************** *//*------------------------------------*//*   Generic memBlock implementation  *//*          [abstract class]          *//*------------------------------------*/#define IMPLEMENTATION#include <g_memBlock.h>/*  Object implementation*/voidmethodDecl_(set) size_t n, gType1 x __{  size_t i;  for(i=0; i<n; i++) this->m.base[i] = x;}voidmethodDecl_(copy) size_t n, gType1 const* t __{  size_t i;  for(i=0; i<n; i++) this->m.base[i] = t[i];}voidmethodDecl_(resize) size_t n __{  if (this == this->m.owner) { /* only owner can resize */    this->m.base = realloc(this->m.base, n*sizeof(gType1));  }}BASEOBJECT_IMPLEMENTATION  methodName(set),  methodName(copy),  methodName(resize)ENDOF_IMPLEMENTATION/*  Abstract Class implementation*/initClassDecl() {} /* required */dtorDecl() /* required */{  if (this == this->m.owner) { /* only owner can destroy */    free(this->m.base);    this->m.owner = NULL;    this->m.base  = NULL;    --OBJECT.total;  }}intclassMethodDecl(numBlock){  return OBJECT.total;}voidmethodDecl_(init) size_t n __{  this->m.owner = this;  this->m.base  = calloc(n, sizeof(gType1));  ++OBJECT.total;}voidmethodDecl_(initRef) gType1 *const t __{  this->m.owner = NULL;  this->m.base  = t;}gType1 constconstMethodDecl(*const_base){  return this->m.base;}gType1methodDecl(*base){  return this->m.base;}ABSTRACTCLASS_IMPLEMENTATION  /* init total */  0,  methodName(numBlock),  methodName(init),  methodName(initRef),  methodName(const_base),  methodName(base)ENDOF_IMPLEMENTATION

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?