1// Copyright 2005 Google Inc. All Rights Reserved.
2
3#ifndef UTIL_GEOMETRY_S2POINTREGION_H__
4#define UTIL_GEOMETRY_S2POINTREGION_H__
5
6#include "base/logging.h"
7#include "base/macros.h"
8#include "s2.h"
9#include "s2region.h"
10
11// An S2PointRegion is a region that contains a single point. It is more
12// expensive than the raw S2Point type and is useful mainly for completeness.
13class S2PointRegion : public S2Region {
14 public:
15 // Create a region containing the given point, which must be unit length.
16 inline explicit S2PointRegion(S2Point const& point);
17
18 ~S2PointRegion();
19
20 S2Point const& point() const { return point_; }
21
22 ////////////////////////////////////////////////////////////////////////
23 // S2Region interface (see s2region.h for details):
24
25 virtual S2PointRegion* Clone() const;
26 virtual S2Cap GetCapBound() const;
27 virtual S2LatLngRect GetRectBound() const;
28 virtual bool Contains(S2Cell const& cell) const { return false; }
29 virtual bool MayIntersect(S2Cell const& cell) const;
30 virtual bool VirtualContainsPoint(S2Point const& p) const {
31 return Contains(p);
32 }
33 bool Contains(S2Point const& p) const { return (point_ == p); }
34 virtual void Encode(Encoder* const encoder) const;
35 virtual bool Decode(Decoder* const decoder);
36
37 private:
38 S2Point point_;
39
40 DISALLOW_EVIL_CONSTRUCTORS(S2PointRegion);
41};
42
43S2PointRegion::S2PointRegion(S2Point const& point) : point_(point) {
44 DCHECK(S2::IsUnitLength(point));
45}
46
47#endif // UTIL_GEOMETRY_S2POINTREGION_H__
48