tdbUtil.h 1.7 KB
Newer Older
H
Hongze Cheng 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
/*
 * Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
 *
 * This program is free software: you can use, redistribute, and/or modify
 * it under the terms of the GNU Affero General Public License, version 3
 * or later ("AGPL"), as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef _TDB_UTIL_H_
#define _TDB_UTIL_H_

#ifdef __cplusplus
extern "C" {
#endif

H
Hongze Cheng 已提交
23
#if __STDC_VERSION__ >= 201112L
H
Hongze Cheng 已提交
24
#define TDB_STATIC_ASSERT(op, info) static_assert(op, info)
H
Hongze Cheng 已提交
25
#else
H
Hongze Cheng 已提交
26
#define TDB_STATIC_ASSERT(op, info)
H
Hongze Cheng 已提交
27 28
#endif

H
more  
Hongze Cheng 已提交
29 30
#define TDB_ROUND8(x) (((x) + 7) & ~7)

H
Hongze Cheng 已提交
31 32 33 34 35 36
int tdbGnrtFileID(const char *fname, uint8_t *fileid, bool unique);

#define TDB_F_OK 0x1
#define TDB_R_OK 0x2
#define TDB_W_OK 0x4
int tdbCheckFileAccess(const char *pathname, int mode);
H
Hongze Cheng 已提交
37

H
more  
Hongze Cheng 已提交
38
int tdbGetFileSize(const char *fname, int pgSize, SPgno *pSize);
H
Hongze Cheng 已提交
39

H
Hongze Cheng 已提交
40 41
int tdbPRead(int fd, void *pData, int count, i64 offset);

H
Hongze Cheng 已提交
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
static inline int tdbPutVarInt(u8 *p, int v) {
  int n = 0;

  for (;;) {
    if (v < 0xff) {
      p[n++] = v;
      break;
    }

    p[n++] = (v & 0x7f) | 0x80;
    v >>= 7;
  }

  ASSERT(n < 6);

  return n;
}

static inline int tdbGetVarInt(const u8 *p, int *v) {
  int n = 0;
  int tv = 0;

  for (;;) {
    if (p[n] & 0x80 == 0) {
      tv = (tv << 7) & p[n];
      n++;
      break;
    }

    tv = (tv << 7) & (p[n] & 0x7f);
    n++;
  }

  ASSERT(n < 6);

  return 0;
}

H
Hongze Cheng 已提交
80 81 82 83 84
#ifdef __cplusplus
}
#endif

#endif /*_TDB_UTIL_H_*/