1 /****************************************************************************** 2 * Copyright (c) 2015, Hobu Inc. 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 <pdal/pdal_types.hpp> 38 #include <pdal/Dimension.hpp> 39 #include <pdal/PointLayout.hpp> 40 41 namespace pdal 42 { 43 44 class PDAL_DLL PointContainer 45 { 46 friend class PointView; 47 friend class PointRef; 48 private: 49 virtual void setFieldInternal(Dimension::Id dim, PointId idx, 50 const void *val) = 0; 51 virtual void getFieldInternal(Dimension::Id dim, PointId idx, 52 void *val) const = 0; swapItems(PointId id1,PointId id2)53 virtual void swapItems(PointId id1, PointId id2) 54 { throw pdal_error("Can't swap items in this container."); } setItem(PointId dst,PointId src)55 virtual void setItem(PointId dst, PointId src) 56 { throw pdal_error("Can't set item in this container."); } compare(Dimension::Id dim,PointId id1,PointId id2) const57 virtual bool compare(Dimension::Id dim, PointId id1, PointId id2) const 58 { throw pdal_error("Can't compare items in this container."); } getTemp(PointId id)59 virtual PointId getTemp(PointId id) 60 { return id; } freeTemp(PointId id)61 virtual void freeTemp(PointId id) 62 {} 63 public: 64 virtual PointLayoutPtr layout() const = 0; 65 }; 66 67 } // namespace pdal 68