コード例 #1
0
ファイル: topocache.c プロジェクト: HunterChen/GRAPES
int cache_header_dump(uint8_t *b, const struct peer_cache *c, int include_me)
{
  int_cpy(b, c->cache_size + (include_me ? 1 : 0));
  int_cpy(b + 4, c->metadata_size);

  return 8;
}
コード例 #2
0
ファイル: topocache.c プロジェクト: HunterChen/GRAPES
int entry_dump(uint8_t *b, const struct peer_cache *c, int i, size_t max_write_size)
{
  int res;
  int size = 0;
 
  if (i && (i >= c->cache_size - 1)) {
    return 0;
  }
  int_cpy(b, c->entries[i].timestamp);
  size = +4;
  res = nodeid_dump(b + size, c->entries[i].id, max_write_size - size);
  if (res < 0 ) {
    return -1;
  }
  size += res;
  if (c->metadata_size) {
    if (c->metadata_size > max_write_size - size) {
      return -1;
    }
    memcpy(b + size, c->metadata + c->metadata_size * i, c->metadata_size);
    size += c->metadata_size;
  }

  return size;
}
コード例 #3
0
ファイル: matrix.cpp プロジェクト: rforge/lme4
void CHM_rs::copy_contents(CHM_r *SRC) {
    CHM_SP src = (dynamic_cast<CHM_rs*>(SRC))->A;
    int m = (int)A->nrow, n = (int)A->ncol;
    if (!(m == (int)src->nrow && n == (int)src->ncol))
	error(_("%s mismatch: src is %d by %d, dest is %d by %d"),
	      "CHM_rs::copy_contents",
	      (int)src->nrow, (int)src->ncol, m, n);
    size_t nnz = ((int*)src->p)[n];
    if (A->nzmax < nnz)
	error(_("%s mismatch: src has %d non-zeros, dest->nzmax = %d"),
	      "CHM_rs::copy_contents", nnz, ((int*)A->p)[n]);
    if (A->itype != src->itype || A->xtype != src->xtype ||
	A->dtype != src->dtype)
	error(_("%s mismatch: on itype, xtype or dtype"),
	      "CHM_rs::copy_contents");
    int_cpy((int*)A->p, (int*)src->p, n + 1);
    int_cpy((int*)A->i, (int*)src->i, nnz);
    dble_cpy((double*)A->x, (double*)src->x, nnz);
    A->stype = src->stype; A->sorted = src->sorted;
    if (!src->packed) error(_("%s: only packed src can be copied"),
			    "CHM_rs::copy_contents");
    A->packed = 1;
}
コード例 #4
0
ファイル: chunk_encoding.c プロジェクト: HunterChen/GRAPES
int encodeChunk(const struct chunk *c, uint8_t *buff, int buff_len)
{
  uint32_t half_ts;

  if (buff_len < 20 + c->size + c->attributes_size) {
    /* Not enough space... */
    return -1;
  }

  int_cpy(buff, c->id);
  half_ts = c->timestamp >> 32;
  int_cpy(buff + 4, half_ts);
  half_ts = c->timestamp;
  int_cpy(buff + 8, half_ts);
  int_cpy(buff + 12, c->size);
  int_cpy(buff + 16, c->attributes_size);
  memcpy(buff + 20, c->data, c->size);
  if (c->attributes_size) {
    memcpy(buff + 20 + c->size, c->attributes, c->attributes_size);
  }

  return 20 + c->size + c->attributes_size;
}
コード例 #5
0
ファイル: chunkids_encoding.c プロジェクト: HunterChen/GRAPES
int encodeChunkSignaling(const struct chunkID_set *h, const void *meta, int meta_len, uint8_t *buff, int buff_len)
{
  int i;
  uint8_t *meta_p;
  uint32_t type = h ? h->type : -1;
  
  int_cpy(buff + 4, type);
  int_cpy(buff + 8, meta_len);

  switch (type) {
    case CIST_BITMAP:
    {
      int elements;
      uint32_t c_min, c_max;

      c_min = c_max = h->n_elements ? h->elements[0] : 0;
      for (i = 1; i < h->n_elements; i++) {
        if (h->elements[i] < c_min)
          c_min = h->elements[i];
        else if (h->elements[i] > c_max)
          c_max = h->elements[i];
      }
      elements = h->n_elements ? c_max - c_min + 1 : 0;
      int_cpy(buff, elements);
      elements = elements / 8 + (elements % 8 ? 1 : 0);
      if (buff_len < elements + 16 + meta_len) {
        return -1;
      }
      int_cpy(buff + 12, c_min); //first value in the bitmap, i.e., base value
      memset(buff + 16, 0, elements);
      for (i = 0; i < h->n_elements; i++) {
        buff[16 + (h->elements[i] - c_min) / 8] |= 1 << ((h->elements[i] - c_min) % 8);
      }
      meta_p = buff + 16 + elements;
      break;
    }
    case CIST_PRIORITY:
      int_cpy(buff, h->n_elements);
      if (buff_len < h->n_elements * 4 + 12 + meta_len) {
        return -1;
      }
      for (i = 0; i < h->n_elements; i++) {
        int_cpy(buff + 12 + i * 4, h->elements[i]);
      }
      meta_p = buff + 12 + h->n_elements * 4;

      break;
    case -1:
      int_cpy(buff, 0);
      meta_p = buff + 12;
      break;
    default:
      fprintf(stderr, "Invalid ChunkID encoding type %d\n", type);

      return -1;
  }

  if (meta_len) {
    memcpy(meta_p, meta, meta_len);
  }

  return meta_p + meta_len - buff;
}