17d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Copyright 2013 the V8 project authors. All rights reserved.
27d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be
37d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// found in the LICENSE file.
47d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
57d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#ifndef V8_COMPILER_GENERIC_GRAPH_H_
67d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#define V8_COMPILER_GENERIC_GRAPH_H_
77d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
87d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler/generic-node.h"
97d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgnamespace v8 {
117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgnamespace internal {
127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgclass Zone;
147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgnamespace compiler {
167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgclass GenericGraphBase : public ZoneObject {
187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org public:
197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  explicit GenericGraphBase(Zone* zone) : zone_(zone), next_node_id_(0) {}
207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  Zone* zone() const { return zone_; }
227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  NodeId NextNodeID() { return next_node_id_++; }
247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  NodeId NodeCount() const { return next_node_id_; }
257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org private:
277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  Zone* zone_;
287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  NodeId next_node_id_;
297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org};
307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgtemplate <class V>
327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgclass GenericGraph : public GenericGraphBase {
337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org public:
347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  explicit GenericGraph(Zone* zone)
357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      : GenericGraphBase(zone), start_(NULL), end_(NULL) {}
367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  V* start() { return start_; }
387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  V* end() { return end_; }
397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  void SetStart(V* start) { start_ = start; }
417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  void SetEnd(V* end) { end_ = end; }
427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org private:
447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  V* start_;
457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  V* end_;
467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  DISALLOW_COPY_AND_ASSIGN(GenericGraph);
487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org};
497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}  // namespace v8::internal::compiler
527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#endif  // V8_COMPILER_GENERIC_GRAPH_H_
54