/****************************************************************************** * Copyright (c) 2016, Hobu Inc. * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following * conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided * with the distribution. * * Neither the name of the Martin Isenburg or Iowa Department * of Natural Resources nor the names of its contributors may be * used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY * OF SUCH DAMAGE. ****************************************************************************/ #pragma once #include namespace pdal { namespace Dimension { class Detail { public: Detail() : m_id(Id::Unknown), m_offsetOrOrder(-1), m_type(Type::None) {} //NOTE - This is strange, but for some reason things run faster with // this NOOP virtual dtor. Perhaps it has something to do with // an inlining optimization or perhaps alignment (though a void * doesn't // cause the same performance improvement) It may help on no machine // except mine, but it doesn't hurt anything, either. virtual ~Detail() {} void setOffset(int offset) { m_offsetOrOrder = offset; } void setOrder(int order) { m_offsetOrOrder = order; } void setType(Type type) { m_type = type; } void setId(Id id) { m_id = id; } Id id() const { return m_id; } int offset() const { return m_offsetOrOrder; } int order() const { return m_offsetOrOrder; } Type type() const { return m_type; } size_t size() const { return Dimension::size(m_type); } BaseType base() const { return Dimension::base(m_type); } private: Id m_id; int m_offsetOrOrder; Type m_type; }; typedef std::vector DetailList; } // namespace Dimension } // namespace pdal