File: Generator.java

package info (click to toggle)
ppl 1%3A1.2-8.1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 44,328 kB
  • sloc: cpp: 212,085; sh: 12,176; makefile: 7,192; perl: 6,333; java: 2,220; ansic: 1,842; ml: 1,132; sed: 80
file content (145 lines) | stat: -rw-r--r-- 4,850 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/* Generator Java class declaration and implementation.
   Copyright (C) 2001-2010 Roberto Bagnara <bagnara@cs.unipr.it>
   Copyright (C) 2010-2016 BUGSENG srl (http://bugseng.com)

This file is part of the Parma Polyhedra Library (PPL).

The PPL is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 3 of the License, or (at your
option) any later version.

The PPL is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307, USA.

For the most up-to-date information see the Parma Polyhedra Library
site: http://bugseng.com/products/ppl/ . */

package parma_polyhedra_library;

import javax.management.RuntimeErrorException;

//! A line, ray, point or closure point.
/*! \ingroup PPL_Java_interface
  An object of the class Generator is one of the following:
  - a line;
  - a ray;
  - a point;
  - a closure point.
*/
public class Generator {
    //! The generator type.
    private Generator_Type gt;

    //! The linear expression.
    private Linear_Expression le;

    //! The divisor (valid if the generator is a point or a closure point).
    private Coefficient div;

    /*! \brief
      Builds a generator of type \p g_type,
      stealing the coefficients from \p e.
    */
    private Generator(Linear_Expression e, Generator_Type g_type) {
        le = e.clone();
        gt = g_type;
    }

    //! Returns the closure point at \p e / \p d.
    /*!
      \exception RuntimeErrorException
      Thrown if \p d is zero.
    */
    public static Generator closure_point(Linear_Expression e, Coefficient d) {
        if (d.getBigInteger().equals(java.math.BigInteger.ZERO)) {
            Error cause = new Error("parma_polyhedra_library.Generator::"
                                    + "Generator(e, d):\n"
                                    + "the divisor can not be zero.");
            throw new RuntimeErrorException(cause);
        }
        Generator g = new Generator(e, Generator_Type.CLOSURE_POINT);
        g.div = new Coefficient(d);
        return g;
    }

    //! Returns the line of direction \p e.
    /*!
      \exception RuntimeErrorException
      Thrown if the homogeneous part of \p e represents the origin of
      the vector space.
    */
    public static Generator line(Linear_Expression e) {
        return new Generator(e, Generator_Type.LINE);
    }

    //! Returns the point at \p e / \p d.
    /*!
      \exception RuntimeErrorException
      Thrown if \p d is zero.
    */
    public static Generator point(Linear_Expression e, Coefficient d) {
        if (d.getBigInteger().equals(java.math.BigInteger.ZERO)) {
            Error cause = new Error("parma_polyhedra_library.Generator::"
                                    + "Generator(e, d):\n"
                                    + "the divisor can not be zero.");
            throw new RuntimeErrorException(cause);
        }

        Generator g = new Generator(e, Generator_Type.POINT);
        g.div = new Coefficient(d);
        return g;
    }

    //! Returns the ray of direction \p e.
    /*!
      \exception RuntimeErrorException
      Thrown if the homogeneous part of \p e represents the origin of
      the vector space.
    */
    public static Generator ray(Linear_Expression e) {
        return new Generator(e, Generator_Type.RAY);
    }

    //! Returns the generator type.
    public Generator_Type type() {
        return gt;
    }

    //! Returns the linear expression in \p this.
    public Linear_Expression linear_expression() {
        return le;
    }

    //! If \p this is either a point or a closure point, returns its divisor.
    /*!
      \exception RuntimeErrorException
      Thrown if \p this is neither a point nor a closure point.
    */
    public Coefficient divisor() {
        if (this.gt == Generator_Type.POINT
            || this.gt == Generator_Type.CLOSURE_POINT)
            return div;
        Error cause = new Error("parma_polyhedra_library.Generator::divisor:\n"
                                + "this is neither a point"
                                + " nor a closure point.");
        throw new RuntimeErrorException(cause);
    }

    //! Returns an ascii formatted internal representation of \p this.
    public native String ascii_dump();

    //! Returns a string representation of \p this.
    public native String toString();

    private static native void initIDs();
    static {
        initIDs();
    }
}