📄 landmarkt.hh
字号:
#ifndef CLICKTOOL_LANDMARKT_HH#define CLICKTOOL_LANDMARKT_HH 1#include <click/string.hh>#include <click/vector.hh>class LandmarkSetT;class LandmarkT { public: inline LandmarkT(); inline LandmarkT(const String &filename, unsigned lineno); //inline LandmarkT(LandmarkSetT *lset, unsigned offset); inline LandmarkT(LandmarkSetT *lset, unsigned offset1, unsigned offset2); inline LandmarkT(const LandmarkT &o); inline ~LandmarkT(); static void static_initialize(); static const LandmarkT &empty_landmark(); typedef String (LandmarkT::*unspecified_bool_type)() const; inline operator unspecified_bool_type() const; String str() const; operator String() const; String decorated_str() const; unsigned offset1() const { return _offset1; } unsigned offset2() const { return _offset2; } inline LandmarkT &operator=(const LandmarkT &o); enum { noffset = (unsigned) -1 }; private: LandmarkSetT *_lset; unsigned _offset1; unsigned _offset2; static LandmarkT *empty;};class LandmarkSetT { public: LandmarkSetT(); LandmarkSetT(const String &filename, unsigned lineno); inline void ref(); inline void unref(); String offset_to_string(unsigned offset) const; String offset_to_decorated_string(unsigned offset1, unsigned offset2) const; void new_line(unsigned offset, const String &filename, unsigned lineno); struct LandmarkInfo { unsigned end_offset; int filename; unsigned lineno; LandmarkInfo(unsigned o, int f, unsigned l) : end_offset(o), filename(f), lineno(l) { } }; private: int _refcount; Vector<LandmarkInfo> _linfo; Vector<String> _fnames; LandmarkSetT(const LandmarkSetT &); ~LandmarkSetT(); LandmarkSetT &operator=(const LandmarkSetT &); static LandmarkSetT *the_empty_set; friend class LandmarkT;};inline voidLandmarkSetT::ref(){ assert(_refcount >= 1); ++_refcount;}inline voidLandmarkSetT::unref(){ assert(_refcount >= 1); if (--_refcount == 0) delete this;}inlineLandmarkT::LandmarkT() : _lset(empty->_lset), _offset1(noffset), _offset2(noffset){ _lset->ref();}inlineLandmarkT::LandmarkT(const String &filename, unsigned lineno = 0) : _lset(new LandmarkSetT(filename, lineno)), _offset1(noffset), _offset2(noffset){}#if 0inlineLandmarkT::LandmarkT(LandmarkSetT *lset, unsigned offset) : _lset(lset), _offset1(offset), _offset2(offset){ _lset->ref();}#endifinlineLandmarkT::LandmarkT(LandmarkSetT *lset, unsigned offset1, unsigned offset2) : _lset(lset), _offset1(offset1), _offset2(offset2){ _lset->ref();}inlineLandmarkT::LandmarkT(const LandmarkT &lm) : _lset(lm._lset), _offset1(lm._offset1), _offset2(lm._offset2){ _lset->ref();}inlineLandmarkT::~LandmarkT(){ _lset->unref();}inline const LandmarkT &LandmarkT::empty_landmark(){ assert(empty); return *empty;}inline LandmarkT &LandmarkT::operator=(const LandmarkT &lm){ lm._lset->ref(); _lset->unref(); _lset = lm._lset; _offset1 = lm._offset1; _offset2 = lm._offset2; return *this;}inlineLandmarkT::operator unspecified_bool_type() const{ return _lset != empty->_lset ? &LandmarkT::str : 0;}inline StringLandmarkT::str() const{ return _lset->offset_to_string(_offset1);}inlineLandmarkT::operator String() const{ return _lset->offset_to_string(_offset1);}inline StringLandmarkT::decorated_str() const{ return _lset->offset_to_decorated_string(_offset1, _offset2);}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -