diff options
author | root <root@no.no.james.local> | 2015-04-23 18:31:49 +0100 |
---|---|---|
committer | root <root@no.no.james.local> | 2015-04-23 18:31:49 +0100 |
commit | 8d24cdce756fc8a4b9ef0b273b841b18b0837f04 (patch) | |
tree | 6d2d9c9f281a1b2ee5210fb8eeabc2af49566738 | |
download | python-8d24cdce756fc8a4b9ef0b273b841b18b0837f04.tar.gz python-8d24cdce756fc8a4b9ef0b273b841b18b0837f04.tar.bz2 python-8d24cdce756fc8a4b9ef0b273b841b18b0837f04.zip |
meh
-rw-r--r-- | librns510.c | 96 | ||||
-rw-r--r-- | librns510.h | 3 | ||||
-rw-r--r-- | rns510.html | 463 | ||||
-rw-r--r-- | rns510.pyx | 47 | ||||
-rwxr-xr-x | setup.py | 16 |
5 files changed, 625 insertions, 0 deletions
diff --git a/librns510.c b/librns510.c new file mode 100644 index 0000000..060c766 --- /dev/null +++ b/librns510.c @@ -0,0 +1,96 @@ +#include <stdint.h> +#include <byteswap.h> +#include <stdio.h> +#include <string.h> +#include <strings.h> +#include <stdlib.h> +#include <inttypes.h> + +#define POI_CA 0x80000034 /*0 */ +#define POI_CB 0xF1C71CD4 /*160 */ +// +#define ZERO (POI_CA) +#define SCALE (((double) (POI_CB-POI_CA))/160.) + +static void +fromz (int64_t a, double *lat, double *lon) +{ + uint64_t b, c; + uint32_t d, e, f; + + memcpy (&b, &a, sizeof (a)); + e = f = 0; + + for (c = 1, d = 1; c; c <<= 1, d <<= 1) + { + if (b & c) + e |= d; + c <<= 1; + if (b & c) + f |= d; + } + + *lon = e; + *lat = f; + + *lon -= ZERO; + *lat -= ZERO; + + *lon /= SCALE; + *lat /= SCALE; + +} + +static void +toz (double lat, double lon, int64_t * a) +{ + uint64_t b, c; + uint32_t d, e, f; + + lon *= SCALE; + lat *= SCALE; + lon += ZERO; + lat += ZERO; + + e = (uint32_t) (lon + .5); + f = (uint32_t) (lat + .5); + + //printf("%.1f %x\n",lat-ZERO, e,f); + + b = 0; + for (c = 1, d = 1; c; c <<= 1, d <<= 1) + { + if (e & d) + b |= c; + c <<= 1; + if (f & d) + b |= c; + } + + + memcpy (a, &b, sizeof (*a)); +} + +void +librns510_encode (const char *slat, const char *slon, char *out) +{ + double lat = atof (slat), lon = atof (slon); + int64_t z; + + toz (lat, lon, &z); + + sprintf (out, "%" PRId64, z); +} + +void +librns510_decode (const char *code, char *slat, char *slon) +{ + double lat, lon; + int64_t z = atoll (code); + + fromz (z, &lat, &lon); + + sprintf (slat, "%.10f", lat); + sprintf (slon, "%.10f", lon); + +} diff --git a/librns510.h b/librns510.h new file mode 100644 index 0000000..377ba61 --- /dev/null +++ b/librns510.h @@ -0,0 +1,3 @@ +/* librns510.c */ +void librns510_encode (const char *slat, const char *slon, char *out); +void librns510_decode (const char *code, char *slat, char *slon); diff --git a/rns510.html b/rns510.html new file mode 100644 index 0000000..4a4f67e --- /dev/null +++ b/rns510.html @@ -0,0 +1,463 @@ +<!DOCTYPE html> +<!-- Generated by Cython 0.21.1 --> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <style type="text/css"> + +body.cython { font-family: courier; font-size: 12; } + +.cython.tag { } +.cython.line { margin: 0em } +.cython.code { font-size: 9; color: #444444; display: none; margin: 0px 0px 0px 20px; } + +.cython.code .py_c_api { color: red; } +.cython.code .py_macro_api { color: #FF7000; } +.cython.code .pyx_c_api { color: #FF3000; } +.cython.code .pyx_macro_api { color: #FF7000; } +.cython.code .refnanny { color: #FFA000; } +.cython.code .error_goto { color: #FFA000; } + +.cython.code .coerce { color: #008000; border: 1px dotted #008000 } +.cython.code .py_attr { color: #FF0000; font-weight: bold; } +.cython.code .c_attr { color: #0000FF; } +.cython.code .py_call { color: #FF0000; font-weight: bold; } +.cython.code .c_call { color: #0000FF; } + +.cython.score-0 {background-color: #FFFFff;} +.cython.score-1 {background-color: #FFFFe7;} +.cython.score-2 {background-color: #FFFFd4;} +.cython.score-3 {background-color: #FFFFc4;} +.cython.score-4 {background-color: #FFFFb6;} +.cython.score-5 {background-color: #FFFFaa;} +.cython.score-6 {background-color: #FFFF9f;} +.cython.score-7 {background-color: #FFFF96;} +.cython.score-8 {background-color: #FFFF8d;} +.cython.score-9 {background-color: #FFFF86;} +.cython.score-10 {background-color: #FFFF7f;} +.cython.score-11 {background-color: #FFFF79;} +.cython.score-12 {background-color: #FFFF73;} +.cython.score-13 {background-color: #FFFF6e;} +.cython.score-14 {background-color: #FFFF6a;} +.cython.score-15 {background-color: #FFFF66;} +.cython.score-16 {background-color: #FFFF62;} +.cython.score-17 {background-color: #FFFF5e;} +.cython.score-18 {background-color: #FFFF5b;} +.cython.score-19 {background-color: #FFFF57;} +.cython.score-20 {background-color: #FFFF55;} +.cython.score-21 {background-color: #FFFF52;} +.cython.score-22 {background-color: #FFFF4f;} +.cython.score-23 {background-color: #FFFF4d;} +.cython.score-24 {background-color: #FFFF4b;} +.cython.score-25 {background-color: #FFFF48;} +.cython.score-26 {background-color: #FFFF46;} +.cython.score-27 {background-color: #FFFF44;} +.cython.score-28 {background-color: #FFFF43;} +.cython.score-29 {background-color: #FFFF41;} +.cython.score-30 {background-color: #FFFF3f;} +.cython.score-31 {background-color: #FFFF3e;} +.cython.score-32 {background-color: #FFFF3c;} +.cython.score-33 {background-color: #FFFF3b;} +.cython.score-34 {background-color: #FFFF39;} +.cython.score-35 {background-color: #FFFF38;} +.cython.score-36 {background-color: #FFFF37;} +.cython.score-37 {background-color: #FFFF36;} +.cython.score-38 {background-color: #FFFF35;} +.cython.score-39 {background-color: #FFFF34;} +.cython.score-40 {background-color: #FFFF33;} +.cython.score-41 {background-color: #FFFF32;} +.cython.score-42 {background-color: #FFFF31;} +.cython.score-43 {background-color: #FFFF30;} +.cython.score-44 {background-color: #FFFF2f;} +.cython.score-45 {background-color: #FFFF2e;} +.cython.score-46 {background-color: #FFFF2d;} +.cython.score-47 {background-color: #FFFF2c;} +.cython.score-48 {background-color: #FFFF2b;} +.cython.score-49 {background-color: #FFFF2b;} +.cython.score-50 {background-color: #FFFF2a;} +.cython.score-51 {background-color: #FFFF29;} +.cython.score-52 {background-color: #FFFF29;} +.cython.score-53 {background-color: #FFFF28;} +.cython.score-54 {background-color: #FFFF27;} +.cython.score-55 {background-color: #FFFF27;} +.cython.score-56 {background-color: #FFFF26;} +.cython.score-57 {background-color: #FFFF26;} +.cython.score-58 {background-color: #FFFF25;} +.cython.score-59 {background-color: #FFFF24;} +.cython.score-60 {background-color: #FFFF24;} +.cython.score-61 {background-color: #FFFF23;} +.cython.score-62 {background-color: #FFFF23;} +.cython.score-63 {background-color: #FFFF22;} +.cython.score-64 {background-color: #FFFF22;} +.cython.score-65 {background-color: #FFFF22;} +.cython.score-66 {background-color: #FFFF21;} +.cython.score-67 {background-color: #FFFF21;} +.cython.score-68 {background-color: #FFFF20;} +.cython.score-69 {background-color: #FFFF20;} +.cython.score-70 {background-color: #FFFF1f;} +.cython.score-71 {background-color: #FFFF1f;} +.cython.score-72 {background-color: #FFFF1f;} +.cython.score-73 {background-color: #FFFF1e;} +.cython.score-74 {background-color: #FFFF1e;} +.cython.score-75 {background-color: #FFFF1e;} +.cython.score-76 {background-color: #FFFF1d;} +.cython.score-77 {background-color: #FFFF1d;} +.cython.score-78 {background-color: #FFFF1c;} +.cython.score-79 {background-color: #FFFF1c;} +.cython.score-80 {background-color: #FFFF1c;} +.cython.score-81 {background-color: #FFFF1c;} +.cython.score-82 {background-color: #FFFF1b;} +.cython.score-83 {background-color: #FFFF1b;} +.cython.score-84 {background-color: #FFFF1b;} +.cython.score-85 {background-color: #FFFF1a;} +.cython.score-86 {background-color: #FFFF1a;} +.cython.score-87 {background-color: #FFFF1a;} +.cython.score-88 {background-color: #FFFF1a;} +.cython.score-89 {background-color: #FFFF19;} +.cython.score-90 {background-color: #FFFF19;} +.cython.score-91 {background-color: #FFFF19;} +.cython.score-92 {background-color: #FFFF19;} +.cython.score-93 {background-color: #FFFF18;} +.cython.score-94 {background-color: #FFFF18;} +.cython.score-95 {background-color: #FFFF18;} +.cython.score-96 {background-color: #FFFF18;} +.cython.score-97 {background-color: #FFFF17;} +.cython.score-98 {background-color: #FFFF17;} +.cython.score-99 {background-color: #FFFF17;} +.cython.score-100 {background-color: #FFFF17;} +.cython.score-101 {background-color: #FFFF16;} +.cython.score-102 {background-color: #FFFF16;} +.cython.score-103 {background-color: #FFFF16;} +.cython.score-104 {background-color: #FFFF16;} +.cython.score-105 {background-color: #FFFF16;} +.cython.score-106 {background-color: #FFFF15;} +.cython.score-107 {background-color: #FFFF15;} +.cython.score-108 {background-color: #FFFF15;} +.cython.score-109 {background-color: #FFFF15;} +.cython.score-110 {background-color: #FFFF15;} +.cython.score-111 {background-color: #FFFF15;} +.cython.score-112 {background-color: #FFFF14;} +.cython.score-113 {background-color: #FFFF14;} +.cython.score-114 {background-color: #FFFF14;} +.cython.score-115 {background-color: #FFFF14;} +.cython.score-116 {background-color: #FFFF14;} +.cython.score-117 {background-color: #FFFF14;} +.cython.score-118 {background-color: #FFFF13;} +.cython.score-119 {background-color: #FFFF13;} +.cython.score-120 {background-color: #FFFF13;} +.cython.score-121 {background-color: #FFFF13;} +.cython.score-122 {background-color: #FFFF13;} +.cython.score-123 {background-color: #FFFF13;} +.cython.score-124 {background-color: #FFFF13;} +.cython.score-125 {background-color: #FFFF12;} +.cython.score-126 {background-color: #FFFF12;} +.cython.score-127 {background-color: #FFFF12;} +.cython.score-128 {background-color: #FFFF12;} +.cython.score-129 {background-color: #FFFF12;} +.cython.score-130 {background-color: #FFFF12;} +.cython.score-131 {background-color: #FFFF12;} +.cython.score-132 {background-color: #FFFF11;} +.cython.score-133 {background-color: #FFFF11;} +.cython.score-134 {background-color: #FFFF11;} +.cython.score-135 {background-color: #FFFF11;} +.cython.score-136 {background-color: #FFFF11;} +.cython.score-137 {background-color: #FFFF11;} +.cython.score-138 {background-color: #FFFF11;} +.cython.score-139 {background-color: #FFFF11;} +.cython.score-140 {background-color: #FFFF11;} +.cython.score-141 {background-color: #FFFF10;} +.cython.score-142 {background-color: #FFFF10;} +.cython.score-143 {background-color: #FFFF10;} +.cython.score-144 {background-color: #FFFF10;} +.cython.score-145 {background-color: #FFFF10;} +.cython.score-146 {background-color: #FFFF10;} +.cython.score-147 {background-color: #FFFF10;} +.cython.score-148 {background-color: #FFFF10;} +.cython.score-149 {background-color: #FFFF10;} +.cython.score-150 {background-color: #FFFF0f;} +.cython.score-151 {background-color: #FFFF0f;} +.cython.score-152 {background-color: #FFFF0f;} +.cython.score-153 {background-color: #FFFF0f;} +.cython.score-154 {background-color: #FFFF0f;} +.cython.score-155 {background-color: #FFFF0f;} +.cython.score-156 {background-color: #FFFF0f;} +.cython.score-157 {background-color: #FFFF0f;} +.cython.score-158 {background-color: #FFFF0f;} +.cython.score-159 {background-color: #FFFF0f;} +.cython.score-160 {background-color: #FFFF0f;} +.cython.score-161 {background-color: #FFFF0e;} +.cython.score-162 {background-color: #FFFF0e;} +.cython.score-163 {background-color: #FFFF0e;} +.cython.score-164 {background-color: #FFFF0e;} +.cython.score-165 {background-color: #FFFF0e;} +.cython.score-166 {background-color: #FFFF0e;} +.cython.score-167 {background-color: #FFFF0e;} +.cython.score-168 {background-color: #FFFF0e;} +.cython.score-169 {background-color: #FFFF0e;} +.cython.score-170 {background-color: #FFFF0e;} +.cython.score-171 {background-color: #FFFF0e;} +.cython.score-172 {background-color: #FFFF0e;} +.cython.score-173 {background-color: #FFFF0d;} +.cython.score-174 {background-color: #FFFF0d;} +.cython.score-175 {background-color: #FFFF0d;} +.cython.score-176 {background-color: #FFFF0d;} +.cython.score-177 {background-color: #FFFF0d;} +.cython.score-178 {background-color: #FFFF0d;} +.cython.score-179 {background-color: #FFFF0d;} +.cython.score-180 {background-color: #FFFF0d;} +.cython.score-181 {background-color: #FFFF0d;} +.cython.score-182 {background-color: #FFFF0d;} +.cython.score-183 {background-color: #FFFF0d;} +.cython.score-184 {background-color: #FFFF0d;} +.cython.score-185 {background-color: #FFFF0d;} +.cython.score-186 {background-color: #FFFF0d;} +.cython.score-187 {background-color: #FFFF0c;} +.cython.score-188 {background-color: #FFFF0c;} +.cython.score-189 {background-color: #FFFF0c;} +.cython.score-190 {background-color: #FFFF0c;} +.cython.score-191 {background-color: #FFFF0c;} +.cython.score-192 {background-color: #FFFF0c;} +.cython.score-193 {background-color: #FFFF0c;} +.cython.score-194 {background-color: #FFFF0c;} +.cython.score-195 {background-color: #FFFF0c;} +.cython.score-196 {background-color: #FFFF0c;} +.cython.score-197 {background-color: #FFFF0c;} +.cython.score-198 {background-color: #FFFF0c;} +.cython.score-199 {background-color: #FFFF0c;} +.cython.score-200 {background-color: #FFFF0c;} +.cython.score-201 {background-color: #FFFF0c;} +.cython.score-202 {background-color: #FFFF0c;} +.cython.score-203 {background-color: #FFFF0b;} +.cython.score-204 {background-color: #FFFF0b;} +.cython.score-205 {background-color: #FFFF0b;} +.cython.score-206 {background-color: #FFFF0b;} +.cython.score-207 {background-color: #FFFF0b;} +.cython.score-208 {background-color: #FFFF0b;} +.cython.score-209 {background-color: #FFFF0b;} +.cython.score-210 {background-color: #FFFF0b;} +.cython.score-211 {background-color: #FFFF0b;} +.cython.score-212 {background-color: #FFFF0b;} +.cython.score-213 {background-color: #FFFF0b;} +.cython.score-214 {background-color: #FFFF0b;} +.cython.score-215 {background-color: #FFFF0b;} +.cython.score-216 {background-color: #FFFF0b;} +.cython.score-217 {background-color: #FFFF0b;} +.cython.score-218 {background-color: #FFFF0b;} +.cython.score-219 {background-color: #FFFF0b;} +.cython.score-220 {background-color: #FFFF0b;} +.cython.score-221 {background-color: #FFFF0b;} +.cython.score-222 {background-color: #FFFF0a;} +.cython.score-223 {background-color: #FFFF0a;} +.cython.score-224 {background-color: #FFFF0a;} +.cython.score-225 {background-color: #FFFF0a;} +.cython.score-226 {background-color: #FFFF0a;} +.cython.score-227 {background-color: #FFFF0a;} +.cython.score-228 {background-color: #FFFF0a;} +.cython.score-229 {background-color: #FFFF0a;} +.cython.score-230 {background-color: #FFFF0a;} +.cython.score-231 {background-color: #FFFF0a;} +.cython.score-232 {background-color: #FFFF0a;} +.cython.score-233 {background-color: #FFFF0a;} +.cython.score-234 {background-color: #FFFF0a;} +.cython.score-235 {background-color: #FFFF0a;} +.cython.score-236 {background-color: #FFFF0a;} +.cython.score-237 {background-color: #FFFF0a;} +.cython.score-238 {background-color: #FFFF0a;} +.cython.score-239 {background-color: #FFFF0a;} +.cython.score-240 {background-color: #FFFF0a;} +.cython.score-241 {background-color: #FFFF0a;} +.cython.score-242 {background-color: #FFFF0a;} +.cython.score-243 {background-color: #FFFF0a;} +.cython.score-244 {background-color: #FFFF0a;} +.cython.score-245 {background-color: #FFFF0a;} +.cython.score-246 {background-color: #FFFF09;} +.cython.score-247 {background-color: #FFFF09;} +.cython.score-248 {background-color: #FFFF09;} +.cython.score-249 {background-color: #FFFF09;} +.cython.score-250 {background-color: #FFFF09;} +.cython.score-251 {background-color: #FFFF09;} +.cython.score-252 {background-color: #FFFF09;} +.cython.score-253 {background-color: #FFFF09;} +.cython.score-254 {background-color: #FFFF09;}.cython .hll { background-color: #ffffcc } +.cython { background: #f8f8f8; } +.cython .c { color: #408080; font-style: italic } /* Comment */ +.cython .err { border: 1px solid #FF0000 } /* Error */ +.cython .k { color: #008000; font-weight: bold } /* Keyword */ +.cython .o { color: #666666 } /* Operator */ +.cython .cm { color: #408080; font-style: italic } /* Comment.Multiline */ +.cython .cp { color: #BC7A00 } /* Comment.Preproc */ +.cython .c1 { color: #408080; font-style: italic } /* Comment.Single */ +.cython .cs { color: #408080; font-style: italic } /* Comment.Special */ +.cython .gd { color: #A00000 } /* Generic.Deleted */ +.cython .ge { font-style: italic } /* Generic.Emph */ +.cython .gr { color: #FF0000 } /* Generic.Error */ +.cython .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.cython .gi { color: #00A000 } /* Generic.Inserted */ +.cython .go { color: #888888 } /* Generic.Output */ +.cython .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ +.cython .gs { font-weight: bold } /* Generic.Strong */ +.cython .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.cython .gt { color: #0044DD } /* Generic.Traceback */ +.cython .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ +.cython .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ +.cython .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ +.cython .kp { color: #008000 } /* Keyword.Pseudo */ +.cython .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ +.cython .kt { color: #B00040 } /* Keyword.Type */ +.cython .m { color: #666666 } /* Literal.Number */ +.cython .s { color: #BA2121 } /* Literal.String */ +.cython .na { color: #7D9029 } /* Name.Attribute */ +.cython .nb { color: #008000 } /* Name.Builtin */ +.cython .nc { color: #0000FF; font-weight: bold } /* Name.Class */ +.cython .no { color: #880000 } /* Name.Constant */ +.cython .nd { color: #AA22FF } /* Name.Decorator */ +.cython .ni { color: #999999; font-weight: bold } /* Name.Entity */ +.cython .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ +.cython .nf { color: #0000FF } /* Name.Function */ +.cython .nl { color: #A0A000 } /* Name.Label */ +.cython .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ +.cython .nt { color: #008000; font-weight: bold } /* Name.Tag */ +.cython .nv { color: #19177C } /* Name.Variable */ +.cython .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ +.cython .w { color: #bbbbbb } /* Text.Whitespace */ +.cython .mf { color: #666666 } /* Literal.Number.Float */ +.cython .mh { color: #666666 } /* Literal.Number.Hex */ +.cython .mi { color: #666666 } /* Literal.Number.Integer */ +.cython .mo { color: #666666 } /* Literal.Number.Oct */ +.cython .sb { color: #BA2121 } /* Literal.String.Backtick */ +.cython .sc { color: #BA2121 } /* Literal.String.Char */ +.cython .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ +.cython .s2 { color: #BA2121 } /* Literal.String.Double */ +.cython .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ +.cython .sh { color: #BA2121 } /* Literal.String.Heredoc */ +.cython .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ +.cython .sx { color: #008000 } /* Literal.String.Other */ +.cython .sr { color: #BB6688 } /* Literal.String.Regex */ +.cython .s1 { color: #BA2121 } /* Literal.String.Single */ +.cython .ss { color: #19177C } /* Literal.String.Symbol */ +.cython .bp { color: #008000 } /* Name.Builtin.Pseudo */ +.cython .vc { color: #19177C } /* Name.Variable.Class */ +.cython .vg { color: #19177C } /* Name.Variable.Global */ +.cython .vi { color: #19177C } /* Name.Variable.Instance */ +.cython .il { color: #666666 } /* Literal.Number.Integer.Long */ + </style> + <script> + function toggleDiv(id) { + theDiv = id.nextElementSibling + if (theDiv.style.display != 'block') theDiv.style.display = 'block'; + else theDiv.style.display = 'none'; + } + </script> +</head> +<body class="cython"> +<p>Generated by Cython 0.21.1</p> +<p>Raw output: <a href="rns510.c">rns510.c</a></p> +<div class="cython"><pre class='cython line score-0'> 01: <span class="k">import</span> <span class="nn">cython</span></pre> +<pre class='cython line score-0'> 02: </pre> +<pre class='cython line score-0'> 03: <span class="k">from</span> <span class="nn">libc.stdlib</span> <span class="k">cimport</span> <span class="n">malloc</span></pre> +<pre class='cython line score-0'> 04: <span class="k">from</span> <span class="nn">libc.stdlib</span> <span class="k">cimport</span> <span class="n">free</span></pre> +<pre class='cython line score-0'> 05: </pre> +<pre class='cython line score-0'> 06: <span class="k">cdef</span> <span class="kr">extern</span> <span class="k">from</span> <span class="s">"librns510.h"</span><span class="p">:</span></pre> +<pre class='cython line score-0'> 07: <span class="n">void</span> <span class="n">librns510_encode</span><span class="p">(</span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">lat</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">lon</span><span class="p">,</span> <span class="n">char</span> <span class="o">*</span><span class="n">code</span><span class="p">)</span></pre> +<pre class='cython line score-0'> 08: <span class="k">cdef</span> <span class="kr">extern</span> <span class="k">from</span> <span class="s">"librns510.h"</span><span class="p">:</span></pre> +<pre class='cython line score-0'> 09: <span class="n">char</span> <span class="o">*</span><span class="n">librns510_decode</span><span class="p">(</span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">code</span><span class="p">,</span> <span class="n">char</span> <span class="o">*</span><span class="n">lat</span><span class="p">,</span> <span class="n">char</span> <span class="o">*</span><span class="n">lon</span><span class="p">)</span></pre> +<pre class='cython line score-0'> 10: </pre> +<pre class='cython line score-4' onclick='toggleDiv(this)'>+11: <span class="k">cdef</span> <span class="nf">rns510_encode</span><span class="p">(</span><span class="n">char</span> <span class="o">*</span><span class="n">lat</span><span class="p">,</span> <span class="n">char</span> <span class="o">*</span><span class="n">lon</span><span class="p">):</span></pre> +<pre class='cython code score-4'>static PyObject *__pyx_f_6rns510_rns510_encode(char *__pyx_v_lat, char *__pyx_v_lon) { + PyObject *__pyx_v_py_string = 0; + char *__pyx_v_out; + PyObject *__pyx_r = NULL; + <span class='refnanny'>__Pyx_RefNannyDeclarations</span> + <span class='refnanny'>__Pyx_RefNannySetupContext</span>("rns510_encode", 0); +/* … */ + /* function exit code */ + __pyx_L1_error:; + <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1); + <span class='pyx_c_api'>__Pyx_AddTraceback</span>("rns510.rns510_encode", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_py_string); + <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r); + <span class='refnanny'>__Pyx_RefNannyFinishContext</span>(); + return __pyx_r; +} +</pre><pre class='cython line score-5' onclick='toggleDiv(this)'>+12: <span class="k">assert</span> <span class="n">lat</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">NULL</span></pre> +<pre class='cython code score-5'> #ifndef CYTHON_WITHOUT_ASSERTIONS + if (unlikely(!Py_OptimizeFlag)) { + if (unlikely(!((__pyx_v_lat != NULL) != 0))) { + <span class='py_c_api'>PyErr_SetNone</span>(PyExc_AssertionError); + <span class='error_goto'>{__pyx_filename = __pyx_f[0]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span> + } + } + #endif +</pre><pre class='cython line score-5' onclick='toggleDiv(this)'>+13: <span class="k">assert</span> <span class="n">lon</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">NULL</span></pre> +<pre class='cython code score-5'> #ifndef CYTHON_WITHOUT_ASSERTIONS + if (unlikely(!Py_OptimizeFlag)) { + if (unlikely(!((__pyx_v_lon != NULL) != 0))) { + <span class='py_c_api'>PyErr_SetNone</span>(PyExc_AssertionError); + <span class='error_goto'>{__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}</span> + } + } + #endif +</pre><pre class='cython line score-0'> 14: <span class="k">cdef</span> <span class="kt">bytes</span> <span class="nf">py_string</span></pre> +<pre class='cython line score-0'> 15: <span class="k">cdef</span> <span class="kt">char</span> *<span class="kt">out</span>;</pre> +<pre class='cython line score-0'> 16: </pre> +<pre class='cython line score-0' onclick='toggleDiv(this)'>+17: <span class="n">out</span><span class="o">=<</span><span class="n">char</span> <span class="o">*></span> <span class="n">malloc</span><span class="p">(</span><span class="mf">128</span><span class="p">)</span></pre> +<pre class='cython code score-0'> __pyx_v_out = ((char *)malloc(128)); +</pre><pre class='cython line score-0' onclick='toggleDiv(this)'>+18: <span class="n">librns510_encode</span><span class="p">(</span><span class="n">lat</span><span class="p">,</span><span class="n">lon</span><span class="p">,</span><span class="n">out</span><span class="p">)</span></pre> +<pre class='cython code score-0'> librns510_encode(__pyx_v_lat, __pyx_v_lon, __pyx_v_out); +</pre><pre class='cython line score-0' onclick='toggleDiv(this)'>+19: <span class="k">try</span><span class="p">:</span></pre> +<pre class='cython code score-0'> /*try:*/ { +</pre><pre class='cython line score-2' onclick='toggleDiv(this)'>+20: <span class="n">py_string</span><span class="o">=</span><span class="n">out</span></pre> +<pre class='cython code score-2'> __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyBytes_FromString</span>(__pyx_v_out);<span class='error_goto'> if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L4_error;}</span> + <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1); + __pyx_v_py_string = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + } +</pre><pre class='cython line score-0'> 21: <span class="k">finally</span><span class="p">:</span></pre> +<pre class='cython line score-11' onclick='toggleDiv(this)'>+22: <span class="n">free</span><span class="p">(</span><span class="n">out</span><span class="p">)</span></pre> +<pre class='cython code score-11'> /*finally:*/ { + /*normal exit:*/{ + free(__pyx_v_out); + goto __pyx_L5; + } + /*exception exit:*/{ + __pyx_L4_error:; + __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; + <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1); __pyx_t_1 = 0; + if (PY_MAJOR_VERSION >= 3) <span class='pyx_c_api'>__Pyx_ExceptionSwap</span>(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); + if ((PY_MAJOR_VERSION < 3) || unlikely(<span class='pyx_c_api'>__Pyx_GetException</span>(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0)) <span class='pyx_c_api'>__Pyx_ErrFetch</span>(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); + <span class='refnanny'>__Pyx_XGOTREF</span>(__pyx_t_5); + <span class='refnanny'>__Pyx_XGOTREF</span>(__pyx_t_6); + <span class='refnanny'>__Pyx_XGOTREF</span>(__pyx_t_7); + <span class='refnanny'>__Pyx_XGOTREF</span>(__pyx_t_8); + <span class='refnanny'>__Pyx_XGOTREF</span>(__pyx_t_9); + <span class='refnanny'>__Pyx_XGOTREF</span>(__pyx_t_10); + __pyx_t_2 = __pyx_lineno; __pyx_t_3 = __pyx_clineno; __pyx_t_4 = __pyx_filename; + { + free(__pyx_v_out); + } + if (PY_MAJOR_VERSION >= 3) { + <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_8); + <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_9); + <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_10); + <span class='pyx_c_api'>__Pyx_ExceptionReset</span>(__pyx_t_8, __pyx_t_9, __pyx_t_10); + } + <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_5); + <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_6); + <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_7); + <span class='pyx_c_api'>__Pyx_ErrRestore</span>(__pyx_t_5, __pyx_t_6, __pyx_t_7); + __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; + __pyx_lineno = __pyx_t_2; __pyx_clineno = __pyx_t_3; __pyx_filename = __pyx_t_4; + goto __pyx_L1_error; + } + __pyx_L5:; + } +</pre><pre class='cython line score-0'> 23: </pre> +<pre class='cython line score-2' onclick='toggleDiv(this)'>+24: <span class="k">return</span> <span class="n">py_string</span></pre> +<pre class='cython code score-2'> <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r); + <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_py_string); + __pyx_r = __pyx_v_py_string; + goto __pyx_L0; +</pre><pre class='cython line score-0'> 25: </pre> +</div></body></html> diff --git a/rns510.pyx b/rns510.pyx new file mode 100644 index 0000000..ca0f0ff --- /dev/null +++ b/rns510.pyx @@ -0,0 +1,47 @@ +import cython + +from libc.stdlib cimport malloc +from libc.stdlib cimport free + +cdef extern from "librns510.h": + void librns510_encode(const char *lat, const char *lon, char *code) +cdef extern from "librns510.h": + char *librns510_decode(const char *code, char *lat, char *lon) + +def encode(char *lat, char *lon): + assert lat is not NULL + assert lon is not NULL + cdef bytes py_string + cdef char *out + + out=<char *> malloc(128) + librns510_encode(lat,lon,out) + try: + py_string=out + finally: + free(out) + + return py_string + +def decode(char *code): + assert code is not NULL + cdef bytes py_lat + cdef bytes py_lon + cdef char *lat + cdef char *lon + + lat=<char *> malloc(128) + lon=<char *> malloc(128) + librns510_decode(code,lat,lon) + try: + py_lat=lat + finally: + free(lat) + + try: + py_lon=lon + finally: + free(lon) + + return py_lat,py_lon + diff --git a/setup.py b/setup.py new file mode 100755 index 0000000..7c75641 --- /dev/null +++ b/setup.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python + +from distutils.core import setup +from Cython.Build import cythonize +from distutils.extension import Extension + + +sourcefiles = ['rns510.pyx', 'librns510.c' ] + +extensions = [Extension("rns510", sourcefiles)] + +setup( + name = "rns510", + ext_modules = cythonize(extensions) +) + |