Exemplo n.º 1
0
int
main(int argc, char *argv[])
{
  CA *ca;
  char *filename = "out.rnd";
  FILE *p;
  int nbytes;
  unsigned rule;

  srand(time(NULL));

  nbytes = 1024*1024*10;

  if (argc != 2)
  {
    fprintf(stderr, "usage: %s rule\n", PROGRAM_NAME);
    exit(EXIT_FAILURE);
  }
  else
  {
    char *strend;

    rule = strtoul(argv[1], &strend, 10);

    if (*strend)
    {
      fprintf(stderr, "Invalid rule : '%s'\n", argv[1]);
      exit(EXIT_FAILURE);
    }
  }

  if (DEBUG)
  {
    printf("rule : %u\n", rule);
  }

  ca = ca_create(512, rule);

  if (!(p = fopen(filename, "wb")))
  {
    perror("fopen");
    exit(EXIT_FAILURE);
  }

  ca_init_random(ca); 

  while (nbytes >= 0)
  {
    ca_iterate(ca, 1);
    nbytes = ca_to_file(ca, nbytes, p);
  }
  
  fclose(p);
  ca_destroy(ca);
        
  return EXIT_SUCCESS;
}
static int ca_extend(struct count_array *ca, dm_block_t extra_blocks)
{
	dm_block_t nr_blocks = ca->nr + extra_blocks;
	uint32_t *counts = vzalloc(sizeof(*counts) * nr_blocks);
	if (!counts)
		return -ENOMEM;

	if (ca->counts) {
		memcpy(counts, ca->counts, sizeof(*counts) * ca->nr);
		ca_destroy(ca);
	}
	ca->nr = nr_blocks;
	ca->nr_free += extra_blocks;
	ca->counts = counts;
	return 0;
}
Exemplo n.º 3
0
int
main(int argc, char *argv[])
{
  UINT i;

  unsigned int N;
  UINT NSTATES;

  unsigned int rule;
  CA *ca;

  char *graph;

  if (argc != 3)
  {
    fprintf(stderr, "usage: %s rule ca-size\n", PROGRAM_NAME);
    exit(EXIT_FAILURE);
  }

  sscanf(argv[1], "%u", &rule);

  sscanf(argv[2], "%u", &N);

  if (DEBUG)
    fprintf(stderr, "rule %u\nN=%u\n", rule, N);

  ca = ca_create(N, rule);

  NSTATES =  2;
  NSTATES <<= (N - 1);

  graph = create_graph(NSTATES);

  for (i = 0; i < NSTATES; ++i)
    flags_unset(graph, i, STATE_ALL_SET_MASK);

  for (i = 0; i < NSTATES; ++i)
    if (!flags_test(graph, i, STATE_HAS_BEEN_VISITED))
      search_cycle(ca, graph, i);

  free_graph(graph);
  ca_destroy(ca);

  return EXIT_SUCCESS;
}
Exemplo n.º 4
0
int
main(int argc, char *argv[])
{
  CA **ca;
  char *filename = "out.rnd";
  FILE *p;
  long long nbytes;
  int nrules;
  unsigned int *rules;
  int j;

  srand(time(NULL));

  nbytes = 1024L * 1024L * 1024L * 2L;

  nrules = argc - 1;

  if (nrules < 1)
  {
    fprintf(stderr, "usage: %s rule0 rule1 ... ruleN\n", PROGRAM_NAME);
    exit(EXIT_FAILURE);
  }
  else
  {
    char *strend;
    int i;

    MALLOC(rules, sizeof(unsigned int) * nrules);
    MALLOC(ca, sizeof(CA*) * nrules);

    for (i = 0; i < nrules; ++i)
    {
      rules[i] = strtoul(argv[i + 1], &strend, 10);

      if (*strend)
      {
        fprintf(stderr, "Invalid rule : '%s'\n", argv[i + 1]);
        exit(EXIT_FAILURE);
      }

      if (DEBUG)
        fprintf(stderr, "Parsed rule '%s'\n", argv[i + 1]);

      ca[i] = ca_create(503, rules[i]);
      ca_init_random(ca[i]);
    }
  }


  if (!(p = fopen(filename, "wb")))
  {
    perror("fopen");
    exit(EXIT_FAILURE);
  }


  while (nbytes >= 0)
  {
    int i;

    for (i = nrules - 1; i >= 1 ; --i)
      ca_feedback(ca[i], ca[i - 1], 4);

    for (i = 0; i < nrules; ++i)
      ca_iterate(ca[i], 1);

    nbytes = ca_to_file(ca[nrules - 1], nbytes, p);
  }
  
  fclose(p);

  for (j = 0; j < nrules; ++j)
    ca_destroy(ca[j]);
        
  return EXIT_SUCCESS;
}
Exemplo n.º 5
0
int
main(int argc, char *argv[])
{
  int i;

  int N;
  int NSTATES;

  unsigned int rule;
  CA *ca;

  FILE *p;
  char filename[256];

  if (argc != 3)
  {
    fprintf(stderr, "usage: %s rule ca-size\n", PROGRAM_NAME);
    exit(EXIT_FAILURE);
  }

  sscanf(argv[1], "%u", &rule);

  sscanf(argv[2], "%d", &N);

  if (DEBUG)
    fprintf(stderr, "rule %u\nN=%d\n", rule, N);

  ca = ca_create(N, rule);

  sprintf(filename, "graph-rule%u-n%d.dot", rule, N);
  filename[255] = 0;

  p = fopen(filename, "w");

  if (!p)
  {
    fprintf(stderr, "couldn't open file '%s'\n", filename);
    exit(EXIT_FAILURE);
  }

  fprintf(p, "digraph Graph_rule%u_n%d{\n", rule, N);

  NSTATES =  (2 << (N - 1));

  for (i = 0; i < NSTATES; ++i)
  {
    int dest;

    ca_int_init(ca, i);
    ca_iterate(ca, 1);
    dest = ca_int_get(ca);

    fprintf(p, " %d -> %d;\n", i, dest);
  }

  fprintf(p, "}\n");

  fclose(p);

  ca_destroy(ca);

  return EXIT_SUCCESS;
}