head	1.31;
access;
symbols
	r2_1:1.30
	r2_0:1.30
	r1_1_beta:1.29
	r1_1_alpha:1.28
	r1_0:1.28
	r0_11:1.27
	r0_10:1.27
	r0_9:1.27
	Eglin_alpha_1:1.24;
locks; strict;
comment	@// @;


1.31
date	94.09.13.19.14.05;	author ljr;	state Exp;
branches;
next	1.30;

1.30
date	94.08.18.23.39.28;	author thoth;	state Exp;
branches;
next	1.29;

1.29
date	94.07.25.16.58.52;	author thoth;	state Exp;
branches;
next	1.28;

1.28
date	94.05.08.19.35.40;	author thoth;	state Exp;
branches;
next	1.27;

1.27
date	93.11.17.18.02.03;	author thoth;	state Exp;
branches;
next	1.26;

1.26
date	93.08.08.13.21.39;	author thoth;	state Exp;
branches;
next	1.25;

1.25
date	93.07.15.11.35.28;	author thoth;	state Exp;
branches;
next	1.24;

1.24
date	93.05.26.16.51.48;	author thoth;	state Exp;
branches;
next	1.23;

1.23
date	93.05.19.14.46.01;	author thoth;	state Exp;
branches;
next	1.22;

1.22
date	93.04.19.23.27.50;	author thoth;	state Exp;
branches;
next	1.21;

1.21
date	93.02.12.16.28.04;	author thoth;	state Exp;
branches;
next	1.20;

1.20
date	93.01.20.11.38.56;	author thoth;	state Exp;
branches;
next	1.19;

1.19
date	92.12.16.14.48.26;	author thoth;	state Exp;
branches;
next	1.18;

1.18
date	92.12.07.12.05.16;	author thoth;	state Exp;
branches;
next	1.17;

1.17
date	92.11.11.12.12.03;	author thoth;	state Exp;
branches;
next	1.16;

1.16
date	92.11.04.12.02.26;	author thoth;	state Exp;
branches;
next	1.15;

1.15
date	92.10.25.20.54.13;	author thoth;	state Exp;
branches;
next	1.14;

1.14
date	92.10.22.15.13.21;	author thoth;	state Exp;
branches;
next	1.13;

1.13
date	92.09.30.10.41.19;	author thoth;	state Exp;
branches;
next	1.12;

1.12
date	92.09.20.17.37.49;	author thoth;	state Exp;
branches;
next	1.11;

1.11
date	92.09.20.14.08.07;	author thoth;	state Exp;
branches;
next	1.10;

1.10
date	92.09.03.13.31.13;	author thoth;	state Exp;
branches;
next	1.9;

1.9
date	92.08.26.14.52.03;	author thoth;	state Exp;
branches;
next	1.8;

1.8
date	92.08.25.15.34.07;	author thoth;	state Exp;
branches;
next	1.7;

1.7
date	92.08.23.13.30.19;	author thoth;	state Exp;
branches;
next	1.6;

1.6
date	92.08.20.11.14.00;	author thoth;	state Exp;
branches;
next	1.5;

1.5
date	92.08.14.15.44.56;	author thoth;	state Exp;
branches;
next	1.4;

1.4
date	92.07.30.16.38.59;	author jnw;	state Exp;
branches;
next	1.3;

1.3
date	92.07.26.16.31.23;	author thoth;	state Exp;
branches;
next	1.2;

1.2
date	92.07.21.11.28.52;	author thoth;	state Exp;
branches;
next	1.1;

1.1
date	92.07.16.11.54.54;	author thoth;	state Exp;
branches;
next	;


desc
@The Yoder IntPointSet data structure
@


1.31
log
@made IA_YoderIPS::interval class definition public to appease BC++
@
text
@// Emacs: -*- C++ -*-

//
//	Copyright 1993, Center for Computer Vision and Visualization,
//	University of Florida.  All rights reserved.
//


