src/Structures.h
author David Anderson <dvander@alliedmods.net>
Sat Jul 28 16:42:38 2012 -0700 (2012-07-28)
changeset 108 9dcf58a17d32
parent 86 32ad0523b309
child 146 dc7d3b7a918c
permissions -rw-r--r--
Stop using ccache on OS X.
dvander@85
     1
/* vim: set ts=4 sw=4 tw=99 et
dvander@85
     2
 *
dvander@85
     3
 * Copyright (C) 2012 David Anderson
dvander@85
     4
 *
dvander@85
     5
 * This file is part of JITCraft.
dvander@85
     6
 *
dvander@85
     7
 * JITCraft is free software: you can redistribute it and/or modify it under
dvander@85
     8
 * the terms of the GNU General Public License as published by the Free
dvander@85
     9
 * Software Foundation, either version 3 of the License, or (at your option)
dvander@85
    10
 * any later version.
dvander@85
    11
 * 
dvander@85
    12
 * Foobar is distributed in the hope that it will be useful, but WITHOUT ANY
dvander@85
    13
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
dvander@85
    14
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
dvander@85
    15
 *
dvander@85
    16
 * You should have received a copy of the GNU General Public License along with
dvander@85
    17
 * JITCraft. If not, see http://www.gnu.org/licenses/.
dvander@85
    18
 */
dvander@85
    19
#ifndef _include_jc_structure_h_
dvander@85
    20
#define _include_jc_structure_h_
dvander@85
    21
dvander@85
    22
#include "Objects.h"
dvander@85
    23
#include "Handles.h"
dvander@85
    24
#include "Vector.h"
dvander@85
    25
dvander@85
    26
namespace ke {
dvander@85
    27
dvander@85
    28
class Type;
dvander@85
    29
class String;
dvander@85
    30
class FixedArray;
dvander@85
    31
dvander@85
    32
// When describing composite structures, the GC must be able to trace interior
dvander@85
    33
// references to Objects. To make this possible, maps that describe composite
dvander@85
    34
// structures must provide a list of offsets into their objects that are
dvander@85
    35
// traceable. StructureBufferBuilder assists with this.
dvander@85
    36
class StructureBufferBuilder
dvander@85
    37
{
dvander@85
    38
  public:
dvander@85
    39
    StructureBufferBuilder();
dvander@85
    40
dvander@85
    41
    bool add(Handle<Type> type, unsigned *offset);
dvander@85
    42
dvander@85
    43
    unsigned structureSize() const {
dvander@85
    44
        return size_;
dvander@85
    45
    }
dvander@85
    46
    unsigned traceableOffsetCount() const {
dvander@85
    47
        return offsets_.length();
dvander@85
    48
    }
dvander@85
    49
    const unsigned *offsets() {
dvander@85
    50
        return offsets_.buffer();
dvander@85
    51
    }
dvander@85
    52
dvander@85
    53
  private:
dvander@85
    54
    Vector<unsigned> offsets_;
dvander@85
    55
    unsigned size_;
dvander@85
    56
};
dvander@85
    57
dvander@85
    58
}
dvander@85
    59
dvander@85
    60
#endif // _include_jc_structure_h_