// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

#ifndef RUNTIME_VM_GC_SWEEPER_H_
#define RUNTIME_VM_GC_SWEEPER_H_

#include "vm/globals.h"

namespace dart {

// Forward declarations.
class FreeList;
class Heap;
class HeapPage;
class Isolate;
class PageSpace;

// The class GCSweeper is used to visit the heap after marking to reclaim unused
// memory.
class GCSweeper {
 public:
  GCSweeper() {}
  ~GCSweeper() {}

  // Sweep the memory area for the page while clearing the mark bits and adding
  // all the unmarked objects to the freelist. Whether the freelist is
  // pre-locked is indicated by the locked parameter.
  // Returns true if the page is in use. Freelist is untouched if page is not
  // in use.
  bool SweepPage(HeapPage* page, FreeList* freelist, bool locked);

  // Returns the number of words from page->object_start() to the end of the
  // last marked object.
  intptr_t SweepLargePage(HeapPage* page);

  // Sweep the regular sized data pages between first and last inclusive.
  static void SweepConcurrent(Isolate* isolate,
                              HeapPage* first,
                              HeapPage* last,
                              FreeList* freelist);
};

}  // namespace dart

#endif  // RUNTIME_VM_GC_SWEEPER_H_
