initial commit
This commit is contained in:
commit
45636e5662
10
.dir-locals.el
Normal file
10
.dir-locals.el
Normal file
@ -0,0 +1,10 @@
|
||||
((nil . (
|
||||
(projectile-project-name . "hyporo")
|
||||
(projectile-project-compilation-dir . "")
|
||||
(projectile-enable-caching . t)
|
||||
(projectile-project-configure-cmd . "cmake -S . -B build -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=DEBUG")
|
||||
(projectile-project-compilation-cmd . "cmake --build build ")
|
||||
(projectile-project-test-cmd . "ctest --test-dir build")
|
||||
(projectile-project-run-cmd . "cd build/source/creator && ./hyporo")
|
||||
(cmake-ide-build-dir . "build")
|
||||
)))
|
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
cmake-build-debug/
|
||||
.idea/
|
||||
build/
|
||||
.ccls-cache/
|
||||
compile_commands.json
|
||||
.cache/
|
69
.vscode/settings.json
vendored
Normal file
69
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,69 @@
|
||||
{
|
||||
"files.associations": {
|
||||
"any": "cpp",
|
||||
"array": "cpp",
|
||||
"atomic": "cpp",
|
||||
"bit": "cpp",
|
||||
"*.tcc": "cpp",
|
||||
"cctype": "cpp",
|
||||
"chrono": "cpp",
|
||||
"clocale": "cpp",
|
||||
"cmath": "cpp",
|
||||
"compare": "cpp",
|
||||
"concepts": "cpp",
|
||||
"condition_variable": "cpp",
|
||||
"cstdarg": "cpp",
|
||||
"cstddef": "cpp",
|
||||
"cstdint": "cpp",
|
||||
"cstdio": "cpp",
|
||||
"cstdlib": "cpp",
|
||||
"cstring": "cpp",
|
||||
"ctime": "cpp",
|
||||
"cwchar": "cpp",
|
||||
"cwctype": "cpp",
|
||||
"deque": "cpp",
|
||||
"forward_list": "cpp",
|
||||
"list": "cpp",
|
||||
"map": "cpp",
|
||||
"set": "cpp",
|
||||
"string": "cpp",
|
||||
"unordered_map": "cpp",
|
||||
"unordered_set": "cpp",
|
||||
"vector": "cpp",
|
||||
"exception": "cpp",
|
||||
"algorithm": "cpp",
|
||||
"functional": "cpp",
|
||||
"iterator": "cpp",
|
||||
"memory": "cpp",
|
||||
"memory_resource": "cpp",
|
||||
"numeric": "cpp",
|
||||
"optional": "cpp",
|
||||
"random": "cpp",
|
||||
"ratio": "cpp",
|
||||
"string_view": "cpp",
|
||||
"system_error": "cpp",
|
||||
"tuple": "cpp",
|
||||
"type_traits": "cpp",
|
||||
"utility": "cpp",
|
||||
"fstream": "cpp",
|
||||
"initializer_list": "cpp",
|
||||
"iomanip": "cpp",
|
||||
"iosfwd": "cpp",
|
||||
"iostream": "cpp",
|
||||
"istream": "cpp",
|
||||
"limits": "cpp",
|
||||
"mutex": "cpp",
|
||||
"new": "cpp",
|
||||
"numbers": "cpp",
|
||||
"ostream": "cpp",
|
||||
"semaphore": "cpp",
|
||||
"sstream": "cpp",
|
||||
"stdexcept": "cpp",
|
||||
"stop_token": "cpp",
|
||||
"streambuf": "cpp",
|
||||
"thread": "cpp",
|
||||
"cinttypes": "cpp",
|
||||
"typeinfo": "cpp",
|
||||
"variant": "cpp"
|
||||
}
|
||||
}
|
23
CMakeLists.txt
Normal file
23
CMakeLists.txt
Normal file
@ -0,0 +1,23 @@
|
||||
cmake_minimum_required (VERSION 3.16)
|
||||
|
||||
|
||||
project(
|
||||
hyporo
|
||||
VERSION 0.20.0
|
||||
LANGUAGES CXX
|
||||
)
|
||||
|
||||
|
||||
option(WITH_GTESTS "Enable GTest unit testing" ON)
|
||||
|
||||
enable_testing()
|
||||
|
||||
if(WITH_GTESTS)
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/googletest.cmake)
|
||||
include(GoogleTest)
|
||||
endif()
|
||||
|
||||
add_definitions(-DPRECISION_FLOAT)
|
||||
|
||||
add_subdirectory(source)
|
||||
|
23
cmake/CPM.cmake
Normal file
23
cmake/CPM.cmake
Normal file
@ -0,0 +1,23 @@
|
||||
set(CPM_DOWNLOAD_VERSION 0.35.1)
|
||||
|
||||
if(CPM_SOURCE_CACHE)
|
||||
# Expand relative path. This is important if the provided path contains a tilde (~)
|
||||
get_filename_component(CPM_SOURCE_CACHE ${CPM_SOURCE_CACHE} ABSOLUTE)
|
||||
set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
|
||||
|
||||
elseif(DEFINED ENV{CPM_SOURCE_CACHE})
|
||||
set(CPM_DOWNLOAD_LOCATION "$ENV{CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
|
||||
|
||||
else()
|
||||
set(CPM_DOWNLOAD_LOCATION "${CMAKE_BINARY_DIR}/cmake/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
|
||||
endif()
|
||||
|
||||
if(NOT (EXISTS ${CPM_DOWNLOAD_LOCATION}))
|
||||
message(STATUS "Downloading CPM.cmake to ${CPM_DOWNLOAD_LOCATION}")
|
||||
file(DOWNLOAD
|
||||
https://github.com/cpm-cmake/CPM.cmake/releases/download/v${CPM_DOWNLOAD_VERSION}/CPM.cmake
|
||||
${CPM_DOWNLOAD_LOCATION}
|
||||
)
|
||||
endif()
|
||||
|
||||
include(${CPM_DOWNLOAD_LOCATION})
|
7
cmake/googletest.cmake
Normal file
7
cmake/googletest.cmake
Normal file
@ -0,0 +1,7 @@
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/CPM.cmake)
|
||||
|
||||
CPMAddPackage(
|
||||
NAME googletest
|
||||
GIT_REPOSITORY https://github.com/google/googletest.git
|
||||
GIT_TAG release-1.12.1
|
||||
)
|
2
source/CMakeLists.txt
Normal file
2
source/CMakeLists.txt
Normal file
@ -0,0 +1,2 @@
|
||||
add_subdirectory(hyporo)
|
||||
add_subdirectory(creator)
|
17
source/creator/CMakeLists.txt
Normal file
17
source/creator/CMakeLists.txt
Normal file
@ -0,0 +1,17 @@
|
||||
|
||||
include_directories(
|
||||
../hyporo/hyplib/vector
|
||||
../hyporo/hyplib/scalar
|
||||
../hyporo/hyplib/integer
|
||||
../hyporo/hyplib/matrix
|
||||
)
|
||||
|
||||
add_executable(hyporo
|
||||
# Source files
|
||||
creator.cpp
|
||||
|
||||
)
|
||||
|
||||
target_link_libraries(hyporo
|
||||
PUBLIC
|
||||
hyporo-hyplib)
|
22
source/creator/creator.cpp
Normal file
22
source/creator/creator.cpp
Normal file
@ -0,0 +1,22 @@
|
||||
#include "scalar.hpp"
|
||||
#include "vector.hpp"
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include "matrix.hpp"
|
||||
|
||||
int main(void)
|
||||
{
|
||||
hyporo::vec3 v1 {1, 3, 2};
|
||||
hyporo::vec3 v2 {7, 4, 5};
|
||||
std::cout << -v1 << std::endl;
|
||||
std::cout << ((v1 + v2) == hyporo::vec3(8, 7, 7)) << std::endl;
|
||||
std::cout << v1 - v2 << std::endl;
|
||||
std::cout << v1 * 2 << std::endl;
|
||||
std::cout << v1 / 2 << std::endl;
|
||||
std::cout << (v1 == v2) << std::endl;
|
||||
std::cout << (v1 == v1) << std::endl;
|
||||
hyporo::mat3 m1 {1, 3, 2, 5, 3, 6, 7, 2, 0};
|
||||
hyporo::mat3 m2 {7, 4, 5, 5, 7, 3, 1, 4, 6};
|
||||
std::cout << m1 + m2 << std::endl;
|
||||
return 0;
|
||||
}
|
6
source/hyporo/CMakeLists.txt
Normal file
6
source/hyporo/CMakeLists.txt
Normal file
@ -0,0 +1,6 @@
|
||||
add_subdirectory(csg)
|
||||
add_subdirectory(gpu)
|
||||
add_subdirectory(hmesh)
|
||||
add_subdirectory(hyplib)
|
||||
add_subdirectory(io)
|
||||
add_subdirectory(windowmanager)
|
0
source/hyporo/csg/CMakeLists.txt
Normal file
0
source/hyporo/csg/CMakeLists.txt
Normal file
0
source/hyporo/gpu/CMakeLists.txt
Normal file
0
source/hyporo/gpu/CMakeLists.txt
Normal file
32
source/hyporo/hmesh/CMakeLists.txt
Normal file
32
source/hyporo/hmesh/CMakeLists.txt
Normal file
@ -0,0 +1,32 @@
|
||||
|
||||
include_directories(
|
||||
.
|
||||
../hyplib/integer
|
||||
../hyplib/scalar
|
||||
../hyplib/vector
|
||||
)
|
||||
|
||||
add_library(hyporo-hmesh STATIC
|
||||
|
||||
# Header files
|
||||
Vertex.hpp
|
||||
Edge.hpp
|
||||
Face.hpp
|
||||
Cell.hpp
|
||||
Mesh.hpp
|
||||
|
||||
# Source files
|
||||
Mesh.cpp
|
||||
)
|
||||
|
||||
if(WITH_GTESTS)
|
||||
add_executable(hyporo-hmesh-test
|
||||
tests/hmesh-test.cpp
|
||||
)
|
||||
|
||||
target_link_libraries(hyporo-hmesh-test
|
||||
GTest::gtest_main
|
||||
)
|
||||
|
||||
gtest_add_tests(TARGET hyporo-hmesh-test)
|
||||
endif()
|
9
source/hyporo/hmesh/Cell.hpp
Normal file
9
source/hyporo/hmesh/Cell.hpp
Normal file
@ -0,0 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#include "Face.hpp"
|
||||
|
||||
namespace hyporo
|
||||
{
|
||||
|
||||
|
||||
} // end namespace hyporo
|
9
source/hyporo/hmesh/Edge.hpp
Normal file
9
source/hyporo/hmesh/Edge.hpp
Normal file
@ -0,0 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#include "Vertex.hpp"
|
||||
|
||||
namespace hyporo
|
||||
{
|
||||
|
||||
|
||||
} // end namespace hyporo
|
9
source/hyporo/hmesh/Face.hpp
Normal file
9
source/hyporo/hmesh/Face.hpp
Normal file
@ -0,0 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#include "Edge.hpp"
|
||||
|
||||
namespace hyporo
|
||||
{
|
||||
|
||||
|
||||
} // end namespace hyporo
|
0
source/hyporo/hmesh/Mesh.cpp
Normal file
0
source/hyporo/hmesh/Mesh.cpp
Normal file
31
source/hyporo/hmesh/Mesh.hpp
Normal file
31
source/hyporo/hmesh/Mesh.hpp
Normal file
@ -0,0 +1,31 @@
|
||||
#pragma once
|
||||
|
||||
#include "Cell.hpp"
|
||||
|
||||
namespace hyporo
|
||||
{
|
||||
|
||||
class Mesh
|
||||
{
|
||||
|
||||
mutable list<shared_ptr<Vertex>> vertices_;
|
||||
mutable list<shared_ptr<Edge>> edges_;
|
||||
mutable list<shared_ptr<Face>> faces_;
|
||||
mutable list<shared_ptr<Cell>> cells_;
|
||||
|
||||
public:
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Desctuctor
|
||||
virtual ~Mesh();
|
||||
|
||||
// Mesh size parameters
|
||||
|
||||
inline sizet nPoints() const;
|
||||
inline sizet nEdges() const;
|
||||
inline sizet nFaces() const;
|
||||
inline sizet nCells() const;
|
||||
};
|
||||
|
||||
} // end namespace hyporo
|
47
source/hyporo/hmesh/Vertex.hpp
Normal file
47
source/hyporo/hmesh/Vertex.hpp
Normal file
@ -0,0 +1,47 @@
|
||||
#pragma once
|
||||
|
||||
#include "vector.hpp"
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
namespace hyporo
|
||||
{
|
||||
|
||||
template <class T>
|
||||
using list = std::vector<T>;
|
||||
|
||||
using std::shared_ptr;
|
||||
using std::weak_ptr;
|
||||
|
||||
// Forward declaration
|
||||
|
||||
class Edge;
|
||||
|
||||
class Mesh;
|
||||
|
||||
// Class declaration
|
||||
|
||||
class Vertex : public VectorSpace<scalar, 3>
|
||||
{
|
||||
|
||||
//- List of weak pointers to edges that use this vertex
|
||||
mutable list<weak_ptr<Edge>> edges_;
|
||||
|
||||
public:
|
||||
|
||||
// Constructors
|
||||
|
||||
inline Vertex(Mesh& mesh, const scalar& x, const scalar& y, const scalar& z);
|
||||
|
||||
// Member functions
|
||||
|
||||
inline const scalar& x() const;
|
||||
|
||||
inline const scalar& y() const;
|
||||
|
||||
inline const scalar& z() const;
|
||||
};
|
||||
|
||||
} // end namespace hyporo
|
||||
|
||||
#include "Vertex.hxx"
|
27
source/hyporo/hmesh/Vertex.hxx
Normal file
27
source/hyporo/hmesh/Vertex.hxx
Normal file
@ -0,0 +1,27 @@
|
||||
|
||||
namespace hyporo
|
||||
{
|
||||
|
||||
Vertex::Point(const scalar& x, const scalar& y, const scalar& z)
|
||||
{
|
||||
row[0] = x;
|
||||
row[1] = y;
|
||||
row[2] = z;
|
||||
}
|
||||
|
||||
const scalar& Vertex::x() const
|
||||
{
|
||||
return row[0];
|
||||
}
|
||||
|
||||
const scalar& Vertex::y() const;
|
||||
{
|
||||
return row[1];
|
||||
}
|
||||
|
||||
const scalar& Vertex::z() const;
|
||||
{
|
||||
return row[2];
|
||||
}
|
||||
|
||||
} // end namespace hyporo
|
6
source/hyporo/hmesh/tests/hmesh-test.cpp
Normal file
6
source/hyporo/hmesh/tests/hmesh-test.cpp
Normal file
@ -0,0 +1,6 @@
|
||||
#include <gtest/gtest.h>
|
||||
#include "Mesh.hpp"
|
||||
|
||||
TEST(hmeshTest, MeshCreation)
|
||||
{
|
||||
}
|
33
source/hyporo/hyplib/CMakeLists.txt
Normal file
33
source/hyporo/hyplib/CMakeLists.txt
Normal file
@ -0,0 +1,33 @@
|
||||
|
||||
include_directories(
|
||||
integer
|
||||
scalar
|
||||
vector
|
||||
matrix
|
||||
)
|
||||
|
||||
add_library(hyporo-hyplib STATIC
|
||||
|
||||
# Header files
|
||||
integer/integer.hpp
|
||||
scalar/scalar.hpp
|
||||
vector/VectorSpace.hpp
|
||||
vector/vector.hpp
|
||||
matrix/MatrixSpace.hpp
|
||||
matrix/matrix.hpp
|
||||
|
||||
# Source files
|
||||
scalar/scalar.cpp
|
||||
)
|
||||
|
||||
if(WITH_GTESTS)
|
||||
add_executable(hyporo-hyplib-test
|
||||
tests/hyplib-test.cpp
|
||||
)
|
||||
|
||||
target_link_libraries(hyporo-hyplib-test
|
||||
GTest::gtest_main
|
||||
)
|
||||
|
||||
gtest_add_tests(TARGET hyporo-hyplib-test)
|
||||
endif()
|
12
source/hyporo/hyplib/integer/integer.hpp
Normal file
12
source/hyporo/hyplib/integer/integer.hpp
Normal file
@ -0,0 +1,12 @@
|
||||
|
||||
#include <cstddef>
|
||||
|
||||
|
||||
namespace hyporo
|
||||
{
|
||||
|
||||
using uint = unsigned int;
|
||||
|
||||
using sizet = std::size_t;
|
||||
|
||||
} // end namespace hyporo
|
33
source/hyporo/hyplib/matrix/MatrixSpace.hpp
Normal file
33
source/hyporo/hyplib/matrix/MatrixSpace.hpp
Normal file
@ -0,0 +1,33 @@
|
||||
#include "VectorSpace.hpp"
|
||||
|
||||
|
||||
namespace hyporo
|
||||
{
|
||||
|
||||
template <class C, sizet Mrows, sizet Ncols>
|
||||
class MatrixSpace : public VectorSpace<C, Mrows * Ncols>
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
// Member constants
|
||||
|
||||
static const sizet mRows = Mrows;
|
||||
static const sizet nColumns = Ncols;
|
||||
|
||||
// Constructors
|
||||
|
||||
inline MatrixSpace();
|
||||
|
||||
template <class... Args>
|
||||
inline MatrixSpace(const Args... components);
|
||||
|
||||
// Member operators
|
||||
|
||||
inline const C& operator()(const sizet& n, const sizet& m);
|
||||
|
||||
};
|
||||
|
||||
} // end namespace hyporo
|
||||
|
||||
#include "MatrixSpace.hxx"
|
27
source/hyporo/hyplib/matrix/MatrixSpace.hxx
Normal file
27
source/hyporo/hyplib/matrix/MatrixSpace.hxx
Normal file
@ -0,0 +1,27 @@
|
||||
|
||||
namespace hyporo
|
||||
{
|
||||
|
||||
// Constructors
|
||||
|
||||
template <class C, sizet Mrows, sizet Ncols>
|
||||
inline MatrixSpace<C, Mrows, Ncols>::MatrixSpace()
|
||||
{}
|
||||
|
||||
template <class C, sizet Mrows, sizet Ncols>
|
||||
template <class... Args>
|
||||
inline MatrixSpace<C, Mrows, Ncols>::MatrixSpace(const Args... components)
|
||||
//: row { static_cast<C>(components)... }
|
||||
{
|
||||
this->row = { static_cast<C>(components)... };
|
||||
}
|
||||
|
||||
// Member operators
|
||||
|
||||
template <class C, sizet Mrows, sizet Ncols>
|
||||
inline const C& MatrixSpace<C, Mrows, Ncols>::operator()(const sizet& n, const sizet& m)
|
||||
{
|
||||
return this->row[n * Ncols + m];
|
||||
}
|
||||
|
||||
} // end namespace hyporo
|
11
source/hyporo/hyplib/matrix/matrix.hpp
Normal file
11
source/hyporo/hyplib/matrix/matrix.hpp
Normal file
@ -0,0 +1,11 @@
|
||||
#include "MatrixSpace.hpp"
|
||||
|
||||
|
||||
namespace hyporo
|
||||
{
|
||||
|
||||
using mat3 = MatrixSpace<scalar, 3, 3>;
|
||||
|
||||
using mat4 = MatrixSpace<scalar, 4, 4>;
|
||||
|
||||
} // end namespace hyporo
|
3
source/hyporo/hyplib/scalar/scalar.cpp
Normal file
3
source/hyporo/hyplib/scalar/scalar.cpp
Normal file
@ -0,0 +1,3 @@
|
||||
#include "scalar.hpp"
|
||||
|
||||
|
47
source/hyporo/hyplib/scalar/scalar.hpp
Normal file
47
source/hyporo/hyplib/scalar/scalar.hpp
Normal file
@ -0,0 +1,47 @@
|
||||
#pragma once
|
||||
|
||||
#include <cmath>
|
||||
#include <limits>
|
||||
|
||||
|
||||
namespace hyporo
|
||||
{
|
||||
|
||||
#if defined(PRECISION_FLOAT)
|
||||
|
||||
using scalar = float;
|
||||
|
||||
#elif defined(PRECISION_DOUBLE)
|
||||
|
||||
using scalar = double;
|
||||
|
||||
#elif defined(PRECISION_LONGDOUBLE)
|
||||
|
||||
using scalar = long double;
|
||||
|
||||
#else
|
||||
|
||||
using scalar = float;
|
||||
|
||||
#endif
|
||||
|
||||
static const scalar small = std::numeric_limits<scalar>::epsilon();
|
||||
static const scalar great = 1.0 / small;
|
||||
static const scalar valueSmall = std::numeric_limits<scalar>::min();
|
||||
static const scalar valueGreat = std::numeric_limits<scalar>::max() * 0.1;
|
||||
static const scalar NaN = std::numeric_limits<scalar>::signaling_NaN();
|
||||
|
||||
|
||||
//- Return 1 if s is positive or 0 otherwise -1
|
||||
inline int sign(const scalar s)
|
||||
{
|
||||
return (s >= 0) ? 1: -1;
|
||||
}
|
||||
|
||||
inline scalar mag(const scalar s)
|
||||
{
|
||||
return std::fabs(s);
|
||||
}
|
||||
|
||||
|
||||
} // end namespace hyporo
|
20
source/hyporo/hyplib/tests/hyplib-test.cpp
Normal file
20
source/hyporo/hyplib/tests/hyplib-test.cpp
Normal file
@ -0,0 +1,20 @@
|
||||
#include <gtest/gtest.h>
|
||||
#include "vector.hpp"
|
||||
|
||||
TEST(hyplibTest, VectorCreation)
|
||||
{
|
||||
hyporo::vec3 v {1, 3, 2};
|
||||
EXPECT_EQ(v[0], 1);
|
||||
EXPECT_EQ(v[1], 3);
|
||||
EXPECT_EQ(v[2], 2);
|
||||
}
|
||||
|
||||
TEST(hyplibTest, VectorOperations)
|
||||
{
|
||||
using hyporo::vec3;
|
||||
vec3 v1 {1, 3, 2};
|
||||
vec3 v2 {5, 7, -1};
|
||||
EXPECT_EQ(-v1, vec3(-1, -3, -2));
|
||||
EXPECT_EQ(v1 + v2, vec3(6, 10, 1));
|
||||
EXPECT_EQ(v1 - v2, vec3(-4, -4, 3));
|
||||
}
|
66
source/hyporo/hyplib/vector/VectorSpace.hpp
Normal file
66
source/hyporo/hyplib/vector/VectorSpace.hpp
Normal file
@ -0,0 +1,66 @@
|
||||
#pragma once
|
||||
|
||||
/** \file
|
||||
* \ingroup hyplib
|
||||
**/
|
||||
|
||||
#include "integer.hpp"
|
||||
#include "scalar.hpp"
|
||||
#include <array>
|
||||
#include <ostream>
|
||||
|
||||
namespace hyporo
|
||||
{
|
||||
|
||||
// Forward declaration of friend functions and operators
|
||||
|
||||
template <class C, sizet NC> class VectorSpace;
|
||||
|
||||
template <class C, sizet NC>
|
||||
std::ostream& operator<<(std::ostream&, const VectorSpace<C, NC>&);
|
||||
|
||||
// Class declaration
|
||||
|
||||
template <class C, sizet NC>
|
||||
class VectorSpace
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
//- The components of this vector space
|
||||
std::array<C, NC> row;
|
||||
|
||||
// Static constants
|
||||
|
||||
static const sizet nComponents = NC;
|
||||
|
||||
// Constructors
|
||||
|
||||
inline VectorSpace();
|
||||
|
||||
//inline VectorSpace(const VectorSpace<C, NC>&);
|
||||
|
||||
template <class... Args>
|
||||
inline VectorSpace(const Args... components);
|
||||
|
||||
|
||||
// Member functions
|
||||
|
||||
inline static sizet size();
|
||||
|
||||
// Member operators
|
||||
|
||||
inline C& operator[](const sizet);
|
||||
|
||||
inline VectorSpace<C, NC>& operator*=(const scalar);
|
||||
|
||||
inline VectorSpace<C, NC>& operator/=(const scalar);
|
||||
|
||||
// Friend operators
|
||||
|
||||
friend std::ostream& operator<< <C, NC>(std::ostream&, const VectorSpace<C, NC>&);
|
||||
};
|
||||
|
||||
} // end namespace hyporo
|
||||
|
||||
#include "VectorSpace.hxx"
|
143
source/hyporo/hyplib/vector/VectorSpace.hxx
Normal file
143
source/hyporo/hyplib/vector/VectorSpace.hxx
Normal file
@ -0,0 +1,143 @@
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
|
||||
namespace hyporo
|
||||
{
|
||||
|
||||
// Constructors
|
||||
|
||||
template <class C, sizet NC>
|
||||
inline VectorSpace<C, NC>::VectorSpace()
|
||||
{}
|
||||
|
||||
template <class C, sizet NC>
|
||||
template <class... Args>
|
||||
inline VectorSpace<C, NC>::VectorSpace(const Args... components)
|
||||
: row { static_cast<C>(components)... }
|
||||
{}
|
||||
|
||||
|
||||
// Member functions
|
||||
|
||||
template <class C, sizet NC>
|
||||
inline sizet VectorSpace<C, NC>::size()
|
||||
{
|
||||
return NC;
|
||||
}
|
||||
|
||||
// Member operators
|
||||
|
||||
template <class C, sizet NC>
|
||||
inline C& VectorSpace<C, NC>::operator[](const sizet n)
|
||||
{
|
||||
return row[n];
|
||||
}
|
||||
|
||||
|
||||
template <class C, sizet NC>
|
||||
inline VectorSpace<C, NC>& VectorSpace<C, NC>::operator*=(const scalar s)
|
||||
{
|
||||
for (C& v : row)
|
||||
v *= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <class C, sizet NC>
|
||||
inline VectorSpace<C, NC>& VectorSpace<C, NC>::operator/=(const scalar s)
|
||||
{
|
||||
for (C& v : row)
|
||||
v /= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
// Friend operators
|
||||
|
||||
template <class C, sizet NC>
|
||||
std::ostream& operator<<(std::ostream& os, const VectorSpace<C, NC>& vs)
|
||||
{
|
||||
os << "(";
|
||||
for (sizet n = 0; n < NC; n++)
|
||||
{
|
||||
os << vs.row[n];
|
||||
if (n != NC - 1)
|
||||
os << ", ";
|
||||
}
|
||||
os << ")";
|
||||
return os;
|
||||
}
|
||||
|
||||
|
||||
// Global operators
|
||||
|
||||
template <class C, sizet NC>
|
||||
inline VectorSpace<C, NC> operator-(const VectorSpace<C, NC>& vs)
|
||||
{
|
||||
VectorSpace<C, NC> nvs;
|
||||
for (sizet n = 0; n < NC; n++)
|
||||
nvs.row[n] = -vs.row[n];
|
||||
return nvs;
|
||||
}
|
||||
|
||||
template <class C, sizet NC>
|
||||
inline VectorSpace<C, NC> operator+(const VectorSpace<C, NC>& vs1, const VectorSpace<C, NC>& vs2)
|
||||
{
|
||||
VectorSpace<C, NC> nvs;
|
||||
for (sizet n = 0; n < NC; n++)
|
||||
nvs.row[n] = vs1.row[n] + vs2.row[n];
|
||||
return nvs;
|
||||
}
|
||||
|
||||
template <class C, sizet NC>
|
||||
inline VectorSpace<C, NC> operator-(const VectorSpace<C, NC>& vs1, const VectorSpace<C, NC>& vs2)
|
||||
{
|
||||
VectorSpace<C, NC> nvs;
|
||||
for (sizet n = 0; n < NC; n++)
|
||||
nvs.row[n] = vs1.row[n] - vs2.row[n];
|
||||
return nvs;
|
||||
}
|
||||
|
||||
template <class C, sizet NC>
|
||||
inline VectorSpace<C, NC> operator*(const scalar& s, const VectorSpace<C, NC>& vs)
|
||||
{
|
||||
VectorSpace<C, NC> nvs;
|
||||
for (sizet n = 0; n < NC; n++)
|
||||
nvs.row[n] = s * vs.row[n];
|
||||
return nvs;
|
||||
}
|
||||
|
||||
template <class C, sizet NC>
|
||||
inline VectorSpace<C, NC> operator*(const VectorSpace<C, NC>& vs, const scalar& s)
|
||||
{
|
||||
VectorSpace<C, NC> nvs;
|
||||
for (sizet n = 0; n < NC; n++)
|
||||
nvs.row[n] = vs.row[n] * s;
|
||||
return nvs;
|
||||
}
|
||||
|
||||
template <class C, sizet NC>
|
||||
inline VectorSpace<C, NC> operator/(const VectorSpace<C, NC>& vs, const scalar& s)
|
||||
{
|
||||
VectorSpace<C, NC> nvs;
|
||||
for (sizet n = 0; n < NC; n++)
|
||||
nvs.row[n] = vs.row[n] / s;
|
||||
return nvs;
|
||||
}
|
||||
|
||||
template <class C, sizet NC>
|
||||
inline bool operator==(const VectorSpace<C, NC>& vs1, const VectorSpace<C, NC>& vs2)
|
||||
{
|
||||
bool eq = true;
|
||||
for (sizet n = 0; n < NC; n++)
|
||||
if (!(eq &= (vs1.row[n] == vs2.row[n])))
|
||||
break;
|
||||
return eq;
|
||||
}
|
||||
|
||||
template <class C, sizet NC>
|
||||
inline bool operator!=(const VectorSpace<C, NC>& vs1, const VectorSpace<C, NC>& vs2)
|
||||
{
|
||||
return !(vs1 == vs2);
|
||||
}
|
||||
|
||||
} // end namespace hyporo
|
14
source/hyporo/hyplib/vector/vector.hpp
Normal file
14
source/hyporo/hyplib/vector/vector.hpp
Normal file
@ -0,0 +1,14 @@
|
||||
#include "scalar.hpp"
|
||||
#include "VectorSpace.hpp"
|
||||
|
||||
|
||||
namespace hyporo
|
||||
{
|
||||
|
||||
using vec2 = VectorSpace<scalar, 2>;
|
||||
|
||||
using vec3 = VectorSpace<scalar, 3>;
|
||||
|
||||
using vec4 = VectorSpace<scalar, 4>;
|
||||
|
||||
} // end namespace hyporo
|
0
source/hyporo/io/CMakeLists.txt
Normal file
0
source/hyporo/io/CMakeLists.txt
Normal file
0
source/hyporo/windowmanager/CMakeLists.txt
Normal file
0
source/hyporo/windowmanager/CMakeLists.txt
Normal file
Loading…
Reference in New Issue
Block a user