summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/algorithms/sieve.zc28
-rw-r--r--examples/collections/word_freq.zc35
-rw-r--r--examples/data/config.json13
-rw-r--r--examples/data/json_config.zc99
-rw-r--r--examples/networking/echo_server.zc35
5 files changed, 210 insertions, 0 deletions
diff --git a/examples/algorithms/sieve.zc b/examples/algorithms/sieve.zc
new file mode 100644
index 0000000..25e2c5a
--- /dev/null
+++ b/examples/algorithms/sieve.zc
@@ -0,0 +1,28 @@
+
+import "std.zc"
+
+fn main() {
+ const LIMIT = 50;
+
+ var is_prime: bool[LIMIT];
+ for i in 0..LIMIT { is_prime[i] = true; }
+
+ is_prime[0] = false;
+ is_prime[1] = false;
+
+ for p in 2..LIMIT {
+ if is_prime[p] {
+ for (var i = p * p; i < LIMIT; i += p) {
+ is_prime[i] = false;
+ }
+ }
+ }
+
+ print "Primes up to {LIMIT}: ";
+ for i in 0..LIMIT {
+ if is_prime[i] {
+ print "{i} ";
+ }
+ }
+ println "";
+}
diff --git a/examples/collections/word_freq.zc b/examples/collections/word_freq.zc
new file mode 100644
index 0000000..781842c
--- /dev/null
+++ b/examples/collections/word_freq.zc
@@ -0,0 +1,35 @@
+
+import "std/map.zc"
+
+fn main() {
+ var text = "apple banana apple cherry banana apple";
+ var delim = " ";
+
+ var counts = Map<int>::new();
+ defer counts.free();
+
+ var temp = strdup(text);
+ defer free(temp);
+
+ var token = strtok(temp, delim);
+ while token != NULL {
+ if counts.contains(token) {
+ var val = counts.get(token).unwrap();
+ counts.put(token, val + 1);
+ } else {
+ counts.put(token, 1);
+ }
+ token = strtok(NULL, delim);
+ }
+
+ "Word Frequencies:";
+ "-----------------";
+
+ for i in 0..counts.capacity() {
+ if counts.is_slot_occupied(i) {
+ var k = counts.key_at(i);
+ var v = counts.val_at(i);
+ println "{k}: {v}";
+ }
+ }
+}
diff --git a/examples/data/config.json b/examples/data/config.json
new file mode 100644
index 0000000..e3dfe29
--- /dev/null
+++ b/examples/data/config.json
@@ -0,0 +1,13 @@
+{
+ "server_name": "ZenServer",
+ "port": 8080,
+ "max_connections": 100,
+ "features": {
+ "logging": true,
+ "metrics": false
+ },
+ "allowed_hosts": [
+ "localhost",
+ "127.0.0.1"
+ ]
+}
diff --git a/examples/data/json_config.zc b/examples/data/json_config.zc
new file mode 100644
index 0000000..ccfb1a2
--- /dev/null
+++ b/examples/data/json_config.zc
@@ -0,0 +1,99 @@
+
+import "std/fs.zc"
+import "std/json.zc"
+import "std/map.zc"
+import "std/option.zc"
+import "std/string.zc"
+import "std/core.zc"
+
+raw {
+ typedef struct JsonValue* JsonValuePtr;
+}
+
+struct Config {
+ server_name: String;
+ port: int;
+ logging: bool;
+}
+
+fn main() {
+ var path = "examples/data/config.json";
+
+ var content_res = File::read_all(path);
+ if content_res.is_err() {
+ !"Failed to read config file: {content_res.err}";
+ return 1;
+ }
+
+ var json_str = content_res.unwrap();
+
+ var json_res = JsonValue::parse(json_str.c_str());
+ if json_res.is_err() {
+ !"JSON Parse Error: {json_res.err}";
+ json_str.free();
+ return 1;
+ }
+
+ var root = json_res.unwrap();
+
+ defer {
+ json_str.free();
+ JsonValue::free(root);
+ free(root);
+ }
+
+ if (*root).kind.tag != JsonType::JSON_OBJECT().tag {
+ !"Expected JSON Object at root";
+ return 1;
+ }
+
+ var config = Config {
+ server_name: String::new("Unknown"),
+ port: 0,
+ logging: false
+ };
+
+ var obj_map = (*root).object_val;
+
+ if Map<JsonValue*>::contains(obj_map, "server_name") {
+ var opt = Map<JsonValue*>::get(obj_map, "server_name");
+ var val = opt.unwrap();
+ if (*val).kind.tag == JsonType::JSON_STRING().tag {
+ config.server_name.free();
+ config.server_name = String::new((*val).string_val);
+ }
+ }
+
+ if Map<JsonValue*>::contains(obj_map, "port") {
+ var opt = Map<JsonValue*>::get(obj_map, "port");
+ var val = opt.unwrap();
+ if (*val).kind.tag == JsonType::JSON_NUMBER().tag {
+ config.port = (int)(*val).number_val;
+ }
+ }
+
+ if Map<JsonValue*>::contains(obj_map, "features") {
+ var opt = Map<JsonValue*>::get(obj_map, "features");
+ var features = opt.unwrap();
+ if (*features).kind.tag == JsonType::JSON_OBJECT().tag {
+ var f_obj = (*features).object_val;
+ if Map<JsonValue*>::contains(f_obj, "logging") {
+ var l_opt = Map<JsonValue*>::get(f_obj, "logging");
+ var l = l_opt.unwrap();
+ if (*l).kind.tag == JsonType::JSON_BOOL().tag {
+ config.logging = (*l).bool_val;
+ }
+ }
+ }
+ }
+
+ "Configuration Loaded:";
+ var s_name = config.server_name.c_str();
+ "Server: {s_name}";
+ "Port: {config.port}";
+ "Logging: {config.logging}";
+
+ config.server_name.free();
+
+ return 0;
+}
diff --git a/examples/networking/echo_server.zc b/examples/networking/echo_server.zc
new file mode 100644
index 0000000..1cecb74
--- /dev/null
+++ b/examples/networking/echo_server.zc
@@ -0,0 +1,35 @@
+
+import "std/net.zc"
+
+fn main() {
+ "Starting Echo Server on 127.0.0.1:8080...";
+
+ var listener_res = TcpListener::bind("127.0.0.1", 8080);
+ if listener_res.is_err() {
+ !"Failed to bind: {listener_res.err}";
+ return 1;
+ }
+
+ var listener = listener_res.unwrap();
+ defer listener.close();
+
+ loop {
+ var client_res = listener.accept();
+ if client_res.is_ok() {
+ var stream = client_res.unwrap();
+ defer stream.close();
+
+ var buf: char[1024];
+
+ var read_res = stream.read(buf, 1024);
+
+ if read_res.is_ok() {
+ var bytes = read_res.unwrap();
+ if bytes > 0 {
+ stream.write(buf, bytes);
+ "Echoed {bytes} bytes.";
+ }
+ }
+ }
+ }
+}