From 11d7b85868af1d0fa68b0ae276d2455561594510 Mon Sep 17 00:00:00 2001 From: GRayHook Date: Mon, 28 Jul 2025 17:03:05 +0700 Subject: [PATCH] add iterable --- Makefile | 17 +++++++---- iterators.h | 68 ++++++++++++++++++++++++++++++++++++++++++ main.h | 43 ++++++++++++++++++++++++++ raw_ptr | Bin 0 -> 18080 bytes main.c => raw_ptr.cc | 24 ++++----------- smart_ptr | Bin 0 -> 35808 bytes smart_ptr.cc | 44 +++++++++++++++++++++++++++ smart_ptr_iterable | Bin 0 -> 35728 bytes smart_ptr_iterable.cc | 23 ++++++++++++++ 9 files changed, 196 insertions(+), 23 deletions(-) create mode 100644 iterators.h create mode 100644 main.h create mode 100755 raw_ptr rename main.c => raw_ptr.cc (62%) create mode 100755 smart_ptr create mode 100644 smart_ptr.cc create mode 100755 smart_ptr_iterable create mode 100644 smart_ptr_iterable.cc diff --git a/Makefile b/Makefile index 6d59d74..7fb42ba 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,15 @@ -run: wrappers - ./wrappers +run: all + ./raw_ptr + ./smart_ptr + ./smart_ptr_iterable -wrappers: main.c - g++ -Wall -o wrappers main.c +all: raw_ptr smart_ptr smart_ptr_iterable + +raw_ptr: raw_ptr.cc + +smart_ptr: smart_ptr.cc + +smart_ptr_iterable: smart_ptr_iterable.cc clean: - rm -f *.o wrappers + rm -f *.o raw_ptr smart_ptr smart_ptr_iterable diff --git a/iterators.h b/iterators.h new file mode 100644 index 0000000..43e27e1 --- /dev/null +++ b/iterators.h @@ -0,0 +1,68 @@ +#pragma once + +template +class Iterator { +protected: + T* current; +public: + explicit Iterator(T* ptr) : current(ptr) {} + + T& operator*() const { return *current; } + T* operator->() const { return current; } + + bool operator!=(const Iterator& other) const { + return current != other.current; + } + + virtual Iterator& operator++() = 0; +}; + +template +class Traversal { + T* start; + +public: + explicit Traversal(T* start) : start(start) {} + + Policy begin() const { return Policy(start); } + Policy end() const { return Policy(nullptr); } +}; + +template +struct IteratorForward : public Iterator { + explicit IteratorForward(T* ptr) : Iterator(first(ptr)) {} + + static T* first(T* node) { + return node; + } + + static T* next(T* node) { + return node ? node->get_next() : nullptr; + } + + Iterator& operator++() override { + this->current = next(this->current); + return *this; + } +}; + +template +struct IteratorBackward : public Iterator { + explicit IteratorBackward(T* ptr) : Iterator(first(ptr)) {} + + static T* first(T* node) { + if (!node) return nullptr; + while (node->get_next()) node = node->get_next(); + return node; + } + + static T* next(T* node) { + return node ? node->get_prev() : nullptr; + } + + Iterator& operator++() override { + this->current = next(this->current); + return *this; + } +}; + diff --git a/main.h b/main.h new file mode 100644 index 0000000..5a3339e --- /dev/null +++ b/main.h @@ -0,0 +1,43 @@ +#pragma once + +#include "iterators.h" + +class IShape { + IShape* next = nullptr; + IShape* prev = nullptr; + +public: + virtual ~IShape() = default; + virtual void draw() const = 0; + virtual double area() const = 0; + + void set_next(IShape* n) { + next = n; + if (n) n->prev = this; + } + + IShape* get_next() const { return next; } + IShape* get_prev() const { return prev; } + + template + Traversal traverse() { + return Traversal(this); + } + + using forward = IteratorForward; + using backward = IteratorBackward; +}; + +class Circle : public IShape { + double r; +public: + Circle(double radius) : r(radius) {} + + void draw() const override { + std::cout << "Drawing Circle of radius " << r << "\n"; + } + + double area() const override { + return 3.14159 * r * r; + } +}; diff --git a/raw_ptr b/raw_ptr new file mode 100755 index 0000000000000000000000000000000000000000..99d7267b6c0166772b9ec591eccab45fd280d477 GIT binary patch literal 18080 zcmeHPe{fXSb-pVhBOHtbfmj6x77Pv;v(^fMMH=h{Y4KAH@BiPH(mWKx`&Ix@sy61xNGG^TZDO5M04VmDQA>dI-$ z_B;2Tv-|e3YsX3d=pTEB)w$<8Kkm8bzIWey_r1#>g?I0&@%faLT6M1??nt6486^Pl~9S0DA`pimv43? zLKXLe?CMCwyqE6LLZyU?ywIMXj8XjhZ-IW9;}`0-quk8i<>=3Ttdy>2yCLZe$3^KP zyW^W2{o~t9X(Q)TsN|E}(65dCdTF!cMhW%W4M{v6+QD{0sSPSUuiLTTq`e5+8Gh|X zdFfLQtb|H?ABP>~<<~7T%-!5xrEzHF{tBh>rgC>O(Z99z?qqCJGLg!SZW?Xdx@l`` zAe#=fXgS5@$Bz!1`@8xShGm*CcBg8_9bWvAY$?l0zxA=qV@;n}{p8ivFYLD>U*GvP z>-$SdhvFt1(xF2Bc*r$R^#=S%$H~W+be%9N7vq03yzJz{c89z1?_NNQZ-iAB94;w? zzX_}yzN-Shy@H>k&@b2S_bT{#r2w=+?2jcQhlZ88zpE#m%!XsA^?sr&*le27(NU{EaVQwP2lb?t&6@VuNZd@M2GZdh zwOU}2O_WiDAIlucW#Z zh-$mmXgX&rvoCcxk&2n!@oa7w38Az_A2y>y51Rv40x?k-QBLNtl}G`hzy}f(#gVvz zIBUnE8#mIKyOr3%DD;U75*Kyw``g>i&4Ffh|L)G6?R)p4-Wu54qEOwjv(pR)HV3x3 zWiEjOn=OIXLTz)g+7j4;L9fNkT!*uDK5F&&`P2gZ>U6EfxhjG8siQbX(uv{|J!dqjH#+todZwB zhx(%|BYtTjaf?EPml*rbmmbITGEcqAd~SJS0nJ4J%Jy}dC!BtQU%ro|j;_r8#9wjYI6w+z#)V@b3uV@Y z;{Ym@ITyaDfTI17!%!^JXF_D2qwAr>NcbuCGaq%iHWGf?h0}FU%CrmTTQV(r(S`FZ zp2jb_@P*=}N~;;DW}upZY6jjj18+5~{FQO+&3a?9?w{{g%J}1HyC#3pIQE13v)VSl z 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 K<}vWF>VE+_ERA{q literal 0 HcmV?d00001 diff --git a/main.c b/raw_ptr.cc similarity index 62% rename from main.c rename to raw_ptr.cc index f4a8e19..bbf2f0d 100644 --- a/main.c +++ b/raw_ptr.cc @@ -1,17 +1,5 @@ #include - -struct IShape { - virtual void draw() const = 0; - virtual ~IShape() = default; -}; - -class Circle : public IShape { -public: - void draw() const override { - std::cout << "Circle::draw()\n"; - } -}; - +#include "main.h" template class Wrapper { @@ -39,12 +27,12 @@ void render_shape_by_ref(IShape& shape) { } int main() { - Circle c; - Wrapper w(&c); + Circle circle {10}; + Wrapper wrapped(&circle); - w->draw(); + std::cout << wrapped->area() << "\n"; - render_shape_by_ptr(w); + render_shape_by_ptr(wrapped); - render_shape_by_ref(w); + render_shape_by_ref(wrapped); } diff --git a/smart_ptr b/smart_ptr new file mode 100755 index 0000000000000000000000000000000000000000..2f1a1872934f2fcf913fb815f2bdf93a58832e53 GIT binary patch literal 35808 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 +#include +#include "main.h" + +template +class Wrapper { + std::shared_ptr impl; + +public: + explicit Wrapper(std::shared_ptr ptr) : impl(std::move(ptr)) {} + + T* operator->() { return impl.get(); } + const T* operator->() const { return impl.get(); } + + std::shared_ptr get() const { return impl; } + + operator std::shared_ptr() const { return impl; } + operator const std::shared_ptr&() const { return impl; } + operator std::shared_ptr&() { return impl; } + + void myHelper() const { + std::cout << "[Wrapper] Helper method called\n"; + } +}; + +void draw_shape(const std::shared_ptr& shape) { + shape->draw(); +} + +int main() { + auto circle = std::make_shared(10.0); + Wrapper wrapped(circle); + + wrapped->draw(); + + std::cout << "Area: " << wrapped->area() << "\n"; + + wrapped.myHelper(); + + draw_shape(wrapped); + + std::shared_ptr copy = wrapped; + draw_shape(copy); +} diff --git a/smart_ptr_iterable b/smart_ptr_iterable new file mode 100755 index 0000000000000000000000000000000000000000..560617e9738608cbfdc5f99b0a40c77255831c02 GIT binary patch literal 35728 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�y<*`|}@wB|u@Z>x{K*n+ToT0$sX z>(^wJj1+^N*=mKx=M~fzST6mzx7P-B8`I|^8IHGm(=QC{fLU=nG9Q z8HzBcVD**wK8^p&)O%AH;FnmHSaib!*b}EHno}43`H$_C+aGK()Y@M4?8Kps<*)t% zP2y8CiIIU1!l;2U6_efSl1eqp!W1;kC@W9WO|oE|n)xqf6h76ZVPXm`nf%j1&dH|` zAIDK2J;Dr!YaUwF`XlsJp{X#bNeh;1B`BV1bCgYZrJD$E69VrP#&vJ4S%J?O;mb&9 zJYD!T(mKT38nyg%h2zDwsaiN3(R>J_D)E!L$_b;4E!>cV2Nzm=~=5a~~2;dJWC)on}_HSFn2U-HsA z?$dN1S%lHm6lM$iYRd99HqxNtZkzO?s;Z&Lq(3YYs?{PvO<<6ivKvcIy&J`MeAquj z`N(N~Ma&sO;K%r)m8v7c%sN9u2!WXhp{foe}@NS(T)oU)NHf3k1cq2&`_vARAwmzdx&ztd;( zumq^9UM+XSu%Ju7iHg0VJDo1Vz@2z^MGX_RZatNqPIPB|ngNFv^R-JYy7i@8hs~c@ zFC~AmFJV)BDlhT%Ki8;rt=iIjOHSke>-N958T zQ+t_Jp)YpDTh)yP*o^Mt=&w%daW)lGybc_g4^{t6*|I?yT-Iu#rm4KP#foi%y<~&; zemW7H?v3aVL?+yluW~0F+V&mGsWGKoAAa(+&5{OuhqN`Zw)#{@cd>JH>q%>}y9yX8 zd}(hr;G?GM`>Eu~sTwyie5#e3vvujOhLcCs=|ousE?U;06VrSZ)ftxP)1If+jKl&I z%aR&iKTXAG=BwpmzFMYh^C?*9wedalQ=V}7a!;)ZQUyl2F=WC^X~(Wq_ac%*`Dv~$ z79;vw{1XwcdYi(b7JMrf*HF6x(dJ5cmvS&v;QlRXeeGh4mgUXfh~rnL{h#o;Gq z3cik8briCurXn46%21oSr%jR5^@VKIq`qIX?3y{~Q3`z%)aOx!QqKs~rL>~9I}^g|+kFZH)#k3<^x`d48x3HN`Q{fphi zdkE=%uoHEZvm1qx-7QgX186j?X|tTsZ}{Ohqp&p;^%r7G#=^F62zTM5yB$zNdm!jr z6!0;G4@WPe7^$)&6g3-#zTK^;LepqibLdybK&Uk-VS$IcR9-5;XKlf#QK+t43UOMv zJ%l8kMEs3LA$CeclAdKi?vVQJu+ZPkPcJn4AWc%J2A|6IcQpFjqKM%1#d9T9|MIS7 z$T`U&H6T){>}?64E-f9)0izI)SG3@%33}AyKXuUaLG*}RCQHemp-+U$b2iLYdF7la zJ+3z!e^S1T%L|p~vnVee^4z0NVUI@4Nw`KtghYO<7<_u+)f`)|mi z4wB(KzKjIDTPEe@eKMg}b7s+B@(H~Ye0o<+((=BV&|xl5`jeibKf^{ZPN+|$yu3dr zRNkMH`lY18Y|6wqkEL*q##o%C-ldz^74GN(8Pm^uJR)GS$Fv> zHAmk2#N+TuhkN|}1YEM8^uN46BlKlrI*tOzIi3C^{+#9I{V<`lx2*GU*Z*@@`F*82 zx6l~gn{XcDKZ3oD6KDNxU(_6-@_eJ@cQwcO5DYxhuf_)Dk@sVTy6cm)&>0X&&!BVI zOS}&#?*&Rel1+!Ch323<=_KXlIbfmk{;w+RC@<;xC`@BV%FBDALY?u8%1FK9fBzGh zvwnI1R_Hz|4hjynCLIh3(Irrn@BmwQSLaWQ+khs zvJ|;+DKF3e3R}cEsmn!GRuAjH3GXM+fyXn|cf&=0X%}8gO6X4c +#include + +#include "main.h" + +int main() { + auto c1 = std::make_shared(3.0); + auto c2 = std::make_shared(5.0); + auto c3 = std::make_shared(7.0); + + c1->set_next(c2.get()); + c2->set_next(c3.get()); + + std::cout << "Forward:\n"; + for (auto& shape : c1->traverse()) { + shape.draw(); + } + + std::cout << "\nBackward:\n"; + for (auto& shape : c1->traverse()) { + shape.draw(); + } +}