Commit 81b29f25 authored by Loic Hausammann's avatar Loic Hausammann
Browse files

Logger: use logger_mask_data almost everywhere and formating

parent 4173c1aa
...@@ -65,25 +65,27 @@ ...@@ -65,25 +65,27 @@
char logger_version[logger_version_size] = "0.1"; char logger_version[logger_version_size] = "0.1";
const struct mask_data
const struct mask_data logger_mask_data[logger_count_mask] = { logger_mask_data[logger_count_mask] =
/* Particle's position */ {
{3 * sizeof(double), 1 << logger_x, "positions"}, /* Particle's position */
/* Particle's velocity */ {3 * sizeof(double), 1 << logger_x, "positions"},
{3 * sizeof(float), 1 << logger_v, "velocities"}, /* Particle's velocity */
/* Particle's acceleration */ {3 * sizeof(float), 1 << logger_v, "velocities"},
{3 * sizeof(float), 1 << logger_a, "accelerations"}, /* Particle's acceleration */
/* Particle's entropy */ {3 * sizeof(float), 1 << logger_a, "accelerations"},
{sizeof(float), 1 << logger_u, "entropy"}, /* Particle's entropy */
/* Particle's smoothing length */ {sizeof(float), 1 << logger_u, "entropy"},
{sizeof(float), 1 << logger_h, "smoothing length"}, /* Particle's smoothing length */
/* Particle's density */ {sizeof(float), 1 << logger_h, "smoothing length"},
{sizeof(float), 1 << logger_rho, "density"}, /* Particle's density */
/* Particle's constants: mass (float) and ID (long long) */ {sizeof(float), 1 << logger_rho, "density"},
{sizeof(float) + sizeof(long long), 1 << logger_consts, "consts"}, /* Particle's constants: mass (float) and ID (long long) */
/* Simulation time stamp: integertime and double time (e.g. scale factor or time) */ {sizeof(float) + sizeof(long long), 1 << logger_consts, "consts"},
{sizeof(integertime_t) + sizeof(double), 1 << logger_timestamp, "timestamp"} /* Simulation time stamp: integertime and double time (e.g. scale
}; factor or time) */
{sizeof(integertime_t) + sizeof(double), 1 << logger_timestamp,
"timestamp"}};
/** /**
* @brief Write the header of a chunk (offset + mask). * @brief Write the header of a chunk (offset + mask).
...@@ -151,45 +153,43 @@ int logger_compute_chunk_size(unsigned int mask) { ...@@ -151,45 +153,43 @@ int logger_compute_chunk_size(unsigned int mask) {
error("Timestamps should not include any other data."); error("Timestamps should not include any other data.");
/* A timestamp consists of an unsigned long long int. */ /* A timestamp consists of an unsigned long long int. */
size += sizeof(unsigned long long int); size += logger_mask_data[logger_timestamp].size;
size += sizeof(double);
} else { } else {
/* Particle position as three doubles. */ /* Particle position as three doubles. */
if (mask & logger_mask_data[logger_x].mask) { if (mask & logger_mask_data[logger_x].mask) {
size += 3 * sizeof(double); size += logger_mask_data[logger_x].size;
} }
/* Particle velocity as three floats. */ /* Particle velocity as three floats. */
if (mask & logger_mask_data[logger_v].mask) { if (mask & logger_mask_data[logger_v].mask) {
size += 3 * sizeof(float); size += logger_mask_data[logger_v].size;
} }
/* Particle accelleration as three floats. */ /* Particle accelleration as three floats. */
if (mask & logger_mask_data[logger_a].mask) { if (mask & logger_mask_data[logger_a].mask) {
size += 3 * sizeof(float); size += logger_mask_data[logger_a].size;
} }
/* Particle internal energy as a single float. */ /* Particle internal energy as a single float. */
if (mask & logger_mask_data[logger_u].mask) { if (mask & logger_mask_data[logger_u].mask) {
size += sizeof(float); size += logger_mask_data[logger_u].size;
} }
/* Particle smoothing length as a single float. */ /* Particle smoothing length as a single float. */
if (mask & logger_mask_data[logger_h].mask) { if (mask & logger_mask_data[logger_h].mask) {
size += sizeof(float); size += logger_mask_data[logger_h].size;
} }
/* Particle density as a single float. */ /* Particle density as a single float. */
if (mask & logger_mask_data[logger_rho].mask) { if (mask & logger_mask_data[logger_rho].mask) {
size += sizeof(float); size += logger_mask_data[logger_rho].size;
} }
/* Particle constants, which is a bit more complicated. */ /* Particle constants, which is a bit more complicated. */
if (mask & logger_mask_data[logger_rho].mask) { if (mask & logger_mask_data[logger_consts].mask) {
size += sizeof(float) + // mass size += logger_mask_data[logger_consts].size;
sizeof(long long); // id
} }
} }
...@@ -212,13 +212,11 @@ void logger_log_all(struct logger *log, const struct engine *e) { ...@@ -212,13 +212,11 @@ void logger_log_all(struct logger *log, const struct engine *e) {
/* some constants */ /* some constants */
const struct space *s = e->s; const struct space *s = e->s;
const unsigned int mask = logger_mask_data[logger_x].mask | const unsigned int mask =
logger_mask_data[logger_v].mask | logger_mask_data[logger_x].mask | logger_mask_data[logger_v].mask |
logger_mask_data[logger_a].mask | logger_mask_data[logger_a].mask | logger_mask_data[logger_u].mask |
logger_mask_data[logger_u].mask | logger_mask_data[logger_h].mask | logger_mask_data[logger_rho].mask |
logger_mask_data[logger_h].mask | logger_mask_data[logger_consts].mask;
logger_mask_data[logger_rho].mask |
logger_mask_data[logger_consts].mask;
/* loop over all parts */ /* loop over all parts */
for (long long i = 0; i < e->total_nr_parts; i++) { for (long long i = 0; i < e->total_nr_parts; i++) {
...@@ -262,44 +260,45 @@ void logger_log_part(struct logger *log, const struct part *p, ...@@ -262,44 +260,45 @@ void logger_log_part(struct logger *log, const struct part *p,
/* Particle position as three doubles. */ /* Particle position as three doubles. */
if (mask & logger_mask_data[logger_x].mask) { if (mask & logger_mask_data[logger_x].mask) {
memcpy(buff, p->x, 3 * sizeof(double)); memcpy(buff, p->x, logger_mask_data[logger_x].size);
buff += 3 * sizeof(double); buff += logger_mask_data[logger_x].size;
} }
/* Particle velocity as three floats. */ /* Particle velocity as three floats. */
if (mask & logger_mask_data[logger_v].mask) { if (mask & logger_mask_data[logger_v].mask) {
memcpy(buff, p->v, 3 * sizeof(float)); memcpy(buff, p->v, logger_mask_data[logger_v].size);
buff += 3 * sizeof(float); buff += logger_mask_data[logger_v].size;
} }
/* Particle accelleration as three floats. */ /* Particle accelleration as three floats. */
if (mask & logger_mask_data[logger_a].mask) { if (mask & logger_mask_data[logger_a].mask) {
memcpy(buff, p->a_hydro, 3 * sizeof(float)); memcpy(buff, p->a_hydro, logger_mask_data[logger_a].size);
buff += 3 * sizeof(float); buff += logger_mask_data[logger_a].size;
} }
#if defined(GADGET2_SPH) #if defined(GADGET2_SPH)
/* Particle internal energy as a single float. */ /* Particle internal energy as a single float. */
if (mask & logger_mask_data[logger_u].mask) { if (mask & logger_mask_data[logger_u].mask) {
memcpy(buff, &p->entropy, sizeof(float)); memcpy(buff, &p->entropy, logger_mask_data[logger_u].size);
buff += sizeof(float); buff += logger_mask_data[logger_u].size;
} }
/* Particle smoothing length as a single float. */ /* Particle smoothing length as a single float. */
if (mask & logger_mask_data[logger_h].mask) { if (mask & logger_mask_data[logger_h].mask) {
memcpy(buff, &p->h, sizeof(float)); memcpy(buff, &p->h, logger_mask_data[logger_h].size);
buff += sizeof(float); buff += logger_mask_data[logger_h].size;
} }
/* Particle density as a single float. */ /* Particle density as a single float. */
if (mask & logger_mask_data[logger_rho].mask) { if (mask & logger_mask_data[logger_rho].mask) {
memcpy(buff, &p->rho, sizeof(float)); memcpy(buff, &p->rho, logger_mask_data[logger_rho].size);
buff += sizeof(float); buff += logger_mask_data[logger_rho].size;
} }
/* Particle constants, which is a bit more complicated. */ /* Particle constants, which is a bit more complicated. */
if (mask & logger_mask_data[logger_consts].mask) { if (mask & logger_mask_data[logger_consts].mask) {
// TODO make it dependent of logger_mask_data
memcpy(buff, &p->mass, sizeof(float)); memcpy(buff, &p->mass, sizeof(float));
buff += sizeof(float); buff += sizeof(float);
memcpy(buff, &p->id, sizeof(long long)); memcpy(buff, &p->id, sizeof(long long));
...@@ -329,8 +328,8 @@ void logger_log_gpart(struct logger *log, const struct gpart *p, ...@@ -329,8 +328,8 @@ void logger_log_gpart(struct logger *log, const struct gpart *p,
error("You should not log particles as timestamps."); error("You should not log particles as timestamps.");
/* Make sure we're not looging fields not supported by gparts. */ /* Make sure we're not looging fields not supported by gparts. */
if (mask & (logger_mask_data[logger_u].mask | if (mask &
logger_mask_data[logger_rho].mask)) (logger_mask_data[logger_u].mask | logger_mask_data[logger_rho].mask))
error("Can't log SPH quantities for gparts."); error("Can't log SPH quantities for gparts.");
/* Start by computing the size of the message. */ /* Start by computing the size of the message. */
...@@ -345,24 +344,25 @@ void logger_log_gpart(struct logger *log, const struct gpart *p, ...@@ -345,24 +344,25 @@ void logger_log_gpart(struct logger *log, const struct gpart *p,
/* Particle position as three doubles. */ /* Particle position as three doubles. */
if (mask & logger_mask_data[logger_x].mask) { if (mask & logger_mask_data[logger_x].mask) {
memcpy(buff, p->x, 3 * sizeof(double)); memcpy(buff, p->x, logger_mask_data[logger_x].size);
buff += 3 * sizeof(double); buff += logger_mask_data[logger_x].size;
} }
/* Particle velocity as three floats. */ /* Particle velocity as three floats. */
if (mask & logger_mask_data[logger_v].mask) { if (mask & logger_mask_data[logger_v].mask) {
memcpy(buff, p->v_full, 3 * sizeof(float)); memcpy(buff, p->v_full, logger_mask_data[logger_v].size);
buff += 3 * sizeof(float); buff += logger_mask_data[logger_v].size;
} }
/* Particle accelleration as three floats. */ /* Particle accelleration as three floats. */
if (mask & logger_mask_data[logger_a].mask) { if (mask & logger_mask_data[logger_a].mask) {
memcpy(buff, p->a_grav, 3 * sizeof(float)); memcpy(buff, p->a_grav, logger_mask_data[logger_a].size);
buff += 3 * sizeof(float); buff += logger_mask_data[logger_a].size;
} }
/* Particle constants, which is a bit more complicated. */ /* Particle constants, which is a bit more complicated. */
if (mask & logger_mask_data[logger_consts].mask) { if (mask & logger_mask_data[logger_consts].mask) {
// TODO make it dependent of logger_mask_data
memcpy(buff, &p->mass, sizeof(float)); memcpy(buff, &p->mass, sizeof(float));
buff += sizeof(float); buff += sizeof(float);
memcpy(buff, &p->id_or_neg_offset, sizeof(long long)); memcpy(buff, &p->id_or_neg_offset, sizeof(long long));
...@@ -387,7 +387,8 @@ void logger_log_timestamp(struct logger *log, integertime_t timestamp, ...@@ -387,7 +387,8 @@ void logger_log_timestamp(struct logger *log, integertime_t timestamp,
struct dump *dump = &log->dump; struct dump *dump = &log->dump;
/* Start by computing the size of the message. */ /* Start by computing the size of the message. */
const int size = logger_compute_chunk_size(logger_mask_data[logger_timestamp].mask); const int size =
logger_compute_chunk_size(logger_mask_data[logger_timestamp].mask);
/* Allocate a chunk of memory in the dump of the right size. */ /* Allocate a chunk of memory in the dump of the right size. */
size_t offset_new; size_t offset_new;
...@@ -398,6 +399,7 @@ void logger_log_timestamp(struct logger *log, integertime_t timestamp, ...@@ -398,6 +399,7 @@ void logger_log_timestamp(struct logger *log, integertime_t timestamp,
buff = logger_write_chunk_header(buff, &mask, offset, offset_new); buff = logger_write_chunk_header(buff, &mask, offset, offset_new);
/* Store the timestamp. */ /* Store the timestamp. */
// TODO make it dependent of logger_mask_data
memcpy(buff, &timestamp, sizeof(integertime_t)); memcpy(buff, &timestamp, sizeof(integertime_t));
buff += sizeof(integertime_t); buff += sizeof(integertime_t);
...@@ -445,8 +447,7 @@ void logger_ensure_size(struct logger *log, size_t total_nr_parts, ...@@ -445,8 +447,7 @@ void logger_ensure_size(struct logger *log, size_t total_nr_parts,
int logger_compute_max_chunk_size(const struct logger *log) { int logger_compute_max_chunk_size(const struct logger *log) {
int *output = malloc(sizeof(int) * logger_count_mask); int *output = malloc(sizeof(int) * logger_count_mask);
if (output == NULL) if (output == NULL) error("Unable to allocate memory");
error("Unable to allocate memory");
int max_size = logger_offset_size + logger_mask_size; int max_size = logger_offset_size + logger_mask_size;
/* Loop over all fields except timestamp */ /* Loop over all fields except timestamp */
...@@ -484,7 +485,7 @@ void logger_init(struct logger *log, struct swift_params *params) { ...@@ -484,7 +485,7 @@ void logger_init(struct logger *log, struct swift_params *params) {
/* Define some constants */ /* Define some constants */
log->max_chunk_size = logger_compute_max_chunk_size(log); log->max_chunk_size = logger_compute_max_chunk_size(log);
/* init dump */ /* init dump */
dump_init(&log->dump, logger_name_file, buffer_size); dump_init(&log->dump, logger_name_file, buffer_size);
} }
...@@ -494,9 +495,7 @@ void logger_init(struct logger *log, struct swift_params *params) { ...@@ -494,9 +495,7 @@ void logger_init(struct logger *log, struct swift_params *params) {
* *
* @param log The #logger * @param log The #logger
*/ */
void logger_clean(struct logger *log) { void logger_clean(struct logger *log) { dump_close(&log->dump); }
dump_close(&log->dump);
}
/** /**
* @brief Write a file header to a logger file * @brief Write a file header to a logger file
...@@ -522,21 +521,18 @@ void logger_write_file_header(struct logger *log, const struct engine *e) { ...@@ -522,21 +521,18 @@ void logger_write_file_header(struct logger *log, const struct engine *e) {
/* write offset direction */ /* write offset direction */
const int reversed = 0; const int reversed = 0;
logger_write_data(dump, &file_offset, logger_number_size, logger_write_data(dump, &file_offset, logger_number_size, &reversed);
&reversed);
/* placeholder to write the offset of the first log here */ /* placeholder to write the offset of the first log here */
char *skip_header = dump_get(dump, logger_offset_size, &file_offset); char *skip_header = dump_get(dump, logger_offset_size, &file_offset);
/* write number of bytes used for names */ /* write number of bytes used for names */
const int label_size = logger_label_size; const int label_size = logger_label_size;
logger_write_data(dump, &file_offset, logger_number_size, logger_write_data(dump, &file_offset, logger_number_size, &label_size);
&label_size);
/* write number of masks */ /* write number of masks */
int count_mask = logger_count_mask; int count_mask = logger_count_mask;
logger_write_data(dump, &file_offset, logger_number_size, logger_write_data(dump, &file_offset, logger_number_size, &count_mask);
&count_mask);
/* write masks */ /* write masks */
// loop over all mask type // loop over all mask type
...@@ -549,7 +545,7 @@ void logger_write_file_header(struct logger *log, const struct engine *e) { ...@@ -549,7 +545,7 @@ void logger_write_file_header(struct logger *log, const struct engine *e) {
logger_write_data(dump, &file_offset, logger_number_size, logger_write_data(dump, &file_offset, logger_number_size,
&logger_mask_data[i].size); &logger_mask_data[i].size);
} }
/* last step: write first offset */ /* last step: write first offset */
memcpy(skip_header, &file_offset, logger_offset_size); memcpy(skip_header, &file_offset, logger_offset_size);
} }
...@@ -602,44 +598,45 @@ int logger_read_part(struct part *p, size_t *offset, const char *buff) { ...@@ -602,44 +598,45 @@ int logger_read_part(struct part *p, size_t *offset, const char *buff) {
/* Particle position as three doubles. */ /* Particle position as three doubles. */
if (mask & logger_mask_data[logger_x].mask) { if (mask & logger_mask_data[logger_x].mask) {
memcpy(p->x, buff, 3 * sizeof(double)); memcpy(p->x, buff, logger_mask_data[logger_x].size);
buff += 3 * sizeof(double); buff += logger_mask_data[logger_x].size;
} }
/* Particle velocity as three floats. */ /* Particle velocity as three floats. */
if (mask & logger_mask_data[logger_v].mask) { if (mask & logger_mask_data[logger_v].mask) {
memcpy(p->v, buff, 3 * sizeof(float)); memcpy(p->v, buff, logger_mask_data[logger_v].size);
buff += 3 * sizeof(float); buff += logger_mask_data[logger_v].size;
} }
/* Particle accelleration as three floats. */ /* Particle accelleration as three floats. */
if (mask & logger_mask_data[logger_a].mask) { if (mask & logger_mask_data[logger_a].mask) {
memcpy(p->a_hydro, buff, 3 * sizeof(float)); memcpy(p->a_hydro, buff, logger_mask_data[logger_a].size);
buff += 3 * sizeof(float); buff += logger_mask_data[logger_a].size;
} }
#if defined(GADGET2_SPH) #if defined(GADGET2_SPH)
/* Particle internal energy as a single float. */ /* Particle internal energy as a single float. */
if (mask & logger_mask_data[logger_u].mask) { if (mask & logger_mask_data[logger_u].mask) {
memcpy(&p->entropy, buff, sizeof(float)); memcpy(&p->entropy, buff, logger_mask_data[logger_u].size);
buff += sizeof(float); buff += logger_mask_data[logger_u].size;
} }
/* Particle smoothing length as a single float. */ /* Particle smoothing length as a single float. */
if (mask & logger_mask_data[logger_h].mask) { if (mask & logger_mask_data[logger_h].mask) {
memcpy(&p->h, buff, sizeof(float)); memcpy(&p->h, buff, logger_mask_data[logger_h].size);
buff += sizeof(float); buff += logger_mask_data[logger_h].size;
} }
/* Particle density as a single float. */ /* Particle density as a single float. */
if (mask & logger_mask_data[logger_rho].mask) { if (mask & logger_mask_data[logger_rho].mask) {
memcpy(&p->rho, buff, sizeof(float)); memcpy(&p->rho, buff, logger_mask_data[logger_rho].size);
buff += sizeof(float); buff += logger_mask_data[logger_rho].size;
} }
/* Particle constants, which is a bit more complicated. */ /* Particle constants, which is a bit more complicated. */
if (mask & logger_mask_data[logger_rho].mask) { if (mask & logger_mask_data[logger_rho].mask) {
// TODO make it dependent of logger_mask_data
memcpy(&p->mass, buff, sizeof(float)); memcpy(&p->mass, buff, sizeof(float));
buff += sizeof(float); buff += sizeof(float);
memcpy(&p->id, buff, sizeof(long long)); memcpy(&p->id, buff, sizeof(long long));
...@@ -677,30 +674,31 @@ int logger_read_gpart(struct gpart *p, size_t *offset, const char *buff) { ...@@ -677,30 +674,31 @@ int logger_read_gpart(struct gpart *p, size_t *offset, const char *buff) {
error("Trying to read timestamp as particle."); error("Trying to read timestamp as particle.");
/* We can't store all part fields in a gpart. */ /* We can't store all part fields in a gpart. */
if (mask & (logger_mask_data[logger_u].mask | if (mask &
logger_mask_data[logger_rho].mask)) (logger_mask_data[logger_u].mask | logger_mask_data[logger_rho].mask))
error("Trying to read SPH quantities into a gpart."); error("Trying to read SPH quantities into a gpart.");
/* Particle position as three doubles. */ /* Particle position as three doubles. */
if (mask & logger_mask_data[logger_x].mask) { if (mask & logger_mask_data[logger_x].mask) {
memcpy(p->x, buff, 3 * sizeof(double)); memcpy(p->x, buff, logger_mask_data[logger_x].size);
buff += 3 * sizeof(double); buff += logger_mask_data[logger_x].size;
} }
/* Particle velocity as three floats. */ /* Particle velocity as three floats. */
if (mask & logger_mask_data[logger_v].mask) { if (mask & logger_mask_data[logger_v].mask) {
memcpy(p->v_full, buff, 3 * sizeof(float)); memcpy(p->v_full, buff, logger_mask_data[logger_v].size);
buff += 3 * sizeof(float); buff += logger_mask_data[logger_v].size;
} }
/* Particle accelleration as three floats. */ /* Particle accelleration as three floats. */
if (mask & logger_mask_data[logger_a].mask) { if (mask & logger_mask_data[logger_a].mask) {
memcpy(p->a_grav, buff, 3 * sizeof(float)); memcpy(p->a_grav, buff, logger_mask_data[logger_a].size);
buff += 3 * sizeof(float); buff += logger_mask_data[logger_a].size;
} }
/* Particle constants, which is a bit more complicated. */ /* Particle constants, which is a bit more complicated. */
if (mask & logger_mask_data[logger_rho].mask) { if (mask & logger_mask_data[logger_rho].mask) {
// TODO make it dependent of logger_mask_data
memcpy(&p->mass, buff, sizeof(float)); memcpy(&p->mass, buff, sizeof(float));
buff += sizeof(float); buff += sizeof(float);
memcpy(&p->id_or_neg_offset, buff, sizeof(long long)); memcpy(&p->id_or_neg_offset, buff, sizeof(long long));
...@@ -741,6 +739,7 @@ int logger_read_timestamp(unsigned long long int *t, double *time, ...@@ -741,6 +739,7 @@ int logger_read_timestamp(unsigned long long int *t, double *time,
error("Timestamp message contains extra fields."); error("Timestamp message contains extra fields.");
/* Copy the timestamp value from the buffer. */ /* Copy the timestamp value from the buffer. */
// TODO make it dependent of logger_mask_data
memcpy(t, buff, sizeof(unsigned long long int)); memcpy(t, buff, sizeof(unsigned long long int));
buff += sizeof(unsigned long long int); buff += sizeof(unsigned long long int);
......
...@@ -82,7 +82,7 @@ enum logger_masks_number { ...@@ -82,7 +82,7 @@ enum logger_masks_number {
logger_h = 4, logger_h = 4,
logger_rho = 5, logger_rho = 5,
logger_consts = 6, logger_consts = 6,
logger_timestamp = 7, /* expect it to be before count */ logger_timestamp = 7, /* expect it to be before count */
logger_count_mask = 8, /* Need to be the last */ logger_count_mask = 8, /* Need to be the last */
} __attribute__((packed)); } __attribute__((packed));
...@@ -158,7 +158,7 @@ int logger_read_timestamp(unsigned long long int *t, double *time, ...@@ -158,7 +158,7 @@ int logger_read_timestamp(unsigned long long int *t, double *time,
*/ */
INLINE static void logger_part_data_init(struct logger_part_data *logger) { INLINE static void logger_part_data_init(struct logger_part_data *logger) {
logger->last_offset = 0; logger->last_offset = 0;
logger->steps_since_last_output = SHRT_MAX; logger->steps_since_last_output = INT_MAX;
} }
/** /**
......
...@@ -2736,12 +2736,12 @@ void runner_do_logger(struct runner *r, struct cell *c, int timer) { ...@@ -2736,12 +2736,12 @@ void runner_do_logger(struct runner *r, struct cell *c, int timer) {
/* Currently writing everything, should adapt it through time */ /* Currently writing everything, should adapt it through time */
logger_log_part(e->logger, p, logger_log_part(e->logger, p,
logger_mask_data[logger_x].mask | logger_mask_data[logger_x].mask |
logger_mask_data[logger_v].mask | logger_mask_data[logger_v].mask |
logger_mask_data[logger_a].mask | logger_mask_data[logger_a].mask |
logger_mask_data[logger_u].mask | logger_mask_data[logger_u].mask |
logger_mask_data[logger_h].mask | logger_mask_data[logger_h].mask |
logger_mask_data[logger_rho].mask | logger_mask_data[logger_rho].mask |
logger_mask_data[logger_consts].mask, logger_mask_data[logger_consts].mask,
&xp->logger_data.last_offset); &xp->logger_data.last_offset);
/* Set counter back to zero */ /* Set counter back to zero */
......