#include <stdio.h>
#include <stdlib.h>
typedef struct mySingletonFunction
{
int first_time;
} mySingletonFunction;
void abc(mySingletonFunction *obj)
{
if(!obj->first_time)
{
return;
}
else
obj->first_time = 0;
}
mySingletonFunction *initializeObject()
{
mySingletonFunction
*obj
= (struct mySingletonFunction
*)malloc(sizeof(struct mySingletonFunction
));
obj->first_time = 1;
return obj;
}
void callAbc(mySingletonFunction *obj)
{
obj->first_time = 1;
}
void resetObject(mySingletonFunction *obj)
{
obj->first_time = 1;
}
void deleteObject(mySingletonFunction *obj)
{
}
int main()
{
mySingletonFunction *myObject = initializeObject();
abc(myObject);
abc(myObject);
abc(myObject);
abc(myObject);
abc(myObject);
resetObject(myObject);
abc(myObject);
abc(myObject);
abc(myObject);
abc(myObject);
abc(myObject);
deleteObject(myObject);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCgp0eXBlZGVmIHN0cnVjdCBteVNpbmdsZXRvbkZ1bmN0aW9uCnsKCWludCBmaXJzdF90aW1lOwp9IG15U2luZ2xldG9uRnVuY3Rpb247Cgp2b2lkIGFiYyhteVNpbmdsZXRvbkZ1bmN0aW9uICpvYmopCnsKCWlmKCFvYmotPmZpcnN0X3RpbWUpCgl7CgkJcHJpbnRmKCJTa2lwcGluZy4uIik7CgkJcmV0dXJuOwoJfQoJZWxzZQoJCW9iai0+Zmlyc3RfdGltZSA9IDA7CgkJCiAgICBwcmludGYoIlRoaXMgaXMgYWJjIik7Cn0KCm15U2luZ2xldG9uRnVuY3Rpb24gKmluaXRpYWxpemVPYmplY3QoKQp7CglteVNpbmdsZXRvbkZ1bmN0aW9uICpvYmogPSAoc3RydWN0IG15U2luZ2xldG9uRnVuY3Rpb24qKW1hbGxvYyhzaXplb2Yoc3RydWN0IG15U2luZ2xldG9uRnVuY3Rpb24pKTsKCQoJb2JqLT5maXJzdF90aW1lID0gMTsKCiAgICByZXR1cm4gb2JqOwkKfQoKdm9pZCBjYWxsQWJjKG15U2luZ2xldG9uRnVuY3Rpb24gKm9iaikKewoJb2JqLT5maXJzdF90aW1lID0gMTsKfQoKdm9pZCByZXNldE9iamVjdChteVNpbmdsZXRvbkZ1bmN0aW9uICpvYmopCnsKCW9iai0+Zmlyc3RfdGltZSA9IDE7Cn0KCnZvaWQgZGVsZXRlT2JqZWN0KG15U2luZ2xldG9uRnVuY3Rpb24gKm9iaikKewoJZnJlZShvYmopOwp9CgoKaW50IG1haW4oKQp7CglteVNpbmdsZXRvbkZ1bmN0aW9uICpteU9iamVjdCA9IGluaXRpYWxpemVPYmplY3QoKTsKCQoJYWJjKG15T2JqZWN0KTsKCWFiYyhteU9iamVjdCk7CglhYmMobXlPYmplY3QpOwoJYWJjKG15T2JqZWN0KTsKCWFiYyhteU9iamVjdCk7CgkKCXJlc2V0T2JqZWN0KG15T2JqZWN0KTsKCQoJYWJjKG15T2JqZWN0KTsKCWFiYyhteU9iamVjdCk7CglhYmMobXlPYmplY3QpOwoJYWJjKG15T2JqZWN0KTsKCWFiYyhteU9iamVjdCk7CgkKCWRlbGV0ZU9iamVjdChteU9iamVjdCk7CiAgICAKICAgIHJldHVybiAwOwp9Cgo=