Mercurial > hg > octave-lyh
comparison src/pt-const.cc @ 164:e2c950dd96d2
[project @ 1993-10-18 19:32:00 by jwe]
author | jwe |
---|---|
date | Mon, 18 Oct 1993 19:32:00 +0000 |
parents | 21b599370728 |
children | b6b4d8c513fe |
comparison
equal
deleted
inserted
replaced
163:b4bdbdf95e05 | 164:e2c950dd96d2 |
---|---|
385 { | 385 { |
386 string = strsave (s); | 386 string = strsave (s); |
387 type_tag = string_constant; | 387 type_tag = string_constant; |
388 } | 388 } |
389 | 389 |
390 tree_constant_rep::tree_constant_rep (const String& s) | |
391 { | |
392 string = strsave (s); | |
393 type_tag = string_constant; | |
394 } | |
395 | |
396 tree_constant_rep::tree_constant_rep (double b, double l, double i) | 390 tree_constant_rep::tree_constant_rep (double b, double l, double i) |
397 { | 391 { |
398 range = new Range (b, l, i); | 392 range = new Range (b, l, i); |
399 int nel = range->nelem (); | 393 int nel = range->nelem (); |
400 if (nel < 0) | 394 if (nel < 0) |
653 } | 647 } |
654 } | 648 } |
655 } | 649 } |
656 | 650 |
657 double | 651 double |
658 tree_constant_rep::to_scalar (void) | 652 tree_constant_rep::to_scalar (void) const |
659 { | 653 { |
660 tree_constant tmp = make_numeric (); | 654 tree_constant tmp = make_numeric (); |
661 | 655 |
662 double retval = 0.0; | 656 double retval = 0.0; |
663 | 657 |
700 } | 694 } |
701 return retval; | 695 return retval; |
702 } | 696 } |
703 | 697 |
704 ColumnVector | 698 ColumnVector |
705 tree_constant_rep::to_vector (void) | 699 tree_constant_rep::to_vector (void) const |
706 { | 700 { |
707 tree_constant tmp = make_numeric (); | 701 tree_constant tmp = make_numeric (); |
708 | 702 |
709 ColumnVector retval; | 703 ColumnVector retval; |
710 | 704 |
741 } | 735 } |
742 return retval; | 736 return retval; |
743 } | 737 } |
744 | 738 |
745 Matrix | 739 Matrix |
746 tree_constant_rep::to_matrix (void) | 740 tree_constant_rep::to_matrix (void) const |
747 { | 741 { |
748 tree_constant tmp = make_numeric (); | 742 tree_constant tmp = make_numeric (); |
749 | 743 |
750 Matrix retval; | 744 Matrix retval; |
751 | 745 |
827 } | 821 } |
828 return type_tag; | 822 return type_tag; |
829 } | 823 } |
830 | 824 |
831 tree_constant | 825 tree_constant |
832 tree_constant_rep::make_numeric (int force_str_conv = 0) | 826 tree_constant_rep::make_numeric (int force_str_conv = 0) const |
833 { | 827 { |
834 tree_constant retval; | 828 tree_constant retval; |
835 switch (type_tag) | 829 switch (type_tag) |
836 { | 830 { |
837 case scalar_constant: | 831 case scalar_constant: |
1246 maybe_page_output (output_buf); | 1240 maybe_page_output (output_buf); |
1247 } | 1241 } |
1248 } | 1242 } |
1249 | 1243 |
1250 tree_constant * | 1244 tree_constant * |
1251 tree_constant_rep::eval (tree_constant *args, int nargin, int nargout, | 1245 tree_constant_rep::eval (const tree_constant *args, int nargin, int nargout, |
1252 int print) | 1246 int print) |
1253 { | 1247 { |
1254 if (error_state) | 1248 if (error_state) |
1255 return NULL_TREE_CONST; | 1249 return NULL_TREE_CONST; |
1256 | 1250 |
1533 } | 1527 } |
1534 return status; | 1528 return status; |
1535 } | 1529 } |
1536 | 1530 |
1537 double | 1531 double |
1538 tree_constant_rep::double_value (void) | 1532 tree_constant_rep::double_value (void) const |
1539 { | 1533 { |
1540 switch (type_tag) | 1534 switch (type_tag) |
1541 { | 1535 { |
1542 case scalar_constant: | 1536 case scalar_constant: |
1543 return scalar; | 1537 return scalar; |
1558 break; | 1552 break; |
1559 } | 1553 } |
1560 } | 1554 } |
1561 | 1555 |
1562 Matrix | 1556 Matrix |
1563 tree_constant_rep::matrix_value (void) | 1557 tree_constant_rep::matrix_value (void) const |
1564 { | 1558 { |
1565 switch (type_tag) | 1559 switch (type_tag) |
1566 { | 1560 { |
1567 case matrix_constant: | 1561 case matrix_constant: |
1568 return *matrix; | 1562 return *matrix; |
1583 break; | 1577 break; |
1584 } | 1578 } |
1585 } | 1579 } |
1586 | 1580 |
1587 Complex | 1581 Complex |
1588 tree_constant_rep::complex_value (void) | 1582 tree_constant_rep::complex_value (void) const |
1589 { | 1583 { |
1590 switch (type_tag) | 1584 switch (type_tag) |
1591 { | 1585 { |
1592 case complex_scalar_constant: | 1586 case complex_scalar_constant: |
1593 return *complex_scalar; | 1587 return *complex_scalar; |
1598 break; | 1592 break; |
1599 } | 1593 } |
1600 } | 1594 } |
1601 | 1595 |
1602 ComplexMatrix | 1596 ComplexMatrix |
1603 tree_constant_rep::complex_matrix_value (void) | 1597 tree_constant_rep::complex_matrix_value (void) const |
1604 { | 1598 { |
1605 switch (type_tag) | 1599 switch (type_tag) |
1606 { | 1600 { |
1607 case scalar_constant: | 1601 case scalar_constant: |
1608 { | 1602 { |
1624 break; | 1618 break; |
1625 } | 1619 } |
1626 } | 1620 } |
1627 | 1621 |
1628 char * | 1622 char * |
1629 tree_constant_rep::string_value (void) | 1623 tree_constant_rep::string_value (void) const |
1630 { | 1624 { |
1631 assert (type_tag == string_constant); | 1625 assert (type_tag == string_constant); |
1632 return string; | 1626 return string; |
1633 } | 1627 } |
1634 | 1628 |
1635 Range | 1629 Range |
1636 tree_constant_rep::range_value (void) | 1630 tree_constant_rep::range_value (void) const |
1637 { | 1631 { |
1638 assert (type_tag == range_constant); | 1632 assert (type_tag == range_constant); |
1639 return *range; | 1633 return *range; |
1640 } | 1634 } |
1641 | 1635 |
1642 int | 1636 int |
1643 tree_constant_rep::rows (void) | 1637 tree_constant_rep::rows (void) const |
1644 { | 1638 { |
1645 int retval = -1; | 1639 int retval = -1; |
1646 switch (type_tag) | 1640 switch (type_tag) |
1647 { | 1641 { |
1648 case scalar_constant: | 1642 case scalar_constant: |
1669 } | 1663 } |
1670 return retval; | 1664 return retval; |
1671 } | 1665 } |
1672 | 1666 |
1673 int | 1667 int |
1674 tree_constant_rep::columns (void) | 1668 tree_constant_rep::columns (void) const |
1675 { | 1669 { |
1676 int retval = -1; | 1670 int retval = -1; |
1677 switch (type_tag) | 1671 switch (type_tag) |
1678 { | 1672 { |
1679 case scalar_constant: | 1673 case scalar_constant: |
1704 } | 1698 } |
1705 return retval; | 1699 return retval; |
1706 } | 1700 } |
1707 | 1701 |
1708 tree_constant | 1702 tree_constant |
1709 tree_constant_rep::all (void) | 1703 tree_constant_rep::all (void) const |
1710 { | 1704 { |
1711 if (type_tag == string_constant || type_tag == range_constant) | 1705 if (type_tag == string_constant || type_tag == range_constant) |
1712 { | 1706 { |
1713 tree_constant tmp = make_numeric (); | 1707 tree_constant tmp = make_numeric (); |
1714 return tmp.all (); | 1708 return tmp.all (); |
1750 } | 1744 } |
1751 return retval; | 1745 return retval; |
1752 } | 1746 } |
1753 | 1747 |
1754 tree_constant | 1748 tree_constant |
1755 tree_constant_rep::any (void) | 1749 tree_constant_rep::any (void) const |
1756 { | 1750 { |
1757 if (type_tag == string_constant || type_tag == range_constant) | 1751 if (type_tag == string_constant || type_tag == range_constant) |
1758 { | 1752 { |
1759 tree_constant tmp = make_numeric (); | 1753 tree_constant tmp = make_numeric (); |
1760 return tmp.any (); | 1754 return tmp.any (); |
1796 } | 1790 } |
1797 return retval; | 1791 return retval; |
1798 } | 1792 } |
1799 | 1793 |
1800 tree_constant | 1794 tree_constant |
1801 tree_constant_rep::isstr (void) | 1795 tree_constant_rep::isstr (void) const |
1802 { | 1796 { |
1803 double status = 0.0; | 1797 double status = 0.0; |
1804 if (const_type () == string_constant) | 1798 if (type_tag == string_constant) |
1805 status = 1.0; | 1799 status = 1.0; |
1806 tree_constant retval (status); | 1800 tree_constant retval (status); |
1807 return retval; | 1801 return retval; |
1808 } | 1802 } |
1809 | 1803 |
1877 } | 1871 } |
1878 return retval; | 1872 return retval; |
1879 } | 1873 } |
1880 | 1874 |
1881 tree_constant | 1875 tree_constant |
1882 tree_constant_rep::cumprod (void) | 1876 tree_constant_rep::cumprod (void) const |
1883 { | 1877 { |
1884 if (type_tag == string_constant || type_tag == range_constant) | 1878 if (type_tag == string_constant || type_tag == range_constant) |
1885 { | 1879 { |
1886 tree_constant tmp = make_numeric (); | 1880 tree_constant tmp = make_numeric (); |
1887 return tmp.cumprod (); | 1881 return tmp.cumprod (); |
1917 } | 1911 } |
1918 return retval; | 1912 return retval; |
1919 } | 1913 } |
1920 | 1914 |
1921 tree_constant | 1915 tree_constant |
1922 tree_constant_rep::cumsum (void) | 1916 tree_constant_rep::cumsum (void) const |
1923 { | 1917 { |
1924 if (type_tag == string_constant || type_tag == range_constant) | 1918 if (type_tag == string_constant || type_tag == range_constant) |
1925 { | 1919 { |
1926 tree_constant tmp = make_numeric (); | 1920 tree_constant tmp = make_numeric (); |
1927 return tmp.cumsum (); | 1921 return tmp.cumsum (); |
1957 } | 1951 } |
1958 return retval; | 1952 return retval; |
1959 } | 1953 } |
1960 | 1954 |
1961 tree_constant | 1955 tree_constant |
1962 tree_constant_rep::prod (void) | 1956 tree_constant_rep::prod (void) const |
1963 { | 1957 { |
1964 if (type_tag == string_constant || type_tag == range_constant) | 1958 if (type_tag == string_constant || type_tag == range_constant) |
1965 { | 1959 { |
1966 tree_constant tmp = make_numeric (); | 1960 tree_constant tmp = make_numeric (); |
1967 return tmp.prod (); | 1961 return tmp.prod (); |
1997 } | 1991 } |
1998 return retval; | 1992 return retval; |
1999 } | 1993 } |
2000 | 1994 |
2001 tree_constant | 1995 tree_constant |
2002 tree_constant_rep::sum (void) | 1996 tree_constant_rep::sum (void) const |
2003 { | 1997 { |
2004 if (type_tag == string_constant || type_tag == range_constant) | 1998 if (type_tag == string_constant || type_tag == range_constant) |
2005 { | 1999 { |
2006 tree_constant tmp = make_numeric (); | 2000 tree_constant tmp = make_numeric (); |
2007 return tmp.sum (); | 2001 return tmp.sum (); |
2037 } | 2031 } |
2038 return retval; | 2032 return retval; |
2039 } | 2033 } |
2040 | 2034 |
2041 tree_constant | 2035 tree_constant |
2042 tree_constant_rep::sumsq (void) | 2036 tree_constant_rep::sumsq (void) const |
2043 { | 2037 { |
2044 if (type_tag == string_constant || type_tag == range_constant) | 2038 if (type_tag == string_constant || type_tag == range_constant) |
2045 { | 2039 { |
2046 tree_constant tmp = make_numeric (); | 2040 tree_constant tmp = make_numeric (); |
2047 return tmp.sumsq (); | 2041 return tmp.sumsq (); |
2080 } | 2074 } |
2081 return retval; | 2075 return retval; |
2082 } | 2076 } |
2083 | 2077 |
2084 static tree_constant | 2078 static tree_constant |
2085 make_diag (Matrix& v, int k) | 2079 make_diag (const Matrix& v, int k) |
2086 { | 2080 { |
2087 int nr = v.rows (); | 2081 int nr = v.rows (); |
2088 int nc = v.columns (); | 2082 int nc = v.columns (); |
2089 assert (nc == 1 || nr == 1); | 2083 assert (nc == 1 || nr == 1); |
2090 | 2084 |
2122 | 2116 |
2123 return retval; | 2117 return retval; |
2124 } | 2118 } |
2125 | 2119 |
2126 static tree_constant | 2120 static tree_constant |
2127 make_diag (ComplexMatrix& v, int k) | 2121 make_diag (const ComplexMatrix& v, int k) |
2128 { | 2122 { |
2129 int nr = v.rows (); | 2123 int nr = v.rows (); |
2130 int nc = v.columns (); | 2124 int nc = v.columns (); |
2131 assert (nc == 1 || nr == 1); | 2125 assert (nc == 1 || nr == 1); |
2132 | 2126 |
2164 | 2158 |
2165 return retval; | 2159 return retval; |
2166 } | 2160 } |
2167 | 2161 |
2168 tree_constant | 2162 tree_constant |
2169 tree_constant_rep::diag (void) | 2163 tree_constant_rep::diag (void) const |
2170 { | 2164 { |
2171 if (type_tag == string_constant || type_tag == range_constant) | 2165 if (type_tag == string_constant || type_tag == range_constant) |
2172 { | 2166 { |
2173 tree_constant tmp = make_numeric (); | 2167 tree_constant tmp = make_numeric (); |
2174 return tmp.diag (); | 2168 return tmp.diag (); |
2220 } | 2214 } |
2221 return retval; | 2215 return retval; |
2222 } | 2216 } |
2223 | 2217 |
2224 tree_constant | 2218 tree_constant |
2225 tree_constant_rep::diag (tree_constant& a) | 2219 tree_constant_rep::diag (const tree_constant& a) const |
2226 { | 2220 { |
2227 if (type_tag == string_constant || type_tag == range_constant) | 2221 if (type_tag == string_constant || type_tag == range_constant) |
2228 { | 2222 { |
2229 tree_constant tmp = make_numeric (); | 2223 tree_constant tmp = make_numeric (); |
2230 return tmp.diag (a); | 2224 return tmp.diag (a); |
2334 else if (warn) | 2328 else if (warn) |
2335 warning ("expecting string, found numeric constant"); | 2329 warning ("expecting string, found numeric constant"); |
2336 } | 2330 } |
2337 | 2331 |
2338 tree_constant | 2332 tree_constant |
2339 tree_constant_rep::mapper (Mapper_fcn& m_fcn, int print) | 2333 tree_constant_rep::mapper (Mapper_fcn& m_fcn, int print) const |
2340 { | 2334 { |
2341 tree_constant retval; | 2335 tree_constant retval; |
2342 | 2336 |
2343 if (type_tag == string_constant || type_tag == range_constant) | 2337 if (type_tag == string_constant || type_tag == range_constant) |
2344 { | 2338 { |
2473 /* | 2467 /* |
2474 * Construct return vector of empty matrices. Return empty matrices | 2468 * Construct return vector of empty matrices. Return empty matrices |
2475 * and/or gripe when appropriate. | 2469 * and/or gripe when appropriate. |
2476 */ | 2470 */ |
2477 tree_constant * | 2471 tree_constant * |
2478 vector_of_empties (int nargout, char *fcn_name) | 2472 vector_of_empties (int nargout, const char *fcn_name) |
2479 { | 2473 { |
2480 tree_constant *retval = NULL_TREE_CONST; | 2474 tree_constant *retval = NULL_TREE_CONST; |
2481 | 2475 |
2482 // Got an empty argument, check if should gripe/return empty values. | 2476 // Got an empty argument, check if should gripe/return empty values. |
2483 | 2477 |