Another Core refactoring
authorThomas Walker Lynch <eknp9n@reasoningtechnology.com>
Sat, 8 Mar 2025 16:17:29 +0000 (16:17 +0000)
committerThomas Walker Lynch <eknp9n@reasoningtechnology.com>
Sat, 8 Mar 2025 16:17:29 +0000 (16:17 +0000)
developer/cc馃枆/Core.lib.c
developer/deprecated馃枆/Copy.lib.c

index 0eeb71c..1ca9e9e 100644 (file)
@@ -1,11 +1,16 @@
 /*
   Core - core memory operations.
 
-  'ATP'  'At This Point' in the code. Used in comments to state assertions.
-   by definition an 'extent' is one less than a 'size'.
+  'ATP'  Used in comments. 'At This Point' in the code. 
 
   'Area' refers to an area (in contrast to a point) in the address space.
 
+   A non-exist array is said to be non-existent.
+   An array with zero elements has 'length == 0' or is 'empty'.
+
+   In contrast, an allocation does not exist if it has zero bytes.
+
+
 */
 
 #define Core路DEBUG
   #include <stdint.h>
   #include <stddef.h>
 
-  #define extentof(x) (sizeof(x) - 1)
+  #define extentof(x)(sizeof(x) - 1)
   #define extent_t size_t
 
-  typedef struct{
-    void *read0;  // read0 = NULL means no buffer or empty buffer
-    extent_t read_extent;
-    void *write0;  // write0 = NULL means no buffer or empty buffer.
-    extent_t write_extent;
-    bool reverse_byte_order;
-  } Core路AreaPairinng;
+  typedef struct Core路Area;
 
-  typedef enum{
-    Core路AreaPairing路Status路valid = 0
-    ,Core路AreaPairing路Status路null = 1
-    ,Core路AreaPairing路Status路overlap = 2
-    ,Core路AreaPairing路Status路empty_read_buffer = 4
-    ,Core路AreaPairing路Status路empty_write_buffer = 8
-  } Core路AreaPairing路Status;
+  typedef uint8_t (*ReadFn8)(Area * ,uint8_t *);
+  typedef uint64_t (*ReadFn64)(Area * ,uint64_t *);
 
