/*
 * Copyright (c) 2019, 2025, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */

#ifndef SVM_G1_GC_STRUCTS_H
#define SVM_G1_GC_STRUCTS_H

#include <sys/types.h>

#ifdef __cplusplus
namespace svm_gc {
#endif

struct G1HeapOptions {
  size_t max_heap_size;
  size_t heap_address_space_size;
  size_t physical_memory_size;
};

struct G1InitState {
  void* card_table_address;
  void* gc_total_collections_address;
  int tlab_top_offset;
  int tlab_end_offset;
  int satb_queue_marking_offset;
  int satb_queue_buffer_offset;
  int satb_queue_index_offset;
  int card_queue_buffer_offset;
  int card_queue_index_offset;
  int card_table_shift;
  int log_of_heap_region_grain_bytes;
  int java_thread_size;
  int vm_operation_data_size;
  int vm_operation_wrapper_data_size;
  char dirty_card_value;
  char young_card_value;
};

struct G1RegionBoundaries {
  u_char *bottom;
  u_char *top;
};

struct G1RegionInfo {
  u_char *bottom;
  u_char *top;
  u_char *end;
  u_char *top_at_mark_start;
  u_char *parsable_bottom;
  size_t pinned_object_count;
  char in_collection_set;
  char remembered_set_state;
  char region_type;
};

struct G1InternalState {
  unsigned int total_collections;
  unsigned int full_collections;

  void* card_table_start;
  size_t card_table_size;

  void* block_offset_table_start;
  size_t block_offset_table_size;
};

#ifdef __cplusplus
} // namespace svm_gc
#endif

#endif // SVM_G1_GC_STRUCTS_H
