Thursday, 14 November 2013

Making structure variable private in C.

// header.h
#ifndef _HEADER_H
#define _HEADER_H

struct sPrivate;

// Main structure 
struct myStruct{
    // Private data
    struct sPrivate *psPrivate;
    // Function pointers
    void (*setData) (struct myStruct*, int);
    int  (*retData) (struct myStruct*);
};

#endif // _HEADER_H

//header.c
#include "header.h"

// Callback function - Setter / Getter
void set_data(struct myStruct* pMyStruct, int a);
int ret_data(struct myStruct* pMyStruct);

// structure containing private data
struct sPrivate {
    int data;

};

// Constructor function
struct myStruct *initStruct(){
    struct myStruct *pThis = (struct myStruct *)malloc(sizeof(struct myStruct));
    pThis->psPrivate= (struct sPrivate *)malloc(sizeof(struct sPrivate));
    pThis->psPrivate->data = 0;
    pThis->setData = set_data;
    pThis->retData = ret_data;
    return pThis;
}

void set_Data(struct myStruct* pMyStruct, int a){
    pMyStruct->psPrivate->data = a;
}

int ret_data(struct myStruct* pMyStruct){
    return pMyStruct->psPrivate->data;
}

//main.c
#include <stdio.h>
#include "header.h"

int main(){
    struct myStruct *pObj = initStruct();
    pObj->setData(pObj, 10);
    printf("%d\n", pObj->retData(pObj));
    // pObj->pPrivate->a = 30; /* Invalid */
    return 0;

}

No comments:

Post a Comment