Skip to content

Instantly share code, notes, and snippets.

@andreinechaev
Created March 5, 2015 05:39
Show Gist options
  • Save andreinechaev/be99164e0dad17a0e81b to your computer and use it in GitHub Desktop.
Save andreinechaev/be99164e0dad17a0e81b to your computer and use it in GitHub Desktop.
//
// main.c
// my_linked_list
//
// Created by Andrei Nechaev on 3/4/15.
// Copyright (c) 2015 Andrei Nechaev. All rights reserved.
//
#include <stdio.h>
#include <stdlib.h>
#include <Block.h>
typedef struct{
char *name;
int age;
}Employee;
typedef struct{
char *company_name;
Employee **emploee;
int counter;
void (^add)(Employee *empl);
}Company;
Company *init_company(char *name);
Employee *init_empl(char *name, int age);
void print(Company *cmp);
void release_employees(Company *cmp);
int main(int argc, const char * argv[]) {
Company *company;
company = init_company("Apple");
company->add = Block_copy(^(Employee *empl){
company->emploee[company->counter] = empl;
++company->counter;
});
Employee *alfred = init_empl("Alfred", 25);
Employee *max = init_empl("Max", 47);
Employee *steven = init_empl("Steven", 31);
company->add(steven);
company->add(max);
company->add(alfred);
print(company);
release_employees(company);
Block_release(company->add);
free(company);
getchar();
return 0;
}
Company *init_company(char *name) {
Company *cmp = (Company *)malloc(sizeof(Company));
cmp->emploee = (Employee **)malloc(sizeof(Employee)*16);
cmp->company_name = name;
cmp->counter = 0;
return cmp;
}
Employee *init_empl(char *name, int age) {
Employee *employee = (Employee *)malloc(sizeof(Employee));
employee->name = name;
employee->age = age;
return employee;
}
void print(Company *cmp){
cmp->counter == 1 ? printf("|Company %s has %d empoyee,\n", cmp->company_name, cmp->counter) :
printf("|Company %s has %d empoyees,\n", cmp->company_name, cmp->counter);
for (int i = 0; i < cmp->counter; ++i) {
Employee *empl = cmp->emploee[i];
printf("|name - %s,\n|age %d\n", empl->name, empl->age);
}
}
void release_employees(Company *cmp) {
for (int i = 0; i < cmp->counter; ++i) {
free(cmp->emploee[i]);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment