aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/src/basic_usage.cpp39
-rw-r--r--examples/src/basic_usage_with_read.cpp39
-rw-r--r--examples/src/basic_usage_with_show.cpp41
3 files changed, 119 insertions, 0 deletions
diff --git a/examples/src/basic_usage.cpp b/examples/src/basic_usage.cpp
new file mode 100644
index 0000000..a2a50cd
--- /dev/null
+++ b/examples/src/basic_usage.cpp
@@ -0,0 +1,39 @@
+#include <newtype/new_type.hpp>
+
+#include <iostream>
+
+using Width = nt::new_type<unsigned int, struct width_tag>;
+using Height = nt::new_type<unsigned int, struct height_tag>;
+using Area = nt::new_type<unsigned int, struct area_tag>;
+
+struct Rectangle
+{
+ constexpr Rectangle(Width w, Height h)
+ : width{w}
+ , height{h}
+ {
+ }
+
+ auto constexpr area() const noexcept -> Area
+ {
+ return {width.decay() * height.decay()};
+ }
+
+private:
+ Width width;
+ Height height;
+};
+
+int main()
+{
+ auto w{0u}, h{0u};
+
+ std::cin >> w >> h;
+
+ auto width = Width{w};
+ auto height = Height{h};
+
+ auto rect = Rectangle{width, height};
+
+ std::cout << rect.area().decay() << '\n';
+} \ No newline at end of file
diff --git a/examples/src/basic_usage_with_read.cpp b/examples/src/basic_usage_with_read.cpp
new file mode 100644
index 0000000..87fcc1a
--- /dev/null
+++ b/examples/src/basic_usage_with_read.cpp
@@ -0,0 +1,39 @@
+#include <newtype/derivable.hpp>
+#include <newtype/deriving.hpp>
+#include <newtype/new_type.hpp>
+
+#include <iostream>
+
+using Width = nt::new_type<unsigned int, struct width_tag, deriving(nt::Read)>;
+using Height = nt::new_type<unsigned int, struct height_tag, deriving(nt::Read)>;
+using Area = nt::new_type<unsigned int, struct area_tag, deriving(nt::Show)>;
+
+struct Rectangle
+{
+ constexpr Rectangle(Width w, Height h)
+ : width{w}
+ , height{h}
+ {
+ }
+
+ auto constexpr area() const noexcept -> Area
+ {
+ return {width.decay() * height.decay()};
+ }
+
+private:
+ Width width;
+ Height height;
+};
+
+int main()
+{
+ auto width = Width{};
+ auto height = Height{};
+
+ std::cin >> width >> height;
+
+ auto rect = Rectangle{width, height};
+
+ std::cout << rect.area() << '\n';
+} \ No newline at end of file
diff --git a/examples/src/basic_usage_with_show.cpp b/examples/src/basic_usage_with_show.cpp
new file mode 100644
index 0000000..1a83968
--- /dev/null
+++ b/examples/src/basic_usage_with_show.cpp
@@ -0,0 +1,41 @@
+#include <newtype/derivable.hpp>
+#include <newtype/deriving.hpp>
+#include <newtype/new_type.hpp>
+
+#include <iostream>
+
+using Width = nt::new_type<unsigned int, struct width_tag>;
+using Height = nt::new_type<unsigned int, struct height_tag>;
+using Area = nt::new_type<unsigned int, struct area_tag, deriving(nt::Show)>;
+
+struct Rectangle
+{
+ constexpr Rectangle(Width w, Height h)
+ : width{w}
+ , height{h}
+ {
+ }
+
+ auto constexpr area() const noexcept -> Area
+ {
+ return {width.decay() * height.decay()};
+ }
+
+private:
+ Width width;
+ Height height;
+};
+
+int main()
+{
+ auto w{0u}, h{0u};
+
+ std::cin >> w >> h;
+
+ auto width = Width{w};
+ auto height = Height{h};
+
+ auto rect = Rectangle{width, height};
+
+ std::cout << rect.area() << '\n';
+} \ No newline at end of file