From adb034002186d8ba1ce988e4cd63a78a54c58402 Mon Sep 17 00:00:00 2001
From: David Hendriks <davidhendriks93@gmail.com>
Date: Wed, 30 Oct 2019 17:34:55 +0000
Subject: [PATCH] added some functions that use pointers to do stuff

---
 .gitignore                        |   1 +
 python-c-api_solution/demolib.c   |  12 +++++++--
 python-c-api_solution/demolib.h   |   4 ++-
 python-c-api_solution/demolib.o   | Bin 1824 -> 2096 bytes
 python-c-api_solution/main.c      |  41 +++++++++++++++++++++++++++---
 python-c-api_solution/main.o      | Bin 1920 -> 2744 bytes
 python-c-api_solution/test_script | Bin 8664 -> 8712 bytes
 7 files changed, 51 insertions(+), 7 deletions(-)
 create mode 100644 .gitignore

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..5761abc
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+*.o
diff --git a/python-c-api_solution/demolib.c b/python-c-api_solution/demolib.c
index 39d66e9..fcb2dba 100644
--- a/python-c-api_solution/demolib.c
+++ b/python-c-api_solution/demolib.c
@@ -8,6 +8,12 @@ int add_number(int number_1, int number_2) {
     return result;
 }
 
+int multiply_number(int number_1, int number_2) {
+    int result = number_1 * number_2;
+    return result;
+}
+
+
 // https://stackoverflow.com/questions/8465006/how-do-i-concatenate-two-strings-in-c
 
 char* make_str(const char *s1, const char *s2) {
@@ -17,8 +23,10 @@ char* make_str(const char *s1, const char *s2) {
     return result;
 }
 
-int add_number_using_pointer() {
-    
+int add_number_using_pointer(int (*pf)(int, int), int number_1, int number_2) {
+    int result;
+    result = pf(number_1, number_2);
+    return result;
 }
 
 
diff --git a/python-c-api_solution/demolib.h b/python-c-api_solution/demolib.h
index 17ce344..16b5644 100644
--- a/python-c-api_solution/demolib.h
+++ b/python-c-api_solution/demolib.h
@@ -3,4 +3,6 @@
 // char construct_string(int number);
 
 int add_number(int number_1, int number_2);
-char* make_str(const char *s1, const char *s2);
\ No newline at end of file
+char* make_str(const char *s1, const char *s2);
+int add_number_using_pointer(int (*pf)(int, int), int number_1, int number_2);
+int multiply_number(int number_1, int number_2);
\ No newline at end of file
diff --git a/python-c-api_solution/demolib.o b/python-c-api_solution/demolib.o
index 5896b43ecea3a7fb3097c0b062930226d5bc57dd..ffc6c06f550025b0a750c2196115c828d48087e8 100644
GIT binary patch
delta 544
zcmZ3$w?SZn29p8nL@g8E&e}Jfr7yZ&-|(+@eK9epLNnB(^QlMk8wHQf+83RrPdY;%
zbo)N&4t?U$?fRngT<7)w7dl=4bi4jJIq{@E69dD<uhyzE3=9l5KnwzsAi|MPppD6y
zmo0>codd{K0OFX*ri}7ZAXWnqgMb!@fT>KK?8o>?5v&;~ss_YD42%rMASFOh0HGN4
zCnqwAGrEFFA21mVCZj;4U?NZzNY`ShYOTpTndI0@b4oG`aw;dEV{#5iOi78)E6q(x
zEs8HK&df`XFUZf#D@iSaYVd*5EI^tEi2wYDfM^`zS(6i)#Z?=TWciSEO+gappWMo9
zt(gE70R|fb2*bSBf+oIr@=oUCjAth|vY0den7ot4o{5)nav-DFWC2zU7&8FEtYWoe
zvV=%pVAbGsV1yX8U@{|{IcEXLBS4Ta*%8Ql0F|3Dxe>^#V1~$5O+E<ZU4W{L1llPN
E0FY0DTmS$7

delta 323
zcmdlWuz+uZ29pBIL@kqv<vEji8TBSRFj}yxFfcIKOrFaqKiPy;X7U17mdSq@&u|t1
zML|G*G9$A%qbZoQ0h7)ka<TzC%VZX2k;xT6_Ize53y5k4V<^o6q`86k&wmJT!XX|w
zS&&6sG6PAL7fDz3WJeb9$ptJ1lP|CwVC<Sak=2}0V)98=d&X0fA2Lc$-oeH**?>&~
ziC4fT!E}mYau=H&<2SgH4{Q>gKcH45OcrD}=bXR{;TlX11o9#nA-s&q6M?(~Ob}k+
O<clC4RAnU4a(Mtipj0~m

diff --git a/python-c-api_solution/main.c b/python-c-api_solution/main.c
index 3e05435..27d24aa 100644
--- a/python-c-api_solution/main.c
+++ b/python-c-api_solution/main.c
@@ -1,7 +1,12 @@
 #include <stdio.h>
+#include <stdlib.h>
 #include "demolib.h"
 
 
+
+
+
+
 int main(void) {
     // Testing stuff for add_number function
     int getal_1=2;
@@ -9,7 +14,7 @@ int main(void) {
 
     int result;
     result = add_number(getal_1, getal_2);
-    printf("%d\n", result);
+    printf("result of adding numbers: %d\n", result);
     //
 
 
@@ -19,13 +24,41 @@ int main(void) {
 
     char* s = make_str(str_1, str_2);
     // do things with s
-    printf("%s\n", s);
+    printf("result of concatting strings: %s\n", s);
 
     free(s); // deallocate the string
     // 
 
-    // testing stuff to 
-    
+    // testing stuff to use a pointer to use a function
+    int (*pf)(int, int);
+    int pointer_res;
+
+    pf = &add_number;
+    pointer_res = (pf)(5, 9);
+    printf("result of using a pointer to the add_number function: %d\n", pointer_res);
+    // 
+
+    // testing stuff to pass a pointer to a function that consecutively uses that pointer to add stuff
+    int (*pf2)(int, int);
+    int function_via_pointer_res;
+
+    pf2 = &add_number;
+    function_via_pointer_res = add_number_using_pointer(pf2, 10, 20);
+    printf("result of calling a function with a function pointer to add_number: %d\n", function_via_pointer_res);
+
+    int (*pf3)(int, int);
+    int function_via_pointer_res_2;
+
+    pf3 = &multiply_number;
+    function_via_pointer_res_2 = add_number_using_pointer(pf3, 10, 20);
+    printf("result of calling a function with a function pointer to multiply_number: %d\n", function_via_pointer_res_2);
+
+
+    //
+
+
+
+
 
 
 
diff --git a/python-c-api_solution/main.o b/python-c-api_solution/main.o
index e29df7dd325a7b1a79365f68f3ad84979b8f9351..da6dae0c35829ddfa9513192e590a17c9e87cb85 100644
GIT binary patch
literal 2744
zcmbtW-)j_C6h512)!M{v#fPAM7^#XWb;zQk1{(5%N#<cOqFH<?46~bAvt)NR?A)bE
zACf|$uuO&0r~U(l{sV<jL<PlI$b$uuJm#g4hl2VRp^%<4_uSp<bym=xaPK|$JKy>4
znYs7QX5B5$4CHd4EC=Jzn<*4v<zUaBNZkn-f<Y*Goxi>B|GBp5ZVVv2>E5w$NJ@7S
zccb&Hv$;#$j(b0G?{^+~x4)w426bt`yZs^gUdMgXbGN;ugbkt2GmjOJv4hZ#mnD+o
zawRWOg1boHz55ZW-y>-MNymMdxDPY)Rn7~{dGW_Fq~AT9mZi#noVbtQnz@IWds&%V
ziMy4NnZANQ9{{w%xLp@^vuXzm3$^H$9km<fuoaKlrxy-G0A;L$tjDV~qe>tIabwZK
zfw(c%OV;DHW1<B1a<dkRuw{#;Efzys#+Pf@)pk@7wPqyOGV?1zy)G3L&;F(+7E!S~
z*Q9&0Qmt3VyXiFWZPb?Qt6U?OHak5%W}hvU+mUG7mz)dE=($2WofXy!mz~iIPGLmi
z@+kml6UlPlUWeRDK6hg9;Gv)JV1I@fHL`I!=#xkCKMYI{9k8zCkdoqA9Z^4km-|^U
zEAz$xSooJ^7Aj?#1?fS2BV>Vg`Lw77+4Wj*Kx0Xlm`Alb(`QF)2wPrKUh6;agFAij
zi+%9%KKOJW{OdkAG=f^>RMG+b+2Y*PWYM3SnYrQ4`}31iMc0Sk5rk#D7ov*frO?Mq
z0@YR+YH>fk8$KUjFwPuS0B|zxY0m*Z#`f>Nv{A<CV@JEC@G-`TKd9l8j4S?eo)-;V
zoyiL0q(gh7^xFpi6wlXrG}lcu{0RC==V!*hz)^p$-x*hRs`~CRZt6ekqqC#&KS5uu
z`<!v5|0B;|X?*>?siR7D()m<6$LS)XQ9Zi;2;)lsY03gPukm$#o8!c%)-@+yZHS-@
z4xSr1E-J4T)&oa`D*~K_Km_2F;~1P)Q%)+)Mk9<c7Bxla%w8>>i$zdbLIS0Qi+;5g
zG{WvW|I@KCpB~M;=@W>NsrxNwlB;|gPhg{WIDt*KVg3Z|@Oz`*6>`;=W|+xm7&pIg
zYn;cl?qI@SVuUo`H@|?nr1{$3;ru&Z=(Mq*svjw-UBR9x>OM;p;8zx;`gBurYMjEL
z@^#){W<eY@xi>lAq;E5DSr<j$tp7S<S^Kxg2SV)=?H}c;e1%gz=Gq8Bo;TzdE||U%
m^iPzTPnfxP2*Gbu6k1&l-QIluPcf2}pXZ;tpqnWjGygx;x~S~{

delta 365
zcmdlX+Q2_SgUNwqqL!?R!Ex6+ObiSR$6X&V1F7!N2i>lBI<Ivee*xq%bh<w2c6~B&
zgUG~sPR|z}y{sTXk51PQ9^Iip?E1o^^O^@#El~IeQ0NDokHp>q(s%N(Y6=%aB16*T
zB~1F0Z!oC{b%BH(`2^aSoO#)pT6x$xCKs|xP1az(z|_Ss`4{uF$tzgwI15TkiW$<1
zQd1|3vqmy9OfF;<XJne($to{d4AKt-EI`Z$#DD%nK>g%EHu1?n*dBn4xy5eA#Q^df
z5FB8bEX85QcxtjBv-IQ~4izYC4Vd+iLwxcJc7e%1I3$=ZF-#WXv}61SQOK#n#K1Ut
s5~m&00p`h<IPEws7$N30OqS#_=iC7bKp^m#9LZ(QbpvWwBFJhv0Oy%)kpKVy

diff --git a/python-c-api_solution/test_script b/python-c-api_solution/test_script
index f97b74885b85f148dd55b72354cc0b1763672653..ba528aa60114d74a4dd2597f43a6fbfa1838d331 100755
GIT binary patch
delta 3255
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
W!%eOLmL|2gVI<t7{1z^RANwyt;2dZG

delta 2704
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

-- 
GitLab