AbstractEntry.hh revision 6882
16882SBrad.Beckmann@amd.com
26882SBrad.Beckmann@amd.com/*
36882SBrad.Beckmann@amd.com * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
46882SBrad.Beckmann@amd.com * All rights reserved.
56882SBrad.Beckmann@amd.com *
66882SBrad.Beckmann@amd.com * Redistribution and use in source and binary forms, with or without
76882SBrad.Beckmann@amd.com * modification, are permitted provided that the following conditions are
86882SBrad.Beckmann@amd.com * met: redistributions of source code must retain the above copyright
96882SBrad.Beckmann@amd.com * notice, this list of conditions and the following disclaimer;
106882SBrad.Beckmann@amd.com * redistributions in binary form must reproduce the above copyright
116882SBrad.Beckmann@amd.com * notice, this list of conditions and the following disclaimer in the
126882SBrad.Beckmann@amd.com * documentation and/or other materials provided with the distribution;
136882SBrad.Beckmann@amd.com * neither the name of the copyright holders nor the names of its
146882SBrad.Beckmann@amd.com * contributors may be used to endorse or promote products derived from
156882SBrad.Beckmann@amd.com * this software without specific prior written permission.
166882SBrad.Beckmann@amd.com *
176882SBrad.Beckmann@amd.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
186882SBrad.Beckmann@amd.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
196882SBrad.Beckmann@amd.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
206882SBrad.Beckmann@amd.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
216882SBrad.Beckmann@amd.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
226882SBrad.Beckmann@amd.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
236882SBrad.Beckmann@amd.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
246882SBrad.Beckmann@amd.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
256882SBrad.Beckmann@amd.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
266882SBrad.Beckmann@amd.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
276882SBrad.Beckmann@amd.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
286882SBrad.Beckmann@amd.com */
296882SBrad.Beckmann@amd.com
306882SBrad.Beckmann@amd.com#ifndef AbstractEntry_H
316882SBrad.Beckmann@amd.com#define AbstractEntry_H
326882SBrad.Beckmann@amd.com
336882SBrad.Beckmann@amd.com#include "mem/ruby/common/Global.hh"
346882SBrad.Beckmann@amd.com#include "mem/ruby/common/Address.hh"
356882SBrad.Beckmann@amd.com#include "mem/protocol/AccessPermission.hh"
366882SBrad.Beckmann@amd.com
376882SBrad.Beckmann@amd.comclass DataBlock;
386882SBrad.Beckmann@amd.com
396882SBrad.Beckmann@amd.comclass AbstractEntry {
406882SBrad.Beckmann@amd.compublic:
416882SBrad.Beckmann@amd.com  // Constructors
426882SBrad.Beckmann@amd.com  AbstractEntry();
436882SBrad.Beckmann@amd.com
446882SBrad.Beckmann@amd.com  // Destructor, prevent it from instantiation
456882SBrad.Beckmann@amd.com  virtual ~AbstractEntry() = 0;
466882SBrad.Beckmann@amd.com
476882SBrad.Beckmann@amd.com  // Public Methods
486882SBrad.Beckmann@amd.com
496882SBrad.Beckmann@amd.com  // The methods below are those called by ruby runtime, add when it is
506882SBrad.Beckmann@amd.com  // absolutely necessary and should all be virtual function.
516882SBrad.Beckmann@amd.com  virtual DataBlock& getDataBlk() = 0;
526882SBrad.Beckmann@amd.com
536882SBrad.Beckmann@amd.com
546882SBrad.Beckmann@amd.com  virtual void print(ostream& out) const = 0;
556882SBrad.Beckmann@amd.com
566882SBrad.Beckmann@amd.com};
576882SBrad.Beckmann@amd.com
586882SBrad.Beckmann@amd.com// Output operator declaration
596882SBrad.Beckmann@amd.comostream& operator<<(ostream& out, const AbstractEntry& obj);
606882SBrad.Beckmann@amd.com
616882SBrad.Beckmann@amd.com// ******************* Definitions *******************
626882SBrad.Beckmann@amd.com
636882SBrad.Beckmann@amd.com// Output operator definition
646882SBrad.Beckmann@amd.comextern inline
656882SBrad.Beckmann@amd.comostream& operator<<(ostream& out, const AbstractEntry& obj)
666882SBrad.Beckmann@amd.com{
676882SBrad.Beckmann@amd.com  obj.print(out);
686882SBrad.Beckmann@amd.com  out << flush;
696882SBrad.Beckmann@amd.com  return out;
706882SBrad.Beckmann@amd.com}
716882SBrad.Beckmann@amd.com
726882SBrad.Beckmann@amd.com#endif //AbstractEntry_H
736882SBrad.Beckmann@amd.com
74