+  typedef struct {
+    Core路Area *read;
+    Core路Area *write;
+    ReadFn8 read_fn_8;
+    ReadFn64 read_fn_64;
+    uint8_t *read_pt;
+    uint8_t *write_pt;
+    Core路Step路Status status;
+  } Core路TableauFace;
+
+  extern __thread Core路TableauFace tl; 
 
   typedef enum{
     Core路Step路perfect_fit = 0
 
   typedef Core路Step路Fn (*Core路Step路Fn)();
 
-  typedef struct{
+  typdef struct Core路Area;
 
-    // Area predicates
-    bool Area路encloses_pt(void *pt ,void *pt0 ,extent_t e);
-    bool Area路encloses_pt_strictly(void *pt ,void *pt0 ,extent_t e);
-    bool Area路encloses_area(void *pt00 ,extent_t e0 ,void *pt10 ,extent_t e1);
-    bool Area路encloses_area_strictly(void *pt00 ,extent_t e0 ,void *pt10 ,extent_t e1);
-    bool Area路overlap(void *pt00 ,extent_t s0 ,void *pt10 ,extent_t e1);
+  typedef struct{
 
-    // 64 bit word operations
+    void *offset_8(void *p ,size_t 螖);
+    void *offset_64(void *p ,size_t 螖);
     bool is_aligned_64(void *p);
     void *floor_64(void *p);
     void *ceiling_64(void *p);
-    uint64_t *greatest_full_64(void *p0 ,void *p1);
-    uint64_t *least_full_64(void *p0 ,void *p1);
-    void *inc_64(void *p ,size_t 螖);
 
-    Core路AreaPairing路Status wellformed_it(Core路AreaPairing *ap);
-
-    Core路Step路Status Core路step(Core路Step路Fn fn ,Core路AreaPairing *ap);
-    Core路Step路Fn copy_8;
-    Core路Step路Fn copy_16;
+    void Core路Area路init_pe(Core路Area *area ,void *position ,extent_t extent);
+    void Core路Area路init_pp(Core路Area *area ,void *position_left ,void *position_right);
+    void Core路Area路set_position(Core路Area *area ,uint8_t *new_position);
+    void Core路Area路set_position_left(Core路Area *area ,uint8_t *new_position);
+    extent_t Core路Area路set_extent(Core路Area *area);
+    void Core路Area路set_position_right(Core路Area *area ,uint8_t *new_position_right);
+
+    uint8_t *Core路Area路position(Core路Area *area);
+    uint8_t *Core路Area路position_left(Core路Area *area);
+    uint8_t *Core路Area路position_right(Core路Area *area);
+    extent_t Core路Area路extent(Core路Area *area);
+    uint8_t Core路Area路length_Kung(Core路Area *area); // saturates at 3
+
+    bool Core路Area路encloses_pt(uint8_t *pt ,Core路Area *area);
+    bool Core路Area路encloses_pt_strictly(uint8_t *pt ,Core路Area *area);
+    bool Core路Area路encloses_area(Core路Area *outer ,Core路Area *inner);
+    bool Core路Area路encloses_area_strictly(Core路Area *outer ,Core路Area *inner);
+    bool Core路Area路overlap(Core路Area *a ,Core路Area *b);
+    bool Core路Area路nonexistent(Core路Area *area);
+    void Area路largest_aligned_64(Core路Area *outer ,Core路Area *inner_64);
+    uint8_t *Area路complement(Core路Area *area ,uint8_t *r);
+
+
+    Core路Step路Status Core路step(Core路Step路Fn fn ,Core路TableauFace *ap);
+    Core路Step路Fn Step路copy_8;
+    Core路Step路Fn Step路copy_16;
     Core路Step路Fn Step路write_hex;
     Core路Step路Fn Step路read_hex;
 
   } Core路M;
 
+  Core路M m; // initialized in the implementation;
+
+
 #endif
 
 //--------------------------------------------------------------------------------
     #include <stdio.h>
   #endif
 
-  typedef uint8_t (*ReadFn8)(uint8_t *, uint8_t *, uint8_t *);
-  typedef uint64_t (*ReadFn64)(uint64_t *, uint64_t *, uint64_t *);
+  typedef struct{
+    uint8_t *position;
+    extent_t extent;
+  } Core路Area
 
   typedef struct {
-    Core路Step路Status status;
-    Core路AreaPairing *ap;
-    struct {
-      ReadFn8 read_fn;
-    } copy_8;
     union {
+      struct {
+        ReadFn8 read_fn;
+      } copy_8;
       struct {
         ReadFn64 read_fn;
-        uint64_t *r0_64;
-        uint64_t *r1_64;
+        Area *area_64;
       } copy_64;
       struct {
-        union {
-          uint16_t (*byte_to_hex)(uint8_t);
-          uint8_t (*hex_to_byte)(uint16_t);
-        } convert;
-      } hex;
+        uint8_t (*hex_to_byte)(uint16_t);
+      } read_hex;
+      struct {
+        uint16_t (*byte_to_hex)(uint8_t);
+      } write_hex;
     };
-  } Core路Tableau;
-
-  extern __thread Core路Tableau tableau
+  } Core路TableauLocal;
 
   // this part goes into Copylib.a
-  // yes this is emptyso there is no Copylib.a
+  // yes this is empty ,so there is no Copylib.a
   #ifndef LOCAL
-    __thread Core路Tableau tableau
+    __thread Core路TableauFace tf;
+    __thread Core路TableauLocal tl;
   #endif 
 
   #ifdef LOCAL
