/*
 * Copyright 2016 The Emscripten Authors.  All rights reserved.
 * Emscripten is available under two separate licenses, the MIT license and the
 * University of Illinois/NCSA Open Source License.  Both these licenses can be
 * found in the LICENSE file.
 */

#include <stdio.h>
#include <math.h>
#include <string.h>

struct vec {
  double x, y, z;
  vec() : x(0), y(0), z(0) {};
  vec(const double a, const double b, const double c) : x(a), y(b), z(c) {};
};

struct basis {
  vec a, b, c;
  basis(const vec& v) {
    a = v;  // should not touch b!
    printf("*%.2f,%.2f,%.2f*\n", b.x, b.y, b.z);
  }
};

int main() {
  basis B(vec(1, 0, 0));

  // Part 2: similar problem with memset and memmove
  int x = 1, y = 77, z = 2;
  memset((void*)&x, 0, sizeof(int));
  memset((void*)&z, 0, sizeof(int));
  printf("*%d,%d,%d*\n", x, y, z);
  memcpy((void*)&x, (void*)&z, sizeof(int));
  memcpy((void*)&z, (void*)&x, sizeof(int));
  printf("*%d,%d,%d*\n", x, y, z);
  memmove((void*)&x, (void*)&z, sizeof(int));
  memmove((void*)&z, (void*)&x, sizeof(int));
  printf("*%d,%d,%d*\n", x, y, z);
  return 0;
}
