/*
* Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 Yokogawa Electric Corporation,
* YDC Corporation, IPA (Information-technology Promotion Agency, Japan).
* All rights reserved.
*
* Redistribution and use of this software in source and binary forms, with
* or without modification, are permitted provided that the following
* conditions and disclaimer are agreed and accepted by the user:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* 3. Neither the names of the copyrighters, the name of the project which
* is related to this software (hereinafter referred to as "project") nor
* the names of the contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* 4. No merchantable use may be permitted without prior written
* notification to the copyrighters. However, using this software for the
* purpose of testing or evaluating any products including merchantable
* products may be permitted without any notification to the copyrighters.
*
*
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHTERS, THE PROJECT AND
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING
* BUT NOT LIMITED THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHTERS, THE PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT,STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
* $TAHI: v6eval/lib/Pz/WObject.h,v 1.49 2005/05/09 09:35:24 akisada Exp $
*/
#if !defined(__WObject_h__)
#define __WObject_h__ 1
#include "CmTypes.h"
#include "pzCommon.h"
#include "RObject.h"
#include "ItPosition.h"
class PObject;
class MObject;
class WControl;
class RControl;
class PvNumber;
class PvOctets;
class PvObject;
class PaObject;
//======================================================================
// WORK TREE COMPOSER
class WObject:public TObject {
private:
const PObject* object_; //Pc,Pl,Pv
ItPosition size_; //this size
ItPosition offset_; //from FrameTop
public:
WObject(WObject*,const MObject*,const PObject* =0);
virtual ~WObject();
virtual WObject *wDecrypted() const { return(0); }
//----------------------------------------------------------------------
virtual void generatePrologue(ItPosition&);
virtual void evaluatePrologue(ItPosition&);
//----------------------------------------------------------------------
// MEMBER MANUPULATION
virtual const PvObject* pvalue() const{return (const PvObject*)rgenerate();}
virtual ItPosition size() const{return size_;}//pvalue size
//
inline const PObject* object() const;
inline const ItPosition& offset() const;
virtual uint32_t length() const;
virtual uint32_t distance() const; //from ParentTop
virtual uint32_t operation() const{return eOPEQ_;}
virtual const PObject* rgenerate() const;
CSTR operatorString() const {return operSTR[operation()];}
//----------------------------------------------------------------------
// HIERARCY MANUPULATION
inline WObject* nextChild(const CmQueue* =0) const;
inline WObject* nextSister() const;
inline WObject* nextEvaluation(const CmQueue* =0) const;
inline WObject* prevChild(const CmQueue* =0) const;
inline WObject* prevSister() const;
inline WObject* parent() const;
//----------------------------------------------------------------------
// GENERATE/ENCODE
virtual bool generate(WControl&,OCTBUF&);
virtual bool geneAuto(WControl&,OCTBUF&);
virtual bool geneFix(WControl&,OCTBUF&);
//----------------------------------------------------------------------
virtual bool encodeNumber(WControl&,OCTBUF&,const PvNumber&);
virtual bool encodeOctets(WControl&,OCTBUF&,const PvOctets&);
//----------------------------------------------------------------------
virtual void notMatch(WControl&,CSTR,RObject&) const;
virtual void evaluateFailure(const PObject*,const PObject*,CSTR=0) const;
virtual void functionFailure(RObject* r) const;
virtual void dbgEvaluate(const PObject*,const PObject*,bool,CSTR=0) const;
virtual bool metaEvaluate(WControl&,RObject&);
bool valueEvaluate(WControl&,const PvObject* ro,const PvObject* eo);
virtual PvObject* evalAutoValue();
virtual PvObject* geneAutoValue();
virtual bool doEvaluate(WControl&,RObject&);
virtual RObject* evaluate(WControl&,RObject*);
virtual bool vevaluate(const void*);
//----------------------------------------------------------------------
const WObject* ancestor(const PObject* r) const;
CSTR nameString() const;
bool mustDefine(const PObject*) const;
bool mustDefineMem(const MObject*) const;
//----------------------------------------------------------------------
// ALGORITHM INTERFACE
virtual void algorithm(const PaObject*);
virtual void icvUpdate(const PaObject&);
protected:
inline void offset(const ItPosition&);
virtual void printName(uint32_t,CSTR =0) const;
virtual const CmQueue* children() const;
virtual uint16_t width() const;
virtual void internalGeneratePrologue(ItPosition&);
virtual void internalEvaluatePrologue(ItPosition&);
virtual void stepPostion(ItPosition&);
void setSize(const ItPosition&);
inline void set_object(const PObject* po);
};
inline const PObject* WObject::object() const {return object_;}
inline void WObject::set_object(const PObject* po){object_=po;}
inline const ItPosition& WObject::offset() const {return offset_;}
inline void WObject::offset(const ItPosition& o) {offset_=o;}
inline const CmQueue* WObject::children() const {return 0;}
inline WObject* WObject::parent() const {
return (WObject*)TObject::parent();}
inline WObject* WObject::nextChild(const CmQueue* q) const {
return (WObject*)TObject::nextChild(q);}
inline WObject* WObject::nextSister() const {
return (WObject*)TObject::nextSister();}
inline WObject* WObject::nextEvaluation(const CmQueue* q) const {
return (WObject*)TObject::nextEvaluation(q);}
inline WObject* WObject::prevChild(const CmQueue* q) const {
return (WObject*)TObject::prevChild(q);}
inline WObject* WObject::prevSister() const{
return (WObject*)TObject::prevSister();}
#include "CmCltn.h"
interfaceCmList(WObjectList,WObject);
//======================================================================
// has CHILDREN COMPOSER
class WtNode:public WObject {
private:
CmQueue children_;
public:
WtNode(WObject*,const MObject*,const PObject* =0);
virtual ~WtNode();
virtual WObject* insert(TObject*);
virtual void child(TObject*);
protected:
virtual const CmQueue* children() const;
virtual bool generate(WControl&,OCTBUF&);
virtual void internalGeneratePrologue(ItPosition&);
virtual void internalEvaluatePrologue(ItPosition&);
virtual void icvUpdate(const PaObject&);
};
inline const CmQueue* WtNode::children() const {return &children_;}
//======================================================================
// MEMBER COMPOSER
class WmObject:public WtNode {
private:
eOperation operator_;
PObject* rgenerate_;
PvObject* revaluate_;
public:
WmObject(WObject*,const MObject*,const PObject* =0);
virtual ~WmObject();
virtual bool generate(WControl&,OCTBUF&);
virtual void internalGeneratePrologue(ItPosition&);
virtual bool doEvaluate(WControl&,RObject&);
virtual void internalEvaluatePrologue(ItPosition&);
virtual uint32_t operation() const;
PvObject* revaluate() const;
virtual const PObject* rgenerate() const;
protected:
inline void set_rgenerate(PObject*);
};
inline uint32_t WmObject::operation() const {return operator_;}
inline PvObject* WmObject::revaluate() const {return revaluate_;}
inline void WmObject::set_rgenerate(PObject* g) {rgenerate_=g;}
//======================================================================
// COMPOUND COMPOSER
class WcObject:public WtNode {
private:
PvOctets* rgenerate_;
public:
WcObject(WObject*,const MObject*,const PObject* =0);
virtual ~WcObject();
virtual const PObject* rgenerate() const;
virtual bool generate(WControl&,OCTBUF&);
virtual void generatePrologue(ItPosition&);
virtual bool doEvaluate(WControl&,RObject&);
virtual void printName(uint32_t,CSTR =0) const;
virtual void icvUpdate(const PaObject&);
};
//======================================================================
class WcPacket_IP:public WcObject {// has a Pseudo_Header ,and keep it
private:
class Con_IPinfo* IPinfo_;
public:
WcPacket_IP(WObject*,const MObject*,const PObject* pc);
virtual ~WcPacket_IP();
Con_IPinfo* IPinfo()const{return IPinfo_;}
};
//======================================================================
// DATA COMPOSER
class WvObject:public WtNode {
private:
public:
WvObject(WObject*,const MObject*,const PObject* =0);
virtual ~WvObject();
virtual bool encodeNumber(WControl&,OCTBUF&,const PvNumber&);
virtual bool encodeOctets(WControl&,OCTBUF&,const PvOctets&);
};
//======================================================================
// SUBSTR FUNCTION COMPOSER
class WvSubstr:public WvObject {
private:
WObject* reference_;
PvOctets* substr_;
public:
WvSubstr(WObject*,const MObject*,const PObject* =0);
virtual ~WvSubstr();
virtual void internalGeneratePrologue(ItPosition&);
virtual bool generate(WControl&,OCTBUF&);
virtual const PObject* rgenerate() const;
protected:
virtual void child(TObject*);
};
//======================================================================
// ONEOF FUNCTION COMPOSER
class WvOneof:public WvObject {
private:
WObjectList references_;
public:
WvOneof(WObject*,const MObject*,const PObject* =0);
virtual ~WvOneof();
virtual RObject* evaluate(WControl&,RObject*);
virtual bool generate(WControl&,OCTBUF&);
protected:
virtual void child(TObject*);
};
//======================================================================
// COMB FUNCTION COMPOSER
class WvComb:public WvObject {
private:
WObjectList references_;
public:
WvComb(WObject*,const MObject*,const PObject* =0);
virtual ~WvComb();
virtual RObject* evaluate(WControl&,RObject*);
virtual bool generate(WControl&,OCTBUF&);
protected:
virtual void child(TObject*);
};
#endif
syntax highlighted by Code2HTML, v. 0.9.1