// Copyright 2011 Google Inc. All Rights Reserved.

#ifndef ART_SRC_MARK_STACK_H_
#define ART_SRC_MARK_STACK_H_

#include "logging.h"
#include "macros.h"
#include "mem_map.h"
#include "scoped_ptr.h"

namespace art {

class Object;

class MarkStack {
 public:
  static MarkStack* Create(size_t maximum_size);

  ~MarkStack();

  void Push(const Object* obj) {
    DCHECK(obj != NULL);
    DCHECK_NE(ptr_, limit_);
    *ptr_ = obj;
    ++ptr_;
  }

  const Object* Pop() {
    DCHECK_NE(ptr_, base_);
    --ptr_;
    DCHECK(*ptr_ != NULL);
    return *ptr_;
  }

  bool IsEmpty() const {
    return ptr_ == base_;
  }

 private:
  MarkStack() :
      base_(NULL), limit_(NULL), ptr_(NULL) {
  }

  bool Init(size_t maximum_size);

  // Memory mapping of the mark stack.
  scoped_ptr<MemMap> mem_map_;

  // Base of the mark stack.
  const Object* const* base_;

  // Exclusive limit of the mark stack.
  const Object* const* limit_;

  // Pointer to the top of the mark stack.
  Object const**  ptr_;

  DISALLOW_COPY_AND_ASSIGN(MarkStack);
};

}  // namespace art

#endif  // ART_SRC_MARK_STACK_H_
