Changeset 703:cb38ccedd2c1 in lemon for lemon/adaptors.h
 Timestamp:
 05/07/09 10:46:49 (12 years ago)
 Branch:
 default
 Children:
 704:bf7928412136, 705:ebdcc68fe79e
 Phase:
 public
 File:

 1 edited
Legend:
 Unmodified
 Added
 Removed

lemon/adaptors.h
r664 r703 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.