// 
// $Log: YoderIPS.h,v $
// Revision 1.30  1994/08/18  23:39:28  thoth
// DOS-inspired filename rework
//
// Revision 1.29  1994/07/25  16:58:52  thoth
// \Name sanitization
//
// Revision 1.28  1994/05/08  19:35:40  thoth
// New pointset concatenation capability.
// New intpointset decomposition capability.
//
// Revision 1.27  1993/11/17  18:02:03  thoth
// extensivep() is now extensive()
//
// Revision 1.26  1993/08/08  13:21:39  thoth
// new IA_Set template specialization architecture.
//
// Revision 1.25  93/07/15  11:35:28  thoth
// Add support for iterator virtual method.
// 
// Revision 1.24  93/05/26  16:51:48  thoth
// Copyright Notices
// 
// Revision 1.23  93/05/19  14:46:01  thoth
// LatticeRelation is now in IA::
// 
// Revision 1.22  93/04/19  23:27:50  thoth
// Convert BaseIPS to IA_BasePS<IA_IntPoint>
// 
// Revision 1.21  93/02/12  16:28:04  thoth
// more IA_ prefixes.
// 
// Revision 1.20  93/01/20  11:38:56  thoth
// Yoder hash code is now cached.
// 
// Revision 1.19  92/12/16  14:48:26  thoth
// conversion to IA_ mostly complete
// 
// Revision 1.18  92/12/07  12:05:16  thoth
// new IntPoint index(unsigned) operation for use with "other" iterators.
// 
// Revision 1.17  92/11/11  12:12:03  thoth
// added another restriction utility.
// 
// Revision 1.16  92/11/04  12:02:26  thoth
// new image extension support routines.
// 
// Revision 1.15  92/10/25  20:54:13  thoth
// changed argument passing on set restriction routines.
// 
// Revision 1.14  92/10/22  15:13:21  thoth
// pointset restriction utilities.
// 
// Revision 1.13  92/09/30  10:41:19  thoth
// type() system now based on address of static data member.
// infimum & supremum virtuals now inf & sup.
// contains now accepts const Point<>&.
// 
// Revision 1.12  92/09/20  17:37:49  thoth
// fixed spelling error
// 
// Revision 1.11  92/09/20  14:08:07  thoth
// new infimum and supremum methods for point sets.
// 
// Revision 1.10  92/09/03  13:31:13  thoth
// hash_self now deals with unsigneds
// 
// Revision 1.9  92/08/26  14:52:03  thoth
// mo' better comments
// 
// Revision 1.8  92/08/25  15:34:07  thoth
// new offsetted virtual functions for set translation
// set difference is operator/, not -
// lattice relationship is determinable on Yoders using compare() friend
// 
// Revision 1.7  92/08/23  13:30:19  thoth
// CFrontified version
// 
// 

#ifndef YoderIPS_h_
#define YoderIPS_h_

#ifdef IA_PRII
#pragma interface
#endif

#include "IntPoint.h"
#include "IntPS.h"
#include "BasePS.h"
#include "BoxyIPS.h"
#include "SetStructure.h"

class IA_YoderIPSIter;

class IA_YoderIPS: public IA_BasePS<IA_Point<int> > {
private:
    static char	type_;
public:
    /* A shadow cylinder is a set of points that are identical except for
       their first coordinate, and for each value of the first coordinate,
       every shadow is represented by a point in the set.
       */
    class interval {
    public:
	// The last coordinate of this shadow cylinder
	int	last;
	// The index (relative to the point set) of the point after
	// the last point in this shadow cylinder.
	unsigned	count_last;
	// The shape of the shadow.  One special IntPointSets:
	// WhiteHole represents a 0-dimensional IntPointSet that contains
	// the 0-dimensional IntPoint.
	IA_Set<IA_Point<int> >	shadow;
    };
protected:
    // the last coordinate before the shadow cylinders begin.
    int	lastbefore;

    // a vector of shadow cylinders
    // adjacent shadows must not be equal
    interval *slices;
    unsigned	nslices;

    static void interval_BlT(interval *source, interval *dest, unsigned count);
    unsigned cylinder_index(int coord) const;
    int last_before(unsigned idx) const { return idx?
					  slices[idx-1].last:
					  lastbefore; }

    void compress_duplicates();
    void compute_count_last();
    void compute_hash_cache();
    void canonicalize();

    // the following are subfunctions of the binary set operations |,^,&,/

    static void union_nonoverlapping
	(const IA_YoderIPS &first, const IA_YoderIPS &second, IA_YoderIPS &dest);
    static void copy_nonoverlapping_leader
	(const IA_YoderIPS &first, unsigned *f_idx, const IA_YoderIPS &second,
	 IA_YoderIPS &dest);
    static void copy_nonoverlapping_trailer
	(const IA_YoderIPS &source, unsigned *s_idx, IA_YoderIPS &dest);
    static void burn_nonoverlapping_leader
	(const IA_YoderIPS &first, unsigned *f_idx, const IA_YoderIPS &second,
	 IA_YoderIPS &dest);
    static void merge_overlapping_cylinders
      (const IA_YoderIPS &first, unsigned *f_idx,
       const IA_YoderIPS &second, unsigned *s_idx,
       IA_YoderIPS &dest, IA_Set<IA_Point<int> >(*f)(const IA_Set<IA_Point<int> >&,const IA_Set<IA_Point<int> >&));

