📄 lpd.h
字号:
// Copyright (c) 1994 James Clark// See the file COPYING for copying permission.#ifndef Lpd_INCLUDED#define Lpd_INCLUDED 1#ifdef __GNUG__#pragma interface#endif#include "Attribute.h"#include "StringC.h"#include "Ptr.h"#include "Resource.h"#include "Boolean.h"#include "Named.h"#include "NamedTable.h"#include "Syntax.h"#include "Location.h"#include "Dtd.h"#ifdef SP_NAMESPACEnamespace SP_NAMESPACE {#endifclass ElementType;struct SP_API ResultElementSpec { ResultElementSpec(); const ElementType *elementType; AttributeList attributeList; void swap(ResultElementSpec &);};class SP_API Lpd : public Resource {public: enum Type { simpleLink, implicitLink, explicitLink }; Lpd(const StringC &, Type, const Location &, const Ptr<Dtd> &sourceDtd); virtual ~Lpd(); Type type() const; const Location &location() const; const Ptr<Dtd> &sourceDtd(); ConstPtr<Dtd> sourceDtd() const; Boolean active() const; void activate(); const ConstPtr<StringResource<Char> > &namePointer() const; const StringC &name() const;private: Lpd(const Lpd &); // undefined void operator=(const Lpd &); // undefined Type type_; Location location_; Boolean active_; Ptr<Dtd> sourceDtd_; ConstPtr<StringResource<Char> > name_;};class SP_API SimpleLpd : public Lpd, public Attributed {public: SimpleLpd(const StringC &, const Location &, const Ptr<Dtd> &sourceDtd);private: SimpleLpd(const SimpleLpd &); // undefined void operator=(const SimpleLpd &); // undefined};class LinkSet;// A link rule whose source element specification is not implied.class SP_API SourceLinkRule {public: SourceLinkRule(); void setLinkAttributes(AttributeList &); void setResult(const ElementType *, AttributeList &); void setUselink(const LinkSet *); void setPostlink(const LinkSet *); void setPostlinkRestore(); void swap(SourceLinkRule &); const AttributeList &attributes() const; const ResultElementSpec &resultElementSpec() const; const LinkSet *uselink() const; const LinkSet *postlink() const; Boolean postlinkRestore() const;private: const LinkSet *uselink_; const LinkSet *postlink_; Boolean postlinkRestore_; AttributeList linkAttributes_; ResultElementSpec resultElementSpec_;};class SP_API SourceLinkRuleResource : public Resource, public SourceLinkRule {public: SourceLinkRuleResource();};class SP_API LinkSet : public Named {public: LinkSet(const StringC &, const Dtd *); void setDefined(); Boolean defined() const; void addImplied(const ElementType *, AttributeList &); size_t nLinkRules(const ElementType *) const; const SourceLinkRule &linkRule(const ElementType *, size_t) const; void addLinkRule(const ElementType *, const ConstPtr<SourceLinkRuleResource> &); size_t nImpliedLinkRules() const; const ResultElementSpec &impliedLinkRule(size_t) const; Boolean impliedResultAttributes(const ElementType *, const AttributeList *&);private: LinkSet(const LinkSet &); // undefined void operator=(const LinkSet &); // undefined Boolean defined_; // indexed by typeIndex of source elements Vector<Vector<ConstPtr<SourceLinkRuleResource> > > linkRules_; Vector<ResultElementSpec> impliedSourceLinkRules_;};class SP_API IdLinkRule : public SourceLinkRule {public: IdLinkRule(); Boolean isAssociatedWith(const ElementType *) const; void setAssocElementTypes(Vector<const ElementType *> &); void swap(IdLinkRule &);private: Vector<const ElementType *> assocElementTypes_;};// A collection of link rules in a ID link set that are// assocated with the same name (unique identifier).class SP_API IdLinkRuleGroup : public Named {public: IdLinkRuleGroup(const StringC &); size_t nLinkRules() const; const IdLinkRule &linkRule(size_t) const; void addLinkRule(IdLinkRule &);private: IdLinkRuleGroup(const IdLinkRuleGroup &); // undefined void operator=(const IdLinkRuleGroup &); // undefined Vector<IdLinkRule> linkRules_;};// An implicit or explicit LPD.class SP_API ComplexLpd : public Lpd {public: typedef ConstNamedTableIter<LinkSet> ConstLinkSetIter; ComplexLpd(const StringC &, Type, const Location &, const Syntax &syntax, const Ptr<Dtd> &sourceDtd, const Ptr<Dtd> &resultDtd); size_t allocAttributeDefinitionListIndex(); size_t nAttributeDefinitionList() const; LinkSet *initialLinkSet(); const LinkSet *initialLinkSet() const; const LinkSet *emptyLinkSet() const; const LinkSet *lookupLinkSet(const StringC &) const; const IdLinkRuleGroup *lookupIdLink(const StringC &) const; IdLinkRuleGroup *lookupCreateIdLink(const StringC &); void insertIdLink(IdLinkRuleGroup *); ConstLinkSetIter linkSetIter() const; Boolean hadIdLinkSet() const; void setHadIdLinkSet(); LinkSet *lookupLinkSet(const StringC &); LinkSet *insertLinkSet(LinkSet *); const Ptr<Dtd> &resultDtd(); ConstPtr<Dtd> resultDtd() const; const ConstPtr<AttributeDefinitionList> & attributeDef(const ElementType *) const; void setAttributeDef(const ElementType *, const ConstPtr<AttributeDefinitionList> &);private: ComplexLpd(const ComplexLpd &); // undefined void operator=(const ComplexLpd &); // undefined Ptr<Dtd> resultDtd_; Vector<ConstPtr<AttributeDefinitionList> > linkAttributeDefs_; NamedTable<LinkSet> linkSetTable_; LinkSet initialLinkSet_; LinkSet emptyLinkSet_; Boolean hadIdLinkSet_; NamedTable<IdLinkRuleGroup> idLinkTable_; size_t nAttributeDefinitionList_;};inlineLpd::Type Lpd::type() const{ return type_;}inlineconst Location &Lpd::location() const{ return location_;}inlineBoolean Lpd::active() const{ return active_;}inlinevoid Lpd::activate(){ active_ = 1;}inlineConstPtr<Dtd> Lpd::sourceDtd() const{ return sourceDtd_;}inlineconst Ptr<Dtd> &Lpd::sourceDtd(){ return sourceDtd_;}inlineconst ConstPtr<StringResource<Char> > &Lpd::namePointer() const{ return name_;}inlineconst StringC &Lpd::name() const{ return *name_;}inlinevoid SourceLinkRule::setLinkAttributes(AttributeList &attributes){ attributes.swap(linkAttributes_);}inlineconst AttributeList &SourceLinkRule::attributes() const{ return linkAttributes_;}inlinevoid SourceLinkRule::setResult(const ElementType *element, AttributeList &attributes){ resultElementSpec_.elementType = element; attributes.swap(resultElementSpec_.attributeList);}inlineconst ResultElementSpec &SourceLinkRule::resultElementSpec() const{ return resultElementSpec_;}inlinevoid SourceLinkRule::setUselink(const LinkSet *linkSet){ uselink_ = linkSet;}inlinevoid SourceLinkRule::setPostlink(const LinkSet *linkSet){ postlink_ = linkSet;}inlinevoid SourceLinkRule::setPostlinkRestore(){ postlinkRestore_ = 1;}inlineconst LinkSet *SourceLinkRule::uselink() const{ return uselink_;}inlineconst LinkSet *SourceLinkRule::postlink() const{ return postlink_;}inlineBoolean SourceLinkRule::postlinkRestore() const{ return postlinkRestore_;}inlineBoolean LinkSet::defined() const{ return defined_;}inlinevoid LinkSet::setDefined(){ defined_ = 1;}inlineconst SourceLinkRule &LinkSet::linkRule(const ElementType *e, size_t i) const{ return *linkRules_[e->index()][i];}inlinesize_t LinkSet::nImpliedLinkRules() const{ return impliedSourceLinkRules_.size();}inlineconst ResultElementSpec &LinkSet::impliedLinkRule(size_t i) const{ return impliedSourceLinkRules_[i];}inlineconst Ptr<Dtd> &ComplexLpd::resultDtd(){ return resultDtd_;}inlineConstPtr<Dtd> ComplexLpd::resultDtd() const{ return resultDtd_;}inlineLinkSet *ComplexLpd::initialLinkSet(){ return &initialLinkSet_;}inlineconst LinkSet *ComplexLpd::initialLinkSet() const{ return &initialLinkSet_;}inlineconst LinkSet *ComplexLpd::emptyLinkSet() const{ return &emptyLinkSet_;}inlineconst LinkSet *ComplexLpd::lookupLinkSet(const StringC &name) const{ return linkSetTable_.lookup(name);}inlineLinkSet *ComplexLpd::lookupLinkSet(const StringC &name){ return linkSetTable_.lookup(name);}inlineLinkSet *ComplexLpd::insertLinkSet(LinkSet *e){ return linkSetTable_.insert(e);}inlinesize_t ComplexLpd::nAttributeDefinitionList() const{ return nAttributeDefinitionList_;}inlinesize_t ComplexLpd::allocAttributeDefinitionListIndex(){ return nAttributeDefinitionList_++;}inlineComplexLpd::ConstLinkSetIter ComplexLpd::linkSetIter() const{ // Avoid use of typedef to work around MSVC 2.0 bug. return ConstNamedTableIter<LinkSet>(linkSetTable_);}inlineconst ConstPtr<AttributeDefinitionList> &ComplexLpd::attributeDef(const ElementType *e) const{ return linkAttributeDefs_[e->index()];}inlinevoid ComplexLpd::setAttributeDef(const ElementType *e, const ConstPtr<AttributeDefinitionList> &attdef){ linkAttributeDefs_[e->index()] = attdef;}inlineBoolean ComplexLpd::hadIdLinkSet() const{ return hadIdLinkSet_;}inlinevoid ComplexLpd::setHadIdLinkSet(){ hadIdLinkSet_ = 1;}inlineconst IdLinkRuleGroup *ComplexLpd::lookupIdLink(const StringC &id) const{ return idLinkTable_.lookup(id);}inlinesize_t IdLinkRuleGroup::nLinkRules() const{ return linkRules_.size();}inlineconst IdLinkRule &IdLinkRuleGroup::linkRule(size_t i) const{ return linkRules_[i];}#ifdef SP_NAMESPACE}#endif#endif /* not Lpd_INCLUDED */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -