Skip to content

Commit

Permalink
Merge branch 'main' into feature/preload-TREs
Browse files Browse the repository at this point in the history
  • Loading branch information
Dan Smith committed Dec 19, 2023
2 parents 1bc8428 + 8471010 commit a62d494
Show file tree
Hide file tree
Showing 87 changed files with 1,117 additions and 474 deletions.
10 changes: 5 additions & 5 deletions UnitTest/UnitTest.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@
<WarningLevel>Level4</WarningLevel>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>$(ProjectDir);$(SolutionDir)modules\c\nrt\include;$(SolutionDir)modules\c\nitf\include;$(SolutionDir)modules\c++\nitf\include;$(SolutionDir)modules\c\j2k\include;$(SolutionDir)modules\c;$(SolutionDir)modules\c++;$(SolutionDir)externals\coda-oss\modules\c++;$(SolutionDir)externals\coda-oss\out\install\$(Platform)-$(Configuration)\include;$(SolutionDir)out\install\$(Platform)-$(Configuration)\include;$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions);CODA_OSS_LIBRARY_SHARED=1</PreprocessorDefinitions>
<UseFullPaths>true</UseFullPaths>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<EnableEnhancedInstructionSet>AdvancedVectorExtensions2</EnableEnhancedInstructionSet>
Expand All @@ -84,7 +84,7 @@
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>$(ProjectDir);$(SolutionDir)modules\c\nrt\include;$(SolutionDir)modules\c\nitf\include;$(SolutionDir)modules\c++\nitf\include;$(SolutionDir)modules\c\j2k\include;$(SolutionDir)modules\c;$(SolutionDir)modules\c++;$(SolutionDir)externals\coda-oss\modules\c++;$(SolutionDir)externals\coda-oss\out\install\$(Platform)-$(Configuration)\include;$(SolutionDir)out\install\$(Platform)-$(Configuration)\include;$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions);CODA_OSS_LIBRARY_SHARED=1</PreprocessorDefinitions>
<UseFullPaths>true</UseFullPaths>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<EnableEnhancedInstructionSet>AdvancedVectorExtensions2</EnableEnhancedInstructionSet>
Expand Down Expand Up @@ -254,15 +254,15 @@
<ClInclude Include="TestCase.h" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\externals\coda-oss\modules\c++\coda-oss.vcxproj">
<Project>{9997e895-5161-4ddf-8f3f-099894cb2f21}</Project>
</ProjectReference>
<ProjectReference Include="..\modules\c++\nitf-c++.vcxproj">
<Project>{8f357a19-799e-4971-850e-3f28485c130b}</Project>
</ProjectReference>
<ProjectReference Include="..\modules\c\nitf-c.vcxproj">
<Project>{f06550ad-cfc7-40b8-8727-6c82c69a8982}</Project>
</ProjectReference>
<ProjectReference Include="..\modules\c\nitf\XML_DATA_CONTENT.vcxproj">
<Project>{78849481-d356-4cc7-b182-31c21f857ed1}</Project>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
Expand Down
11 changes: 3 additions & 8 deletions UnitTest/pch.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,20 +20,15 @@

// We're building in Visual Studio ... used to control where we get a little bit of config info
#define NITRO_PCH 1
#ifndef CODA_OSS_LIBRARY_SHARED
#define CODA_OSS_LIBRARY_SHARED 1
#endif

#include <import/nrt.h>
#include <import/nitf.h>
#include <nitf/TestingTest.h>

#include <nitf/coda-oss.hpp>
#pragma comment(lib, "io-c++")
#pragma comment(lib, "io-c++")
#pragma comment(lib, "except-c++")
#pragma comment(lib, "sys-c++")
#pragma comment(lib, "str-c++")
#pragma comment(lib, "sio.lite-c++.lib")
#pragma comment(lib, "math-c++")
#pragma comment(lib, "mt-c++")

#include <import/nitf.hpp>
#include <nitf/UnitTests.hpp>
Expand Down
4 changes: 2 additions & 2 deletions externals/coda-oss/UnitTest/UnitTest.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,13 @@
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<UseOfMfc>false</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<UseOfMfc>false</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
Expand Down Expand Up @@ -71,6 +69,7 @@
<ConformanceMode>true</ConformanceMode>
<AdditionalOptions>/Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions>
<EnableEnhancedInstructionSet>AdvancedVectorExtensions2</EnableEnhancedInstructionSet>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Expand All @@ -96,6 +95,7 @@
<ConformanceMode>true</ConformanceMode>
<AdditionalOptions>/Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions>
<EnableEnhancedInstructionSet>AdvancedVectorExtensions2</EnableEnhancedInstructionSet>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Expand Down
4 changes: 4 additions & 0 deletions externals/coda-oss/cmake/CodaBuild.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -128,8 +128,12 @@ macro(coda_initialize_build)
option(BUILD_SHARED_LIBS "Build shared libraries instead of static." OFF)
if(BUILD_SHARED_LIBS)
set(CODA_LIBRARY_TYPE "shared")
add_definitions(-DCODA_OSS_LIBRARY_SHARED=1)
add_definitions(-UCODA_OSS_LIBRARY_STATIC)
else()
set(CODA_LIBRARY_TYPE "static")
add_definitions(-DCODA_OSS_LIBRARY_STATIC=1)
add_definitions(-UCODA_OSS_LIBRARY_SHARED)
endif()

option(CODA_BUILD_TESTS "build tests" ON)
Expand Down
8 changes: 6 additions & 2 deletions externals/coda-oss/modules/c++/coda-oss.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
<ClInclude Include="coda_oss\include\coda_oss\bit.h" />
<ClInclude Include="coda_oss\include\coda_oss\CPlusPlus.h" />
<ClInclude Include="coda_oss\include\coda_oss\cstddef.h" />
<ClInclude Include="coda_oss\include\coda_oss\mdspan.h" />
<ClInclude Include="coda_oss\include\coda_oss\mdspan_.h" />
<ClInclude Include="coda_oss\include\coda_oss\namespace_.h" />
<ClInclude Include="coda_oss\include\coda_oss\numbers.h" />
<ClInclude Include="coda_oss\include\coda_oss\optional.h" />
Expand Down Expand Up @@ -509,6 +511,7 @@
<None Include="std\include\std\bit" />
<None Include="std\include\std\cstddef" />
<None Include="std\include\std\filesystem" />
<None Include="std\include\std\mdspan" />
<None Include="std\include\std\memory" />
<None Include="std\include\std\numbers" />
<None Include="std\include\std\optional" />
Expand Down Expand Up @@ -566,7 +569,7 @@
<ClCompile>
<WarningLevel>Level4</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_LIB;%(PreprocessorDefinitions);CODA_OSS_EXPORTS;CODA_OSS_DLL;MT_DEFAULT_PINNING=0;RE_ENABLE_STD_REGEX=1</PreprocessorDefinitions>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions);MT_DEFAULT_PINNING=0;RE_ENABLE_STD_REGEX=1;CODA_OSS_EXPORTS;CODA_OSS_LIBRARY_SHARED=1</PreprocessorDefinitions>
<ForcedIncludeFiles>pch.h</ForcedIncludeFiles>
<AdditionalIncludeDirectories>cli\include;coda_oss\include;config\include;dbi\include;except\include;gsl\include;hdf5.lite\include;io\include;logging\include;math\include;math.linear\include;math.poly\include;mem\include;mt\include;net\include;net.ssl\include;plugin\include;polygon\include;re\include;sio.lite\include;std\include;str\include;sys\include;tiff\include;types\include;unique\include;units\include;xml.lite\include;zip\include;$(ProjectDir)include;$(SolutionDir)out\install\$(Platform)-$(Configuration)\include;$(SolutionDir)externals\$(ProjectName)\out\install\$(Platform)-$(Configuration)\include</AdditionalIncludeDirectories>
<PrecompiledHeader>Use</PrecompiledHeader>
Expand Down Expand Up @@ -596,7 +599,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_LIB;%(PreprocessorDefinitions);CODA_OSS_EXPORTS;CODA_OSS_DLL;MT_DEFAULT_PINNING=0;RE_ENABLE_STD_REGEX=1</PreprocessorDefinitions>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions);MT_DEFAULT_PINNING=0;RE_ENABLE_STD_REGEX=1;CODA_OSS_EXPORTS;CODA_OSS_LIBRARY_SHARED=1</PreprocessorDefinitions>
<ForcedIncludeFiles>pch.h</ForcedIncludeFiles>
<AdditionalIncludeDirectories>cli\include;coda_oss\include;config\include;dbi\include;except\include;gsl\include;hdf5.lite\include;io\include;logging\include;math\include;math.linear\include;math.poly\include;mem\include;mt\include;net\include;net.ssl\include;plugin\include;polygon\include;re\include;sio.lite\include;std\include;str\include;sys\include;tiff\include;types\include;unique\include;units\include;xml.lite\include;zip\include;$(ProjectDir)include;$(SolutionDir)out\install\$(Platform)-$(Configuration)\include;$(SolutionDir)externals\$(ProjectName)\out\install\$(Platform)-$(Configuration)\include</AdditionalIncludeDirectories>
<PrecompiledHeader>Use</PrecompiledHeader>
Expand All @@ -609,6 +612,7 @@
<AdditionalOptions>/Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions>
<EnableEnhancedInstructionSet>AdvancedVectorExtensions2</EnableEnhancedInstructionSet>
<WarningLevel>Level3</WarningLevel>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
</ClCompile>
<Link>
<SubSystem>
Expand Down
9 changes: 9 additions & 0 deletions externals/coda-oss/modules/c++/coda-oss.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -951,6 +951,12 @@
<ClInclude Include="str\include\str\W1252string.h">
<Filter>str</Filter>
</ClInclude>
<ClInclude Include="coda_oss\include\coda_oss\mdspan.h">
<Filter>coda_oss</Filter>
</ClInclude>
<ClInclude Include="coda_oss\include\coda_oss\mdspan_.h">
<Filter>coda_oss</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="pch.cpp" />
Expand Down Expand Up @@ -1559,5 +1565,8 @@
<None Include="sys\source\CppUnitTestAssert_.cpp_">
<Filter>sys</Filter>
</None>
<None Include="std\include\std\mdspan">
<Filter>std</Filter>
</None>
</ItemGroup>
</Project>
73 changes: 73 additions & 0 deletions externals/coda-oss/modules/c++/coda_oss/include/coda_oss/mdspan.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/* =========================================================================
* This file is part of coda_oss-c++
* =========================================================================
*
* (C) Copyright 2004 - 2014, MDA Information Systems LLC
* © Copyright 2023, Maxar Technologies, Inc.
*
* coda_oss-c++ is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; If not,
* see <http://www.gnu.org/licenses/>.
*
*/
#pragma once

#include "coda_oss/CPlusPlus.h"

// This should always work ... it's in a `details` namespace
#include "coda_oss/mdspan_.h"

// This logic needs to be here rather than <std/mdspan> so that `coda_oss::mdspan` will
// be the same as `std::mdspan`.
#ifndef CODA_OSS_HAVE_std_mdspan_
#define CODA_OSS_HAVE_std_mdspan_ 0 // assume no <mdspan>
#endif
#ifndef CODA_OSS_HAVE_experimental_mdspan_
#define CODA_OSS_HAVE_experimental_mdspan_ 0 // assume no std::experimental::mdspan
#endif
#if CODA_OSS_cpp17 // __has_include
#if __has_include(<mdspan>) // <mdspan> not until C++23
#include <mdspan>
#undef CODA_OSS_HAVE_std_mdspan_
#define CODA_OSS_HAVE_std_mdspan_ 1 // provided by the implementation, probably C++23
#endif

#if CODA_OSS_cpp20 // Can't even #include this file with older C++14/17 compilers! :-(
// Put this in a __has_include so that it's optional. Our simple implemtnation works
// for our needs, and this brings along a lot of code that our older compilers don't
// like. By the time we need more functionality, maybe we'll be using C++23?
//
// Until then, having this available allows checking our implementation against
// something much more real. https://github.com/kokkos/mdspan
#if __has_include("coda_oss/experimental/mdspan")
#include "coda_oss/experimental/mdspan"
#undef CODA_OSS_HAVE_experimental_mdspan_
#define CODA_OSS_HAVE_experimental_mdspan_ 1 // provided coda_oss/experimental/mdspan
#endif
#endif
#endif // CODA_OSS_cpp17

namespace coda_oss
{
#if CODA_OSS_HAVE_std_mdspan_
using std::mdspan;
using std::dextents;
#elif CODA_OSS_HAVE_experimental_mdspan_
using std::experimental::mdspan;
using std::experimental::dextents;
#else
using details::mdspan;
using details::dextents;
#endif
}

151 changes: 151 additions & 0 deletions externals/coda-oss/modules/c++/coda_oss/include/coda_oss/mdspan_.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
/* =========================================================================
* This file is part of coda_oss-c++
* =========================================================================
*
* (C) Copyright 2004 - 2014, MDA Information Systems LLC
* © Copyright 2023, Maxar Technologies, Inc.
*
* coda_oss-c++ is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; If not,
* see <http://www.gnu.org/licenses/>.
*
*/
#pragma once

#include <assert.h>

#include <array>

#include "coda_oss/span.h"

// This is a simple, partial, and incomplete implementation of `std::mdspan` (in C++23).
// https://en.cppreference.com/w/cpp/container/mdspan
//
// Why? Our (current) needs are much more limited than all the use-cases for `std::mdspan`:
// dynamic (not static) extents, rank of 2 (rows × cols), contiguous memory, ...
// By the time we really need more features, maybe we'll be using C++23?
namespace coda_oss
{
namespace details
{
// https://en.cppreference.com/w/cpp/container/mdspan/extents
template<typename IndexType, size_t Rank>
struct dextents final // this is actually supposed to be an alias template with all dynamic extents
{
static_assert(Rank == 2, "Rank must have a value of 2");
using index_type = IndexType;
using size_type = index_type;
using rank_type = size_t;

constexpr dextents() = default;

// These are supposed to be templates, but we don't need that complication right now.
constexpr dextents(index_type i0, index_type i1) noexcept : exts_{i0, i1}
{
}
constexpr explicit dextents(const std::array<index_type, Rank>& exts) noexcept : exts_(exts)
{
}

dextents(const dextents&) = default;
dextents& operator=(const dextents&) = default;
dextents(dextents&&) = default;
dextents& operator=(dextents&&) = default;

constexpr index_type extent(rank_type r) const noexcept
{
return exts_[r];
}

static constexpr auto rank() noexcept
{
return Rank;
}

private:
std::array<index_type, Rank> exts_;
};

template<typename T, typename TExtents>
class mdspan final
{
coda_oss::span<T> s_; // `span` instead of a raw pointer to get more range checking.
TExtents ext_;

// c.f., `types::RowCol`
template <typename IndexType, size_t Rank>
static size_t area(const dextents<IndexType, Rank>& exts)
{
return exts.extent(0) * exts.extent(1);
}

public:
using extents_type = TExtents;
using size_type = typename extents_type::size_type;
using data_handle_type = T*;
using reference = T&;

constexpr mdspan() = default;

// Again, these are supposed to be templates ...
mdspan(data_handle_type p, const extents_type& ext) noexcept : s_(p, area(ext)), ext_(ext)
{
}
mdspan(data_handle_type p, const std::array<size_type, 2>& dims) noexcept : mdspan(p, extents_type(dims))
{
}

mdspan(const mdspan&) = default;
mdspan& operator=(const mdspan&) = default;
mdspan(mdspan&&) = default;
mdspan& operator=(mdspan&&) = default;

constexpr data_handle_type data_handle() const noexcept
{
return s_.data();
}

/*constexpr*/ reference operator[](size_t idx) const noexcept
{
assert(idx < size()); // prevents "constexpr" in C++11
return data_handle()[idx];
}
/*constexpr*/ reference operator()(size_t r, size_t c) const noexcept
{
const auto offset = (r * extent(1)) + c;
return (*this)[offset];
}

constexpr size_t size() const noexcept
{
return s_.size();
}

constexpr bool empty() const noexcept
{
return s_.empty();
}

auto extent(size_type rank) const
{
return ext_.extent(rank);
}

static constexpr auto rank() noexcept
{
return extents_type::rank();
}
};
}
}

Loading

0 comments on commit a62d494

Please sign in to comment.