+    extern __thread Core路TableauLocal tl; 
 
     //----------------------------------------
-    // Area predicates
+    // Position/Pointer/Address whatever you want to call it
 
-    Local bool Core路Area路encloses_pt(void *pt ,void *pt0 ,extent_t e){
-      return (pt >= pt0) && (pt <= pt0 + e); // Inclusive bounds
-    }
-    Local bool Core路Area路encloses_pt_strictly(void *pt ,void *pt0 ,extent_t e){
-      return (pt > pt0) && (pt < pt0 + e); // Strictly inside
-    }
-    // Area 0 encloses Area 1
-    Local bool Core路Area路encloses_area(
-      void *pt0 ,extent_t e0 ,void *pt1 ,extent_t e1
-    ){
-      return (pt1 >= pt0) && (pt1 + e1 <= pt0 + e0);
-    }
-    // Area 0 strictly encloses Area 1
-    Local bool Core路Area路encloses_area_strictly(
-      void *pt0 ,extent_t e0 ,void *pt1 ,extent_t e1
-    ){
-      return (pt1 > pt0) && (pt1 + e1 < pt0 + e0);
+    // point to the next uint64_t in an array of uint64_t
+    // the increment can be negative
+    Local void *Core路offset_8(void *p ,size_t 螖){
+      return (void *)((uint8_t *)p) + 螖;
     }
-
-    // Possible cases of overlap, including just touching
-    // 1. interval 0 to the right of interval 1, just touching p00 == p11
-    // 2. interval 0 to the left of interval 1, just touching p01 == p10
-    // 3. interval 0 wholly contained in interval 1
-    // 4. interval 0 wholly contains interval 1
-    Local bool Core路Area路overlap(void *pt0 ,extent_t e0 ,void *pt1 ,extent_t e1){
-      return pt1 <= pt0 + e0 && pt0 <= pt1 + e1;
+    Local void *Core路offset_64(void *p ,size_t 螖){
+      return (void *)((uint64_t *)p) + 螖;
     }
 
-    //----------------------------------------
-    // support for aligned uint64_t in a world of bytes
-
     Local bool Core路is_aligned_64(void *p){
       return ((uintptr_t)p & 0x7) == 0;
     }
+
     // find the lowest address in an 8 byte aligned window
     // returns the byte pointer to the least address byte in the window
     Local void *Core路floor_64(void *p){
       return (uintptr_t)p | 0x7;
     }
 
-    // consider that a maximally sized interval of uint64_t is in a byte interval
-    // this returns the inclusive upper bound address pointing to aligned uint64_t
-    // by contract, p1 must be >= p0
-    Local uint64_t *Core路greatest_full_64(void *p0 ,void *p1){
 
-      // If p1 - 0x7 moves into a prior word while p0 does not, a prefetch hazard can occur.
-      // If p1 and p0 are more than 0x7 apart, they cannot be in the same word,
-      // but this does not guarantee a full 64-bit word exists in the range.
-      if((uintptr_t)p1 < (uintptr_t)p0 + 0x7) return NULL;
+    //----------------------------------------
+    // Area
 
-      // Compute the last fully aligned word at or before p1.
-      uint64_t *p1_64 = (void *)( ((uintptr_t)p1 - 0x7) & ~(uintptr_t)0x7 );
+    Local void Core路Area路set_position(Core路Area *area ,void *new_position){
+      area->position = new_position;
+    }
+    Local void Core路Area路set_position_left(Core路Area *area ,void *new_position){
+      area->position = new_position;
+    }
+    Local extent_t Core路Area路set_extent(Core路Area *area ,exent_t extent){
+      return area->extent = extent;
+    }
+    Local void Core路Area路set_position_right(Core路Area *area ,void *new_position_right){
+      Core路Area路set_extent(new_position_right - area->position);
+    }
+    Local void Core路Area路init_pe(Core路Area *area ,uint8_t *position ,extent_t extent){
+      Core路Area路set_position(position);
+      Core路Area路set_extent(extent);
+    }
+    Local void Core路Area路init_pp(Core路Area *area ,void *position_left ,void *position_right){
+      Core路Area路set_position_left(position_left);
+      Core路Area路set_position_right(position_right);
+    }
 
-      // If alignment rounds p1_64 below p0, there is no full word available.
-      if(p1_64 < p0) return NULL;
+    Local uint8_t *Core路Area路position(Core路Area *area){
+      #ifdef Core路Debug
+      if(!area){
+        fprintf(stderr,"Core路Area路position:: given NULL area);
+        return NULL;
+      }
+      #endif
+      return area->position;
+    }
+    Local uint8_t *Core路Area路position_left(Core路Area *area){
+      #ifdef Core路Debug
+      if(!area){
+        fprintf(stderr,"Core路Area路position_left:: given NULL area);
+        return NULL;
+      }
+      #endif
+      return area->position;
+    }
+    Local uint8_t *Core路Area路position_right(Core路Area *area){
+      #ifdef Core路Debug
+      if(!area){
+        fprintf(stderr,"Core路Area路position_right:: given NULL area);
+        return NULL;
+      }
+      #endif
+      return area->position + area->extent;
+    }
+    Local extent_t Core路Area路extent(Core路Area *area){
+      #ifdef Core路Debug
+      if(!area){
+        fprintf(stderr,"Core路Area路extent:: given NULL area);
+        return 0;
+      }
+      #endif
+      return area->extent;
+    }
+    Local uint8_t Core路Area路length_Kung(Core路Area *area){
+      if(!Core路Area路position_left(area)) return 0;
+      if(Core路Area路extent(area) >= 2) return 3;
+      return Core路Area路extent(area) + 1;
+    }
 
-      return p1_64;
+    Local bool Core路Area路encloses_pt(Core路Area *area ,uint8_t *pt){
+      return 
+        (pt >= Core路Area路position_left(area)) 
+        && (pt <= Core路Area路position_right(area));
+    }
+    Local bool Core路Area路encloses_pt_strictly(Core路Area *area ,uint8_t *pt){
+      return 
+        (pt > Core路Area路position_left(area)) 
+        && (pt < Core路Area路position_right(area));
+    }
+    Local bool Core路Area路encloses_area(Core路Area *outer ,Core路Area *inner){
+      return 
+        (Core路Area路position_left(inner) >= Core路Area路position_left(outer)) 
+        && (Core路Area路position_right(inner) <= Core路Area路position_right(outer));
+    }
+    Local bool Core路Area路encloses_area_strictly(Core路Area *outer ,Core路Area *inner){
+      return 
+        (Core路Area路position_left(inner) > Core路Area路position_left(outer)) 
+        && (Core路Area路position_right(inner) < Core路Area路position_right(outer));
     }
 
-    // consider that a maximally sized interval of uint64_t is in a byte interval
-    // this returns the inclusive lower bound address pointing to aligned uint64_t
-    // by contract, p1 must be >= p0
-    Local uint64_t *Core路least_full_64(void *p0 ,void *p1){
+    // Possible cases of overlap ,including just touching
+    // 1. interval 0 to the right of interval 1 ,just touching p00 == p11
+    // 2. interval 0 to the left of interval 1 ,just touching p01 == p10
+    // 3. interval 0 wholly contained in interval 1
+    // 4. interval 0 wholly contains interval 1
+    Local bool Core路Area路overlap(Core路Area *area0 ,Core路Area *area1){
+      return 
+        Core路Area路position_right(area0) >= (Core路Area路position_left(area1)
+        && Core路Area路position_left(area0) <= Core路Area路position_right(area1);
+    }
 
-      // If p0 + 0x7 moves into the next word while p1 does not, a prefetch hazard can occur.
-      // If p1 and p0 are more than 0x7 apart, they cannot be in the same word,
-      // but this does not guarantee a full 64-bit word exists in the range.
-      if(p1 - p0 < 0x7) return NULL;
+    Local bool Core路Area路nonexistent(Core路Area *area){
+      return !!Core路Area路position_left(area);
+    }
 
-      // Compute the first fully aligned word at or after p0.
-      uint64_t *p0_64 = (void *)( ((uintptr_t)p0 + 0x7) & ~(uintptr_t)0x7 );
+     // find the largest contained interval aligned on 64 bit boundaries
+    static void Core路Area路largest_aligned_64(Core路Area *outer ,Core路Area *inner_64){
+      uintptr_t p0 = (uintptr_t)Core路Area路position_left(outer);
+      uintptr_t p1 = (uintptr_t)Core路Area路position_right(outer);
 
-      // If alignment rounds p0_64 beyond p1, there is no full word available.
-      if(p0_64 > p1) return NULL;
+      uint8_t *p0_64 = (uint8_t *)( (p0 + 0x7) & ~(uintptr_t)0x7 );
+      uint8_t *p1_64 = (uint8_t *)( (p1 - 0x7) & ~(uintptr_t)0x7 );
 
-      return p0_64;
+      if(p1_64 < p0_64){
+        Core路Area路set_position(inner_64 ,NULL);
+      }else{
+        Core路Area路init_pp(inner_64 ,p0_64 ,p1_64);
+      }
     }
 
-    // point to the next uint64_t in an array of uint64_t
-    // the increment can be negative
-    Local void *Core路inc_64(void *p ,size_t 螖){
-      return (void *)((uint64_t *)p) + 螖;
+    // complement against the extent of the area (reverse direction)
+    // works for byte pointer
+    // works for aligned word pointer
+    Local uint8_t *Core路Area路complement(Core路Area *area ,uint8_t *r){
+      return Core路Area路position_left(area) + (Core路Area路position_right(area) - r);
     }
 
-    Local uint8_t Core路read_8_fwd(void *r0 ,void *r1 ,void *r){
-      return *(uint8_t *)r;
-    }
+    //----------------------------------------
+    // step-able functions
 
-    Local uint8_t Core路read_8_rev(void *r0 ,void *r1 ,void *r){
-      return *((uint8_t *)r0 + ((uint8_t *)r1 - (uint8_t *)r));
+    Local uint8_t Core路Area路read_8_fwd(Core路Area *area ,void *r){
+      #ifdef Core路Debug
+      if(!area || !r){
+        fprintf(stderr,"Core路Area路read_8_fwd:: area r: %p %p\n" ,area ,r);
+        return 0;
+      }
+      if( !Core路Area路enclose_pt(area ,r) ){
+        fprintf(stderr,"Core路Area路read_8_fwd:: out of interval read\n");
+      }
+      #endif
+      return *(uint8_t *)r;
     }
 
     // Given a pointer to the least address byte of a uint64_t, return the value
-    Local uint64_t Core路read_64_fwd(void *r){
+    Local uint64_t Core路Area路read_64_fwd(Core路Area *area ,void *r){
+      #ifdef Core路Debug
+      if(!area || !r){
+        fprintf(stderr,"Core路Area路read_8_fwd:: area r: %p %p\n" ,area ,r);
+        return 0;
+      }
+      if(!Core路Area路enclose_pt(area ,r) ){
+        fprintf(stderr,"Core路Area路read_8_fwd:: out of interval read\n");
+      }
+      #endif
       return *(uint64_t *)r;
     }
 
-    // Given a pointer to the greatest address byte of a uint64_t, return the value
-    Local uint64_t Core路read_64_rev(void *r0 ,void *r1 ,void *r){
-      return __builtin_bswap64(
-        *(uint64_t *)Core路floor_64( (uint8_t *)r0 + ((uint8_t *)r1 - (uint8_t *)r) )
-      );
-    }
-
-    //----------------------------------------
-    // AreaPairing
-
-    Local Core路AreaPairing路Status Core路AreaPairing路wellformed(Core路AreaPairing *ap){
-
-      bool print = false;
-      #ifdef Core路DEBUG
-        print = true;
-      #endif 
-      
-      char *this_name = "Core路AreaPairing路wellformed";
-      Copy路WFIt路Status status = Copy路WFIt路Status路valid;
-
-      if(it == NULL){
-        if(print) fprintf( stderr ,"%s: NULL read pointer\n" ,this_name );
-        return Core路AreaPairing路Status路null;
+    Local uint8_t Core路Area路read_8_rev(Core路Area *area ,uint8_t *r){
+      #ifdef Core路Debug
+      if(!area || !r){
+        fprintf(stderr,"Core路Area路read_8_fwd:: area r: %p %p\n" ,area ,r);
+        return 0;
       }
-
-      if(ap->read0 == NULL){
-        if(print) fprintf( stderr ,"%s: empty read buffer\n" ,this_name );
-        status |= Copy路WFIt路Status路empty_read_buffer;
+      if(!Core路Area路enclose_pt(area ,r) ){
+        fprintf(stderr,"Core路Area路read_8_rev:: out of interval read\n");
       }
-      if(ap->write0 == NULL){
-        if(print) fprintf( stderr ,"%s: empty write buffer\n" ,this_name );
-        status |= Copy路WFIt路Status路empty_write_buffer;
+      #endif
+      return *(Core路complement(area ,r));
+    }
+
+    Local uint64_t Core路Area路read_64_rev(Core路Area *area_64 ,uint8_t *r){
+      #ifdef Core路Debug
+      if(!area || !r){
+        fprintf(stderr,"Core路Area路read_8_fwd:: area r: %p %p\n" ,area ,r);
+        return 0;
       }
-      if( Copy路overlap_size_interval(ap->read0 ,ap->read_size ,ap->write0 ,ap->write_size) ){
-        if(print) fprintf( stderr ,"%s: Read and write buffers overlap!\n" ,this_name );
-        status |= Copy路WFIt路Status路overlap;
+      if(!Core路Area路enclose_pt(area ,r) ){
+        fprintf(stderr,"Core路Area路read_64_rev:: out of interval read\n");
       }
-      return status;
-
+      #endif
+      return __builtin_bswap64( *(uint64_t *)Core路floor_64(Core路complement(area_64 ,r)) );
     }
 
-
     //----------------------------------------
     // Step
 
-    // Function pointer type
-    typedef Core路Step路Fn (*Core路Step路Fn)();
-
     // Step function using trampoline execution model
-    Local Core路Step路Status Core路step(Core路Step路Fn fn ,Core路AreaPairing *ap){
+    Local Core路Step路Status Core路step(Core路Step路Fn fn){
+      #ifdef Core路Debug
+      if(!fn || !ap){
+        fprintf(stderr,"Core路step:: fn ap: %p %p\n" ,fn ,ap);
+        return Core路Step路argument_guard
+      }
       if(
-         fn != Core路copy_64 && fn != Core路copy_8
-         ||
-         Core路AreaPairing路wellformed(it) != Core路AreaPairing路Status路valid
+         fn != Core路copy_8_fwd
+         && fn != Core路copy_8_rev
+         && fn != Core路copy_64_fwd
+         && fn != Core路copy_64_rev
+      ){
+        fprintf(stderr,"Core路step:: unrecognized step-able function\n");
+        return Core路Step路argument_guard
       ) 
-        return Core路Step路argument_guard;
+      #endif
 
-      Core路tableau.it = it;
       while(fn) fn = fn();
       return tableau->status;
     }
     //----------------------------------------
     // step copy_8 
 
-    Core路Step路Fn Core路copy_8;;
-    Core路Step路Fn Core路Copy8路bulk;
+    Core路Step路Fn Core路Step路copy_8;;
+    Core路Step路Fn Core路Step路Copy8路bulk;
 
     Local Core路Step路Fn Core路copy_8(){
 
       uint8_t *w = (uint8_t *) Core路tableau.ap->write0;
 
       do{
-        *w = Core路tableau.copy_8.read_fn(Core路tableau.ap->read0, r1, r);
+        *w = Core路tableau.copy_8.read_fn(Core路tableau.ap->read0 ,r1 ,r);
         if(r == r1) break;
         r++;
         w++;
       uint8_t *w = (uint8_t *) Core路tableau.ap->write0;
 
       do{
-        *w = Core路tableau.copy_8.read_fn(Core路tableau.ap->read0, r1, r);
+        *w = Core路tableau.copy_8.read_fn(Core路tableau.ap->read0 ,r1 ,r);
         if(r == r1) break;
         r++;
         w++;
       uint8_t *w1 = (uint8_t *) (w + Core路tableau.ap->write_extent);
 
       do{
-        *w = Core路tableau.copy_8.read_fn(Core路tableau.ap->read0, r1, r);
+        *w = Core路tableau.copy_8.read_fn(Core路tableau.ap->read0 ,r1 ,r);
         if(w == w1) break;
         r++;
         w++;
     //----------------------------------------
     // step copy_64
 
-        // 64-bit copy function with updated AreaPairing terminology
+        // 64-bit copy function with updated TableauFace terminology
     Core路Step路Fn Core路copy_64;
     Core路Step路Fn Core路Copy64路leadin;
     Core路Step路Fn Core路Copy64路bulk;
 
       // Determine aligned 64-bit word boundaries
       Core路tableau.copy_64.r0_64 = Core路least_full_64(
-        Core路tableau.ap->read0Core路tableau.ap->read0 + Core路tableau.ap->read_extent
+        Core路tableau.ap->read0 ,Core路tableau.ap->read0 + Core路tableau.ap->read_extent
         );
       Core路tableau.copy_64.r1_64 = Core路greatest_full_64(
-        Core路tableau.ap->read0Core路tableau.ap->read0 + Core路tableau.ap->read_extent
+        Core路tableau.ap->read0 ,Core路tableau.ap->read0 + Core路tableau.ap->read_extent
         );
 
       // Choose the correct function based on alignment
       uint8_t *r0_64 = (uint8_t *) Core路tableau.copy_64.r0_64;
 
       do{
-        *w++ = Core路tableau.copy_8.read_fn(Core路tableau.ap->read0, r0_64, r);
+        *w++ = Core路tableau.copy_8.read_fn(Core路tableau.ap->read0 ,r0_64 ,r);
         if(r == r0_64) break;
         r++;
       }while(1);
 
       do{
         *w64++ = Core路tableau.copy_64.read_fn(
-            Core路tableau.copy_64.r0_64, Core路tableau.copy_64.r1_64, r64
+            Core路tableau.copy_64.r0_64 ,Core路tableau.copy_64.r1_64 ,r64
           );
         if(r64 == r1_64) break;
         r64++;
       uint8_t *r1 = (uint8_t *) Core路tableau.copy_64.r1_64;
 
       do{
-        *w++ = Core路tableau.copy_8.read_fn(Core路tableau.ap->read0, r1, r);
+        *w++ = Core路tableau.copy_8.read_fn(Core路tableau.ap->read0 ,r1 ,r);
         if(r == r1) break;
         r++;
       }while(1);
       uint8_t *w = (uint8_t *)Core路tableau.area_pairing->write0;
 
       do {
-        *(uint16_t *)w = Core路tableau.hex.convert.byte_to_hex(*r);
+        *(uint16_t *)w = Core路tableau.write_hex.byte_to_hex(*r);
         if(r == r1) break;
         r++;
         w += 2;
       uint8_t *r1 = r + limit;
 
       do {
-        *(uint16_t *)w = Core路tableau.hex.convert.byte_to_hex(*r);
+        *(uint16_t *)w = Core路tableau.write_hex.byte_to_hex(*r);
         if(r == r1) break;
         r++;
         w += 2;
       uint8_t *r1 = r + limit;
 
       do {
-        *(uint16_t *)w = Core路tableau.hex.convert.byte_to_hex(*r);
+        *(uint16_t *)w = Core路tableau.write_hex.byte_to_hex(*r);
         if(r == r1) break;
         r++;
         w += 2;
       uint8_t *w = (uint8_t *)Core路tableau.area_pairing->write0;
 
       do {
-        *w = Core路tableau.hex.convert.hex_to_byte(*(uint16_t *)r);
+        *w = Core路tableau.read_hex.hex_to_byte(*(uint16_t *)r);
         if(r == r1) break;
         r += 2;
         w++;
       uint8_t *r1 = r + (limit << 1);
 
       do {
-        *w = Core路tableau.hex.convert.hex_to_byte(*(uint16_t *)r);
+        *w = Core路tableau.read_hex.hex_to_byte(*(uint16_t *)r);
         if(r == r1) break;
         r += 2;
         w++;
       uint8_t *r1 = r + (limit << 1);
 
       do {
-        *w = Core路tableau.hex.convert.hex_to_byte(*(uint16_t *)r);
+        *w = Core路tableau.read_hex.hex_to_byte(*(uint16_t *)r);
         if(r == r1) break;
         r += 2;
         w++;
       return NULL;
     }
 
+    Core路M m = {
+      .Area路init_pe = Core路Area路init_pe
+      ,.Area路init_pp = Core路Area路init_pp
+      ,.Area路position = Core路Area路position
+      ,.Area路position_left = Core路Area路position_left
+      ,.Area路position_right = Core路Area路position_right
+      ,.Area路set_position = Core路Area路set_position
+      ,.Area路extent = Core路Area路extent
+      ,.Area路set_extent = Core路Area路set_extent
+      ,.Area路set_position = Core路Area路set_exent
+      ,.Area路length_Kung = Core路Area路length_Kung
+
+      .Area路encloses_pt = Core路Area路encloses_pt
+      ,.Area路encloses_pt_strictly = Core路Area路encloses_pt_strictly
+      ,.Area路encloses_area = Core路Area路encloses_area
+      ,.Area路encloses_area_strictly = Core路Area路encloses_area_strictly
+      ,.Area路overlap = Core路Area路overlap
+      ,.Core路Area路nonexistent = Core路Area路nonexistent
+      ,.Core路Area路length_Kung = Core路Area路length_Kung
+
+      ,.is_aligned_64 = Core路is_aligned_64
+      ,.floor_64 = Core路floor_64
+      ,.ceiling_64 = Core路ceiling_64
+      ,.greatest_full_64 = Core路greatest_full_64
+      ,.least_full_64 = Core路least_full_64
+      ,.offset_8 = Core路offset_8
+      ,.offset_64 = Core路offset_64
+
+      ,.Core路step = Core路step
+
+      ,.copy_8 = Core路copy_8
+      ,.copy_16 = Core路copy_16
+      ,.Step路write_hex = Core路Step路write_hex
+      ,.Step路read_hex = Core路Step路read_hex
+    };
+
   #endif // LOCAL
 
 #endif // IMPLEMENTATION
index ae18e0e..f75a272 100644 (file)
@@ -55,6 +55,8 @@
     Copy路WFIt路Status Copy路wellformed_it(Copy路it *it ,Copy路WFIt路Mode mode);
   } Copy路M;
 
+  Core路M m; // initialized in the LOCAL implementation, yes in C we can do this.
+
 #endif
 
 //--------------------------------------------------------------------------------