Changeset 656:cb38ccedd2c1 in lemon-main
- Timestamp:
- 05/07/09 10:46:49 (16 years ago)
- Branch:
- default
- Children:
- 657:bf7928412136, 658:ebdcc68fe79e
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/adaptors.h
r617 r656 1840 1840 typedef typename Digraph::Node Node; 1841 1841 1842 class Arc : public Edge{1842 class Arc { 1843 1843 friend class UndirectorBase; 1844 1844 protected: 1845 Edge _edge; 1845 1846 bool _forward; 1846 1847 1847 Arc(const Edge& edge, bool forward) :1848 Edge(edge), _forward(forward) {}1848 Arc(const Edge& edge, bool forward) 1849 : _edge(edge), _forward(forward) {} 1849 1850 1850 1851 public: 1851 1852 Arc() {} 1852 1853 1853 Arc(Invalid) : Edge(INVALID), _forward(true) {} 1854 Arc(Invalid) : _edge(INVALID), _forward(true) {} 1855 1856 operator const Edge&() const { return _edge; } 1854 1857 1855 1858 bool operator==(const Arc &other) const { 1856 return _forward == other._forward && 1857 static_cast<const Edge&>(*this) == static_cast<const Edge&>(other); 1859 return _forward == other._forward && _edge == other._edge; 1858 1860 } 1859 1861 bool operator!=(const Arc &other) const { 1860 return _forward != other._forward || 1861 static_cast<const Edge&>(*this) != static_cast<const Edge&>(other); 1862 return _forward != other._forward || _edge != other._edge; 1862 1863 } 1863 1864 bool operator<(const Arc &other) const { 1864 1865 return _forward < other._forward || 1865 (_forward == other._forward && 1866 static_cast<const Edge&>(*this) < static_cast<const Edge&>(other)); 1866 (_forward == other._forward && _edge < other._edge); 1867 1867 } 1868 1868 }; … … 1877 1877 1878 1878 void first(Arc& a) const { 1879 _digraph->first(a );1879 _digraph->first(a._edge); 1880 1880 a._forward = true; 1881 1881 } … … 1885 1885 a._forward = false; 1886 1886 } else { 1887 _digraph->next(a );1887 _digraph->next(a._edge); 1888 1888 a._forward = true; 1889 1889 } … … 1899 1899 1900 1900 void firstOut(Arc& a, const Node& n) const { 1901 _digraph->firstIn(a , n);1902 if ( static_cast<const Edge&>(a)!= INVALID ) {1901 _digraph->firstIn(a._edge, n); 1902 if (a._edge != INVALID ) { 1903 1903 a._forward = false; 1904 1904 } else { 1905 _digraph->firstOut(a , n);1905 _digraph->firstOut(a._edge, n); 1906 1906 a._forward = true; 1907 1907 } … … 1909 1909 void nextOut(Arc &a) const { 1910 1910 if (!a._forward) { 1911 Node n = _digraph->target(a );1912 _digraph->nextIn(a );1913 if ( static_cast<const Edge&>(a) == INVALID) {1914 _digraph->firstOut(a , n);1911 Node n = _digraph->target(a._edge); 1912 _digraph->nextIn(a._edge); 1913 if (a._edge == INVALID) { 1914 _digraph->firstOut(a._edge, n); 1915 1915 a._forward = true; 1916 1916 } 1917 1917 } 1918 1918 else { 1919 _digraph->nextOut(a );1919 _digraph->nextOut(a._edge); 1920 1920 } 1921 1921 } 1922 1922 1923 1923 void firstIn(Arc &a, const Node &n) const { 1924 _digraph->firstOut(a , n);1925 if ( static_cast<const Edge&>(a)!= INVALID ) {1924 _digraph->firstOut(a._edge, n); 1925 if (a._edge != INVALID ) { 1926 1926 a._forward = false; 1927 1927 } else { 1928 _digraph->firstIn(a , n);1928 _digraph->firstIn(a._edge, n); 1929 1929 a._forward = true; 1930 1930 } … … 1932 1932 void nextIn(Arc &a) const { 1933 1933 if (!a._forward) { 1934 Node n = _digraph->source(a );1935 _digraph->nextOut(a );1936 if ( static_cast<const Edge&>(a)== INVALID ) {1937 _digraph->firstIn(a , n);1934 Node n = _digraph->source(a._edge); 1935 _digraph->nextOut(a._edge); 1936 if (a._edge == INVALID ) { 1937 _digraph->firstIn(a._edge, n); 1938 1938 a._forward = true; 1939 1939 } 1940 1940 } 1941 1941 else { 1942 _digraph->nextIn(a );1942 _digraph->nextIn(a._edge); 1943 1943 } 1944 1944 } … … 1973 1973 1974 1974 Node source(const Arc &a) const { 1975 return a._forward ? _digraph->source(a ) : _digraph->target(a);1975 return a._forward ? _digraph->source(a._edge) : _digraph->target(a._edge); 1976 1976 } 1977 1977 1978 1978 Node target(const Arc &a) const { 1979 return a._forward ? _digraph->target(a ) : _digraph->source(a);1979 return a._forward ? _digraph->target(a._edge) : _digraph->source(a._edge); 1980 1980 } 1981 1981 1982 1982 static Arc direct(const Edge &e, bool d) { 1983 1983 return Arc(e, d); 1984 }1985 Arc direct(const Edge &e, const Node& n) const {1986 return Arc(e, _digraph->source(e) == n);1987 1984 } 1988 1985
Note: See TracChangeset
for help on using the changeset viewer.