    static void copy_nonoverlapping_leader
    (const IA_YoderIPS &first, unsigned *f_idx, const IA_YoderIPS &second,
     IA_YoderIPS &dest, IA_SetStructure *ss_result, IA_SetStructure sub);
    static void burn_nonoverlapping_leader
    (const IA_YoderIPS &first, unsigned *f_idx, const IA_YoderIPS &second,
     IA_YoderIPS &dest, IA_SetStructure *ss_result, IA_SetStructure sub);
    static void merge_overlapping_cylinders
    (const IA_YoderIPS &first, unsigned *f_idx,
     const IA_YoderIPS &second, unsigned *s_idx,
     IA_YoderIPS &dest, IA_SetStructure*ss_result,
     IA_Set<IA_Point<int> >(*f)(const IA_Set<IA_Point<int> >&,const IA_Set<IA_Point<int> >&, IA_SetStructure*));
    static void copy_nonoverlapping_trailer
    (const IA_YoderIPS &first, unsigned *f_idx,
     IA_YoderIPS &dest, IA_SetStructure *, IA_SetStructure sub);
    static void burn_nonoverlapping_trailer
    (const IA_YoderIPS &first, unsigned *f_idx, const IA_YoderIPS &dest,
     IA_SetStructure *ss_result, IA_SetStructure sub);


    // protected constructor to create a blank Yoder.  It is used by the
    // binary set operations
    IA_YoderIPS(unsigned dim) :IA_BasePS<IA_Point<int> >(dim) { nslices=0; slices=0; lastbefore=0; }
private:
    // private constructor that takes a sorted array of IntPoints of
    // length len and constructs a Yoder from them.  It is private because
    // it has many preconditions that make it "unsafe" for the general public.
    IA_YoderIPS(const IA_Point<int> *, unsigned len, unsigned offset=0);

    // private constructor that increases the dimension of a pointset
    // by one by extending the input pointset into a cylinder
    IA_YoderIPS(int b1, int b2, const IA_Set<IA_Point<int> > &);

public:

    IA_YoderIPS(const IA_BoxyIPS&);
    ~IA_YoderIPS();
    IA_YoderIPS(const IA_YoderIPS&);
    IA_YoderIPS& operator=(const IA_YoderIPS&);

    int equal(IA_BasePS<IA_Point<int> >*) const;
    unsigned hash_self(unsigned) const;
private:
    unsigned hash_cache;
public:
    int operator==(const IA_YoderIPS&) const;

    static IA::Type s_type() { return &type_; }
    IA::Type type() const { return &type_; }

    int contains(const IA_Point<int>&) const;
    unsigned index(const IA_Point<int>&) const;
    IA_Point<int> index(unsigned) const;

    IA_Point<int> min() const;
    IA_Point<int> max() const;
    IA_Point<int> inf() const;
    IA_Point<int> sup() const;
    IA_Point<int> choice() const {return this->min();}

    unsigned card() const { return nslices ? slices[nslices-1].count_last :0; }
    int empty() const;
    IA_BasePS<IA_Point<int> > *offsetted(const IA_Point<int>&) const;
    int extensive() const { return 1; }
    IA_BasePSIter<IA_Point<int> > *iterator() const;

    void output (ostream&, unsigned =0) const;

    // extra functions
    int isboxy() const;

    // binary set operations
    IA_YoderIPS operator|(const IA_YoderIPS&) const;
    IA_YoderIPS operator&(const IA_YoderIPS&) const;
    IA_YoderIPS operator^(const IA_YoderIPS&) const;
    IA_YoderIPS operator/(const IA_YoderIPS&) const;

    IA_YoderIPS intersect_with_structure(const IA_YoderIPS&, IA_SetStructure*) const;
    IA_YoderIPS intersect_with_dualstruct(const IA_YoderIPS&, IA_SetStructure*) const;
    IA_YoderIPS union_with_structure(const IA_YoderIPS&, IA_SetStructure*) const;

