1 /******************************************************************************
2  * Copyright (c) 2018, Connor Manning (connor@hobu.co)
3  *
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following
8  * conditions are met:
9  *
10  *     * Redistributions of source code must retain the above copyright
11  *       notice, this list of conditions and the following disclaimer.
12  *     * Redistributions in binary form must reproduce the above copyright
13  *       notice, this list of conditions and the following disclaimer in
14  *       the documentation and/or other materials provided
15  *       with the distribution.
16  *     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
17  *       names of its contributors may be used to endorse or promote
18  *       products derived from this software without specific prior
19  *       written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
28  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
29  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
30  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
31  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
32  * OF SUCH DAMAGE.
33  ****************************************************************************/
34 
35 #pragma once
36 
37 #include <string>
38 
39 #include <pdal/PointLayout.hpp>
40 #include <pdal/PointRef.hpp>
41 
42 namespace pdal
43 {
44 
45 class Loggable
46 {
47 public:
~Loggable()48     virtual ~Loggable() { }
49 
50     virtual std::string toString(std::string prefix) const = 0;
51 };
52 
53 class Filterable : public Loggable
54 {
55 public:
56     virtual bool operator()(const PointRef& pr) const = 0;
57 };
58 
59 class Comparable : public Loggable
60 {
61 public:
62     virtual bool operator()(double v) const = 0;
63 };
64 
65 template<typename T, typename... Args>
makeUnique(Args &&...args)66 std::unique_ptr<T> makeUnique(Args&&... args)
67 {
68     return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
69 }
70 
71 } // namespace pdal
72 
73