#include <iostream>
#include <math.h>





struct Sneeuwpop
{
  float buikomtrek;
  float hoofdomtrek;
  int aantalarmen;
  bool wortelneus;
};



void maak_sneeuwpop(void *eigenschappen)
{
  Sneeuwpop *props_pointer = (Sneeuwpop *) eigenschappen;

  float buik=props_pointer->buikomtrek;
  float hoofd=props_pointer->hoofdomtrek;
  int armen=props_pointer->aantalarmen;
  bool neus=props_pointer->wortelneus;

  std::cout << "*********************" << std::endl;
  std::cout << "***** Sneeuwpop *****" << std::endl;
  std::cout << "*********************" << std::endl;
  std::cout << "Buikomtrek: " << buik << " meter" << std::endl;
  std::cout << "Hoofdomtrek: " << hoofd << " meter" << std::endl;
  std::cout << armen << " armen en ";
  std::cout << (neus ? "een wortelneus" : "geen neus") << std::endl;

  // change one of the props
  // props_pointer->buikomtrek = 500;
} // maak_sneeuwpop()



void printalltypes(void *value,int valuetype)
{
char *charptr=NULL;
int *intptr=NULL;
double *doubleptr=NULL;

  switch(valuetype)
  {
    case 1: charptr = (char*) value;
              std::cout << *charptr << std::endl;
    break;
    case 2: intptr = (int*) value;
              std::cout << *intptr << std::endl;
    break;
    case 3: doubleptr = (double*) value;
               std::cout << (double) *doubleptr << std::endl;
    break;
    default: std::cout << "Invalid type" << std::endl;
  } // switch
}



int main()
{
char letter='a';
int number=42;
double flurp=321.65;

  printalltypes(&letter,1);
  printalltypes(&number,2);
  printalltypes(&flurp,3);

  Sneeuwpop pop_eigenschappen;

  pop_eigenschappen.buikomtrek=2.5;
  pop_eigenschappen.hoofdomtrek=0.95;
  pop_eigenschappen.aantalarmen=5;
  pop_eigenschappen.wortelneus=false;
  maak_sneeuwpop((void *) &pop_eigenschappen);

  //std::cout << pop_eigenschappen.buikomtrek << std::endl;

} // main()

