From 4e534261f0364fb71929d2ac81ad80007e803900 Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Thu, 14 Nov 2019 13:08:20 +0100 Subject: [PATCH] hrmap_binary no longer inherits from hrmap_hyperbolic (Liskov substitution fail) --- binary-tiling.cpp | 18 +++++++++++++++--- cell.cpp | 35 +++++++++-------------------------- 2 files changed, 24 insertions(+), 29 deletions(-) diff --git a/binary-tiling.cpp b/binary-tiling.cpp index c75c7dde..2ca5ac69 100644 --- a/binary-tiling.cpp +++ b/binary-tiling.cpp @@ -181,17 +181,29 @@ EX namespace binary { } #endif - struct hrmap_binary : hrmap_hyperbolic { + struct hrmap_binary : hrmap { + heptagon *origin; std::mt19937 directions_generator; - hrmap_binary(heptagon *o) : hrmap_hyperbolic(o) { set_seed(); } + hrmap_binary(heptagon *o) : origin(o) { set_seed(); } void set_seed() { directions_generator.seed(137137137); } int nextdir(int choices) { return directions_generator() % choices; } - hrmap_binary() : hrmap_hyperbolic() { set_seed(); } + hrmap_binary() { + set_seed(); + origin = hyperbolic_origin(); + #if DEBUG_BINARY_TILING + binary::xcode.clear(); + binary::rxcode.clear(); + binary::xcode[&h] = (1 << 16); + binary::rxcode[1<<16] = &h; + #endif + origin->zebraval = 0; + origin->emeraldval = 0; + } heptagon *create_step(heptagon *parent, int d) override { auto h = parent; diff --git a/cell.cpp b/cell.cpp index b9b20b19..868dc8b7 100644 --- a/cell.cpp +++ b/cell.cpp @@ -109,12 +109,8 @@ EX vector allmaps; EX hrmap *newAltMap(heptagon *o) { return new hrmap_hyperbolic(o); } // --- hyperbolic geometry --- -hrmap_hyperbolic::hrmap_hyperbolic(heptagon *o) { origin = o; } - -hrmap_hyperbolic::hrmap_hyperbolic() { - // printf("Creating hyperbolic map: %p\n", this); - int odegree = geometry == gBinaryTiling ? 6 : S7; - origin = tailored_alloc (odegree); +heptagon* hyperbolic_origin() { + heptagon *origin = tailored_alloc (odegree); heptagon& h = *origin; h.s = hsOrigin; h.emeraldval = a46 ? 0 : 98; @@ -125,28 +121,15 @@ hrmap_hyperbolic::hrmap_hyperbolic() { h.cdata = NULL; h.alt = NULL; h.distance = 0; - mvar = variation; - if(0); - #if CAP_BT - else if(binarytiling) { - #if DEBUG_BINARY_TILING - binary::xcode.clear(); - binary::rxcode.clear(); - binary::xcode[&h] = (1 << 16); - binary::rxcode[1<<16] = &h; - #endif - h.zebraval = 0, h.emeraldval = 0, - h.c7 = newCell(odegree, origin); - } - #endif - #if CAP_IRR - else if(IRREGULAR) - irr::link_start(origin); - #endif - else - h.c7 = newCell(S7, origin); + if(IRREGULAR) irr::link_start(origin); + h.c7 = newCell(geometry == gBinaryTiling ? 6 : S7, origin); + return origin; } +hrmap_hyperbolic::hrmap_hyperbolic(heptagon *o) { origin = o; } + +hrmap_hyperbolic::hrmap_hyperbolic() { origin = hyperbolic_origin(); } + /** very similar to createMove in heptagon.cpp */ EX cell *createMov(cell *c, int d) { if(d<0 || d>= c->type) {