/* include/shed.h
**
** This file is in the public domain.
*/
  /** Data types.
  **/
    /* u2_seal: identification in objective battery declaration.
    **
    **  |?
    **    lef=*term
    **    [std=*term kel=@]
    **    [ven=*term pro=*term kel=@]
    **    [ven=*term pro=*term ver=@ kel=@]
    **  ==
    */
      typedef u2_noun u2_seal;

    /* u2_clue: programmer's declaration hint
    **
    **  [bud=*tool sil=*seal nut=*(list &[p=*term q=*tool])]
    */
      typedef u2_noun u2_clue;

    /* u2_disc: declaration layer (list should be map)
    **
    **  [sil=*seal nut=*(list &[p=*term q=*tool])]
    */
      typedef u2_noun u2_disc;

    /* u2_chip: complete battery record
    **
    **  [dac=*disc bat=* pet=<~ [axe=*axis led=*chip]>]
    */
      typedef u2_noun u2_chip;

    /* u2_loom_shed: jet registration hangar.
    */
      typedef struct {
        u2_loom_rail o;

        /* cad_c: hash from battery to chip.
        */
        u2_loom_chad cad_c;

        /* dip_c: hash from battery, term to formula.
        */
        u2_loom_chad dip_c;
      } u2_loom_shed;

#       define u2_shed_cad_r(sad_r)  u2_aftr(sad_r, u2_loom_shed, cad_c)
#       define u2_shed_dip_r(sad_r)  u2_aftr(sad_r, u2_loom_shed, dip_c)

  /** Functions.
  **/
    /* u2_sh_init():
    **
    **   Initialize shed, with parent if any.
    */
      void
      u2_sh_init(u2_wire wir_r);

    /* u2_sh_find(): find chip by core, or none.  Includes validate.
    */
      u2_weak                                                     //  senior
      u2_sh_find(u2_wire wir_r,
                 u2_noun cor);                                    //  retain

    /* u2_sh_mine():
    **
    **   Register and/or replace core.
    */
      u2_noun                                                     //  transfer
      u2_sh_mine(u2_wire wir_r,
                 u2_noun hod,                                     //  retain
                 u2_noun cor);                                    //  transfer

    /* u2_sh_cook():
    **
    **   Produce hook formula from chip, or u2_none.
    */
      u2_weak                                                     //  senior
      u2_sh_cook(u2_wire     wir_r,
                 u2_noun     xip,                                 //  retain
                 const c3_c* tam_c);

    /* u2_sh_look():
    **
    **   Produce hook formula from core, or u2_none.
    */
      u2_weak                                                     //  senior
      u2_sh_look(u2_wire     wir_r,
                 u2_noun     cor,                                 //  retain
                 const c3_c* tam_c);