summaryrefslogtreecommitdiffstats
path: root/include/util/types.h
blob: de5e379373e4738462dbf07c8814e896b534c9ee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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
/*
 * include/util/types.h
 *
 * Copyright (C) 2023 Douglas Rumbaugh <drumbaugh@psu.edu>
 *
 * All rights reserved. Published under the Modified BSD License.
 *
 * A centralized header file for various datatypes used throughout the
 * code base. There are a few very specific types, such as header formats,
 * that are defined within the header files that make direct use of them,
 * but all generally usable, simple types are defined here.
 *
 */
#pragma once

#include <cstdlib>
#include <cstdint>
#include <cstddef>
#include <string>

#include "util/base.h"

namespace de {

using std::byte;

// Represents a page offset within a specific file (physical or virtual)
typedef uint32_t PageNum;

// Byte offset within a page. Also used for lengths of records, etc.,
// within the codebase. size_t isn't necessary, as the maximum offset
// is only parm::PAGE_SIZE 
typedef uint16_t PageOffset;

// A unique identifier for a frame within a buffer or cache.
typedef int32_t FrameId;

// A unique timestamp for use in MVCC concurrency control. Currently stored in
// record headers, but not used by anything.
typedef uint32_t Timestamp;
const Timestamp TIMESTAMP_MIN = 0;
const Timestamp TIMESTAMP_MAX = UINT32_MAX;

// Invalid values for various IDs. Used throughout the code base to indicate
// uninitialized values and error conditions.
const PageNum INVALID_PNUM = 0;
const FrameId INVALID_FRID = -1;

// An ID for a given shard within the index. The level_idx is the index
// in the memory_levels and disk_levels vectors corresponding to the
// shard, and the shard_idx is the index with the level (always 0 in the
// case of leveling). Note that the two vectors of levels are treated
// as a contiguous index space.
struct ShardID {
    ssize_t level_idx;
    ssize_t shard_idx;

    friend bool operator==(const ShardID &shid1, const ShardID &shid2) {
        return shid1.level_idx == shid2.level_idx && shid1.shard_idx == shid2.shard_idx;
    }
};

const ShardID INVALID_SHID = {-1, -1};

struct SampleRange {
    ShardID shid;
    size_t low;
    size_t high;
};

}