    // This function can return
    // NO_REL, P_SUBSET, P_SUPERSET, or EQUAL
    // It will abort if internal inconsistencies would cause it
    // to return otherwise.
    friend IA::LatticeRelation
	compare(const IA_YoderIPS&, const IA_YoderIPS&);

    friend IA_Set<IA_Point<int> > concat(int, const IA_Set<IA_Point<int> >&);

    friend class IA_Set<IA_Point<int> >;
    friend class IA_YoderIPSIter;
    friend class IA_PointSetDecomposition;
};

#endif
@


1.30
log
@DOS-inspired filename rework
@
text
@d11 3
d108 1
a108 1
protected:
d125 1
a125 1

@


1.29
log
@\Name sanitization
@
text
@d11 3
d95 1
a95 1
#include "IntPointSet.h"
@


1.28
log
@New pointset concatenation capability.
New intpointset decomposition capability.
@
text
@d11 4
d99 1
a99 1
class IA_YoderIPS: public IA_BasePS<IA_IntPoint> {
d177 1
a177 1
    IA_YoderIPS(unsigned dim) :IA_BasePS<IA_IntPoint>(dim) { nslices=0; slices=0; lastbefore=0; }
d182 1
a182 1
    IA_YoderIPS(const IA_IntPoint *, unsigned len, unsigned offset=0);
d195 1
a195 1
    int equal(IA_BasePS<IA_IntPoint>*) const;
d202 2
a203 2
    static IA_PointSetType s_type() { return &type_; }
    IA_PointSetType type() const { return &type_; }
d205 9
a213 9
    int contains(const IA_IntPoint&) const;
    unsigned index(const IA_IntPoint&) const;
    IA_IntPoint index(unsigned) const;

    IA_IntPoint min() const;
    IA_IntPoint max() const;
    IA_IntPoint inf() const;
    IA_IntPoint sup() const;
    IA_IntPoint choice() const {return this->min();}
d217 1
a217 1
    IA_BasePS<IA_IntPoint> *offsetted(const IA_IntPoint&) const;
d219 1
a219 1
    IA_BasePSIter<IA_IntPoint> *iterator() const;
d245 1
a245 1
    friend class IA_Set<IA_IntPoint>;
@


1.27
log
@extensivep() is now extensive()
@
text
@d11 3
d113 1
a113 1
	IA_IntPointSet	shadow;
d150 1
a150 1
       IA_YoderIPS &dest, IA_IntPointSet(*f)(const IA_IntPointSet&,const IA_IntPointSet&));
d162 1
a162 1
     IA_IntPointSet(*f)(const IA_IntPointSet&,const IA_IntPointSet&, IA_SetStructure*));
d179 5
d239 2
d243 1
@


1.26
log
@new IA_Set template specialization architecture.
@
text
@d10 4
a13 1
// $Log:	YoderIPS.h,v $
d206 1
a206 1
    int extensivep() const { return 1; }
@


1.25
log
@Add support for iterator virtual method.
@
text
@d11 3
d228 1
a228 1
    friend class IA_IntPointSet;
@


1.24
log
@Copyright Notices
@
text
@d11 3
d201 1
@


1.23
log
@LatticeRelation is now in IA::
@
text
@d3 6
d11 3
@


1.22
log
@Convert BaseIPS to IA_BasePS<IA_IntPoint>
@
text
@d5 3
d209 1
a209 1
    friend IA_IntPointSet::LatticeRelation
@


