| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- // Filename: lvecBase2_src.h
- // Created by: drose (08Mar00)
- //
- ////////////////////////////////////////////////////////////////////
- //
- // PANDA 3D SOFTWARE
- // Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved
- //
- // All use of this software is subject to the terms of the Panda 3d
- // Software license. You should have received a copy of this license
- // along with this source code; you will also find a current copy of
- // the license at http://etc.cmu.edu/panda3d/docs/license/ .
- //
- // To contact the maintainers of this program write to
- // [email protected] .
- //
- ////////////////////////////////////////////////////////////////////
- //typedef struct {FLOATTYPE _0, _1} FLOATNAME(data);
- ////////////////////////////////////////////////////////////////////
- // Class : LVecBase2
- // Description : This is the base class for all two-component
- // vectors and points.
- ////////////////////////////////////////////////////////////////////
- class EXPCL_PANDA FLOATNAME(LVecBase2) {
- PUBLISHED:
- typedef const FLOATTYPE *iterator;
- typedef const FLOATTYPE *const_iterator;
- INLINE_LINMATH FLOATNAME(LVecBase2)();
- INLINE_LINMATH FLOATNAME(LVecBase2)(const FLOATNAME(LVecBase2) ©);
- INLINE_LINMATH FLOATNAME(LVecBase2) &operator = (const FLOATNAME(LVecBase2) ©);
- INLINE_LINMATH FLOATNAME(LVecBase2) &operator = (FLOATTYPE fill_value);
- INLINE_LINMATH FLOATNAME(LVecBase2)(FLOATTYPE fill_value);
- INLINE_LINMATH FLOATNAME(LVecBase2)(FLOATTYPE x, FLOATTYPE y);
- ALLOC_DELETED_CHAIN(FLOATNAME(LVecBase2));
- INLINE_LINMATH static const FLOATNAME(LVecBase2) &zero();
- INLINE_LINMATH static const FLOATNAME(LVecBase2) &unit_x();
- INLINE_LINMATH static const FLOATNAME(LVecBase2) &unit_y();
- INLINE_LINMATH ~FLOATNAME(LVecBase2)();
- INLINE_LINMATH FLOATTYPE operator [](int i) const;
- INLINE_LINMATH FLOATTYPE &operator [](int i);
- INLINE_LINMATH bool is_nan() const;
- INLINE_LINMATH FLOATTYPE get_cell(int i) const;
- INLINE_LINMATH FLOATTYPE get_x() const;
- INLINE_LINMATH FLOATTYPE get_y() const;
- INLINE_LINMATH void set_cell(int i, FLOATTYPE value);
- INLINE_LINMATH void set_x(FLOATTYPE value);
- INLINE_LINMATH void set_y(FLOATTYPE value);
- // These next functions add to an existing value.
- // i.e. foo.set_x(foo.get_x() + value)
- // These are useful to reduce overhead in scripting
- // languages:
- INLINE_LINMATH void add_to_cell(int i, FLOATTYPE value);
- INLINE_LINMATH void add_x(FLOATTYPE value);
- INLINE_LINMATH void add_y(FLOATTYPE value);
- INLINE_LINMATH const FLOATTYPE *get_data() const;
- INLINE_LINMATH int get_num_components() const;
- public:
- INLINE_LINMATH iterator begin();
- INLINE_LINMATH iterator end();
- INLINE_LINMATH const_iterator begin() const;
- INLINE_LINMATH const_iterator end() const;
- PUBLISHED:
- INLINE_LINMATH void fill(FLOATTYPE fill_value);
- INLINE_LINMATH void set(FLOATTYPE x, FLOATTYPE y);
- INLINE_LINMATH FLOATTYPE dot(const FLOATNAME(LVecBase2) &other) const;
- INLINE_LINMATH bool operator < (const FLOATNAME(LVecBase2) &other) const;
- INLINE_LINMATH bool operator == (const FLOATNAME(LVecBase2) &other) const;
- INLINE_LINMATH bool operator != (const FLOATNAME(LVecBase2) &other) const;
- INLINE_LINMATH int compare_to(const FLOATNAME(LVecBase2) &other) const;
- INLINE_LINMATH int compare_to(const FLOATNAME(LVecBase2) &other,
- FLOATTYPE threshold) const;
- INLINE_LINMATH size_t get_hash() const;
- INLINE_LINMATH size_t get_hash(FLOATTYPE threshold) const;
- INLINE_LINMATH size_t add_hash(size_t hash) const;
- INLINE_LINMATH size_t add_hash(size_t hash, FLOATTYPE threshold) const;
- INLINE_LINMATH FLOATNAME(LVecBase2) operator - () const;
- INLINE_LINMATH FLOATNAME(LVecBase2)
- operator + (const FLOATNAME(LVecBase2) &other) const;
- INLINE_LINMATH FLOATNAME(LVecBase2)
- operator - (const FLOATNAME(LVecBase2) &other) const;
- INLINE_LINMATH FLOATNAME(LVecBase2) operator * (FLOATTYPE scalar) const;
- INLINE_LINMATH FLOATNAME(LVecBase2) operator / (FLOATTYPE scalar) const;
- INLINE_LINMATH void operator += (const FLOATNAME(LVecBase2) &other);
- INLINE_LINMATH void operator -= (const FLOATNAME(LVecBase2) &other);
- INLINE_LINMATH void operator *= (FLOATTYPE scalar);
- INLINE_LINMATH void operator /= (FLOATTYPE scalar);
- INLINE_LINMATH FLOATNAME(LVecBase2) fmax(const FLOATNAME(LVecBase2) &other);
- INLINE_LINMATH FLOATNAME(LVecBase2) fmin(const FLOATNAME(LVecBase2) &other);
- INLINE_LINMATH bool almost_equal(const FLOATNAME(LVecBase2) &other,
- FLOATTYPE threshold) const;
- INLINE_LINMATH bool almost_equal(const FLOATNAME(LVecBase2) &other) const;
- INLINE_LINMATH void output(ostream &out) const;
- #ifdef HAVE_PYTHON
- INLINE_LINMATH void python_repr(ostream &out, const string &class_name) const;
- #endif
- public:
- INLINE_LINMATH void generate_hash(ChecksumHashGenerator &hashgen) const;
- INLINE_LINMATH void generate_hash(ChecksumHashGenerator &hashgen,
- FLOATTYPE threshold) const;
- public:
- union {
- FLOATTYPE data[2];
- struct {FLOATTYPE _0, _1;} v;
- } _v;
- private:
- static const FLOATNAME(LVecBase2) _zero;
- static const FLOATNAME(LVecBase2) _unit_x;
- static const FLOATNAME(LVecBase2) _unit_y;
- public:
- INLINE_LINMATH void write_datagram(Datagram &destination) const;
- INLINE_LINMATH void read_datagram(DatagramIterator &source);
- public:
- static TypeHandle get_class_type() {
- return _type_handle;
- }
- static void init_type();
- private:
- static TypeHandle _type_handle;
- };
- INLINE_LINMATH ostream &operator << (ostream &out, const FLOATNAME(LVecBase2) &vec) {
- vec.output(out);
- return out;
- }
- #include "lvecBase2_src.I"
|