From 378e2971c2f78a9b79453bd47d2ddc658017a44d Mon Sep 17 00:00:00 2001 From: David Kerkeslager Date: Mon, 19 Aug 2019 22:28:18 -0400 Subject: [PATCH] Add Rope_length (mostly as a way to add __attribute__((pure)) to the codebase --- c/rope.c | 9 +++++++++ c/rope.h | 2 ++ 2 files changed, 11 insertions(+) diff --git a/c/rope.c b/c/rope.c index 716a5af..2cab922 100644 --- a/c/rope.c +++ b/c/rope.c @@ -87,4 +87,13 @@ Rope* Rope_concatenate(Rope* r0, Rope* r1) { return result; } +__attribute__((pure)) size_t Rope_length(Rope* self) { + switch(self->type) { + case ROPETYPE_CONCATENATION: + return Rope_length(self->instance.concatenation.r0) + Rope_length(self->instance.concatenation.r0); + case ROPETYPE_STRING: + return self->instance.string.length; + } +} + #endif diff --git a/c/rope.h b/c/rope.h index 33319e7..650596d 100644 --- a/c/rope.h +++ b/c/rope.h @@ -21,4 +21,6 @@ Rope* Rope_read(Encoding, FILE); Rope* Rope_concatenate(Rope* r0, Rope* r1); +size_t Rope_length(Rope*) __attribute__((pure)); + #endif -- 2.20.1