1.21
log
@more IA_ prefixes.
@
text
@d5 3
d63 1
d65 1
a65 1
#include "BaseIPS.h"
d71 1
a71 1
class IA_YoderIPS: public BaseIPS {
d149 1
a149 1
    IA_YoderIPS(unsigned dim) :BaseIPS(dim) { nslices=0; slices=0; lastbefore=0; }
d162 1
a162 1
    int equal(BaseIPS*) const;
d184 1
a184 1
    BaseIPS *offsetted(const IA_IntPoint&) const;
@


1.20
log
@Yoder hash code is now cached.
@
text
@d5 3
d165 2
a166 2
    static PointSetType s_type() { return &type_; }
    PointSetType type() const { return &type_; }
@


1.19
log
@conversion to IA_ mostly complete
@
text
@d5 3
d101 1
d157 3
@


1.18
log
@new IntPoint index(unsigned) operation for use with "other" iterators.
@
text
@d5 3
d59 1
a59 1
class YoderIPSIter;
d61 1
a61 1
class YoderIPS: public BaseIPS {
d79 1
a79 1
	IntPointSet	shadow;
d103 1
a103 1
	(const YoderIPS &first, const YoderIPS &second, YoderIPS &dest);
d105 2
a106 2
	(const YoderIPS &first, unsigned *f_idx, const YoderIPS &second,
	 YoderIPS &dest);
d108 1
a108 1
	(const YoderIPS &source, unsigned *s_idx, YoderIPS &dest);
d110 2
a111 2
	(const YoderIPS &first, unsigned *f_idx, const YoderIPS &second,
	 YoderIPS &dest);
d113 3
a115 3
      (const YoderIPS &first, unsigned *f_idx,
       const YoderIPS &second, unsigned *s_idx,
       YoderIPS &dest, IntPointSet(*f)(const IntPointSet&,const IntPointSet&));
d118 2
a119 2
    (const YoderIPS &first, unsigned *f_idx, const YoderIPS &second,
     YoderIPS &dest, SetStructure *ss_result, SetStructure sub);
d121 2
a122 2
    (const YoderIPS &first, unsigned *f_idx, const YoderIPS &second,
     YoderIPS &dest, SetStructure *ss_result, SetStructure sub);
d124 4
a127 4
    (const YoderIPS &first, unsigned *f_idx,
     const YoderIPS &second, unsigned *s_idx,
     YoderIPS &dest, SetStructure*ss_result,
     IntPointSet(*f)(const IntPointSet&,const IntPointSet&, SetStructure*));
d129 2
a130 2
    (const YoderIPS &first, unsigned *f_idx,
     YoderIPS &dest, SetStructure *, SetStructure sub);
d132 2
a133 2
    (const YoderIPS &first, unsigned *f_idx, const YoderIPS &dest,
     SetStructure *ss_result, SetStructure sub);
d138 1
a138 1
    YoderIPS(unsigned dim) :BaseIPS(dim) { nslices=0; slices=0; lastbefore=0; }
d143 1
a143 1
    YoderIPS(const IntPoint *, unsigned len, unsigned offset=0);
d146 4
a149 4
    YoderIPS(const BoxyIPS&);
    ~YoderIPS();
    YoderIPS(const YoderIPS&);
    YoderIPS& operator=(const YoderIPS&);
d153 1
a153 1
    int operator==(const YoderIPS&) const;
d158 3
a160 3
    int contains(const IntPoint&) const;
    unsigned index(const IntPoint&) const;
    IntPoint index(unsigned) const;
d162 5
a166 5
    IntPoint min() const;
    IntPoint max() const;
    IntPoint inf() const;
    IntPoint sup() const;
    IntPoint choice() const {return this->min();}
d170 1
a170 1
    BaseIPS *offsetted(const IntPoint&) const;
d179 4
a182 4
    YoderIPS operator|(const YoderIPS&) const;
    YoderIPS operator&(const YoderIPS&) const;
    YoderIPS operator^(const YoderIPS&) const;
    YoderIPS operator/(const YoderIPS&) const;
d184 3
a186 3
    YoderIPS intersect_with_structure(const YoderIPS&, SetStructure*) const;
    YoderIPS intersect_with_dualstruct(const YoderIPS&, SetStructure*) const;
    YoderIPS union_with_structure(const YoderIPS&, SetStructure*) const;
d192 2
a193 2
    friend IntPointSet::LatticeRelation
	compare(const YoderIPS&, const YoderIPS&);
d195 2
a196 2
    friend class IntPointSet;
    friend class YoderIPSIter;
@


1.17
log
@added another restriction utility.
@
text
@d5 3
d157 1
@


1.16
log
@new image extension support routines.
@
text
@d5 3
d112 2
a113 5
	(const YoderIPS &first, unsigned *f_idx, const YoderIPS &second,
	 YoderIPS &dest, SetStructure *, SetStructure sub);
    static void copy_nonoverlapping_trailer
	(const YoderIPS &first, unsigned *f_idx,
	 YoderIPS &dest, SetStructure *, SetStructure sub);
d115 2
a116 2
	(const YoderIPS &first, unsigned *f_idx, const YoderIPS &second,
	 YoderIPS &dest, SetStructure *);
d118 7
a124 4
      (const YoderIPS &first, unsigned *f_idx,
       const YoderIPS &second, unsigned *s_idx,
       YoderIPS &dest, SetStructure*,
       IntPointSet(*f)(const IntPointSet&,const IntPointSet&, SetStructure*));
d126 2
a127 2
    (const YoderIPS &first, unsigned *f_idx,
     const YoderIPS &dest, SetStructure *ss_result);
d178 1
@


1.15
log
@changed argument passing on set restriction routines.
@
text
@d5 3
d108 6
d175 1
@


1.14
log
@pointset restriction utilities.
@
text
@d5 3
d112 1
a112 1
       SetStructure(*f)(const IntPointSet&,const IntPointSet&, IntPointSet*));
d165 1
a165 3
    SetStructure intersect_with_structure(const YoderIPS&, YoderIPS*) const;
    friend SetStructure intersect_with_structure
     (const IntPointSet &lhs, const IntPointSet &rhs, IntPointSet *result);
@


1.13
log
@type() system now based on address of static data member.
infimum & supremum virtuals now inf & sup.
contains now accepts const Point<>&.
@
text
@d5 5
d42 1
d77 3
d102 13
d161 4
@


1.12
log
@fixed spelling error
@
text
@d5 3
d41 2
d112 2
a113 1
    PointSetType type() const { return YODER; }
d115 1
a115 1
    int contains(IntPoint) const;
d120 2
a121 2
    IntPoint infimum() const;
    IntPoint supremum() const;
@


1.11
log
@new infemum and supremum methods for point sets.
@
text
@d5 3
d114 1
a114 1
    IntPoint infemum() const;
@


1.10
log
@hash_self now deals with unsigneds
@
text
@d5 3
d111 2
@


1.9
log
@mo' better comments
@
text
@d5 3
d98 1
a98 1
    int hash_self(int) const;
@


1.8
log
@new offsetted virtual functions for set translation
set difference is operator/, not -
lattice relationship is determinable on Yoders using compare() friend
@
text
@d5 5
d55 1
a55 1
    static void interval_BlT(interval *source, interval*dest, unsigned count);
d57 1
d62 2
d79 2
d83 3
d117 1
a117 1
    // union operator
d123 4
@


1.7
log
@CFrontified version
@
text
@d5 2
d8 1
d96 1
d108 4
a111 1
    YoderIPS operator-(const YoderIPS&) const;
@


1.6
log
@New constructor to make IntPointSets from arrays of Points
BaseIPS now requires the dimension upon construction
Binary operations are now much less monolithic
Canonicalization idiom improved
More boolean operations between IntPointSets, intersection,
symmetric+asymmetric difference.
@
text
@a4 2
// Revision 1.5  92/08/14  15:44:56  thoth
// Added an index(IntPoint) function to the IntPointSet
a5 13
// Revision 1.4  92/07/30  16:38:59  jnw
// Added intersection member function
// 
// Revision 1.3  92/07/26  16:31:23  thoth
// switched the union operation to overload the bitwise operator.
// 
// Revision 1.2  92/07/21  11:28:52  thoth
// fleshed out the preliminary design.
// 
// Revision 1.1  92/07/16  11:54:54  thoth
// Initial revision
// 
// 
d10 1
d12 1
@


1.5
log
@Added an index(IntPoint) function to the IntPointSet
@
text
@d5 3
d62 2
d66 18
a83 1
    YoderIPS() { dimen = 0; nslices=0; slices=0; lastbefore=0; }
d85 1
a85 1
    YoderIPS(int, int, const IntPointSet&);
d104 1
a104 1
    unsigned card() const { return slices[nslices-1].count_last; }
d108 2
d116 2
@


1.4
log
@Added intersection member function
@
text
@d5 3
d28 2
d58 1
d76 1
d94 1
@


1.3
log
@switched the union operation to overload the bitwise operator.
@
text
@d5 3
d84 1
@


1.2
log
@fleshed out the preliminary design.
@
text
@d5 3
d80 1
a80 1
    YoderIPS operator||(const YoderIPS&) const;
@


1.1
log
@Initial revision
@
text
@d4 3
a6 1
// $Log$
d8 1
d15 1
d17 1
d25 2
a26 1
    struct interval {
d29 2
a30 2
	// The index (relative to the point set) of the last point
	// in this shadow shadow cylinder.
d32 3
a34 3
	// The shape of the shadow.  Two special IntPointSets:
	// WhiteHole and BlackHole represent 0-dimensional IntPointSets
	// that are there, or not-there, respectively.
d37 7
a43 1
    struct interval *slices;
d45 5
d52 1
d67 1
a67 1
    IntPoint choice() const;
d69 1
a69 1
    unsigned card() const;
d74 7
a80 2
    int isboxy();
}
@
