import * as VScript from "http://172.16.0.12/bladerunner_sdk/vscript@2.5.2/deno/release/mod.ts";
import * as VAPI from "./mod.ts";
export const lift = {
  MemoryCapacity: (
    _raw: [number, number],
    _socket: VScript.VSocket,
  ): MemoryCapacity => {
    return { as_pages: _raw[0], as_bytes: _raw[1] };
  },
  MemoryInfo: (_raw: VScript.DataViews.Subtree<VScript.VSocket>) =>
    new MemoryInfo(_raw),
  Statistic: (_raw: VScript.DataViews.Subtree<VScript.VSocket>) =>
    new Statistic(_raw),
} as const;
export const lower = {
  MemoryCapacity: (
    _x: {
      as_pages: VAPI.Primitives.Unsigned16;
      as_bytes: VAPI.Primitives.Unsigned64;
    },
    _socket: VScript.VSocket,
  ): [number, number] => [_x.as_pages, _x.as_bytes],
  MemoryInfo: (_x: MemoryInfo) => _x.raw.kwl,
  Statistic: (_x: Statistic) => _x.raw.kwl,
} as const;
export interface MemoryCapacity {
  as_pages: VAPI.Primitives.Unsigned16;
  as_bytes: VAPI.Primitives.Unsigned64;
}
export class MemoryInfo
  implements VScript.Referenceable<"DataRePlay::Data::MemoryInfo">
{
  readonly type_identifier = "DataRePlay::Data::MemoryInfo" as const;
  constructor(readonly raw: VScript.DataViews.Subtree<VScript.VSocket>) {}
  get page_bits(): VScript.rKeyword<
    VScript.VSocket,
    number,
    VAPI.Primitives.Unsigned32,
    VAPI.DataRePlay.MemoryInfo
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      number,
      VAPI.Primitives.Unsigned32,
      VAPI.DataRePlay.MemoryInfo
    >(this, "page_bits" as VScript.SysName, {
      lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
      lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
    });
  }
  get address_bits(): VScript.rKeyword<
    VScript.VSocket,
    number,
    VAPI.Primitives.Unsigned32,
    VAPI.DataRePlay.MemoryInfo
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      number,
      VAPI.Primitives.Unsigned32,
      VAPI.DataRePlay.MemoryInfo
    >(this, "address_bits" as VScript.SysName, {
      lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
      lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
    });
  }
  get loop_start_address_granularity(): VScript.rKeyword<
    VScript.VSocket,
    null | number,
    null | VAPI.Primitives.Unsigned32,
    VAPI.DataRePlay.MemoryInfo
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      null | number,
      null | VAPI.Primitives.Unsigned32,
      VAPI.DataRePlay.MemoryInfo
    >(this, "loop_start_address_granularity" as VScript.SysName, {
      lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
      lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
    });
  }
  get data_bits(): VScript.rKeyword<
    VScript.VSocket,
    number,
    VAPI.Primitives.Unsigned32,
    VAPI.DataRePlay.MemoryInfo
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      number,
      VAPI.Primitives.Unsigned32,
      VAPI.DataRePlay.MemoryInfo
    >(this, "data_bits" as VScript.SysName, {
      lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
      lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
    });
  }
  get page_size(): VScript.rKeyword<
    VScript.VSocket,
    number,
    VAPI.Primitives.Unsigned32,
    VAPI.DataRePlay.MemoryInfo
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      number,
      VAPI.Primitives.Unsigned32,
      VAPI.DataRePlay.MemoryInfo
    >(this, "page_size" as VScript.SysName, {
      lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
      lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
    });
  }
  get total_capacity(): VScript.rKeyword<
    VScript.VSocket,
    [number, number],
    VAPI.DataRePlay.MemoryCapacity,
    VAPI.DataRePlay.MemoryInfo
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      [number, number],
      VAPI.DataRePlay.MemoryCapacity,
      VAPI.DataRePlay.MemoryInfo
    >(this, "total_capacity" as VScript.SysName, {
      lift: VAPI.DataRePlay.lift.MemoryCapacity,
      lower: VAPI.DataRePlay.lower.MemoryCapacity,
    });
  }
  get free(): VScript.rKeyword<
    VScript.VSocket,
    [number, number],
    VAPI.DataRePlay.MemoryCapacity,
    VAPI.DataRePlay.MemoryInfo
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      [number, number],
      VAPI.DataRePlay.MemoryCapacity,
      VAPI.DataRePlay.MemoryInfo
    >(this, "free" as VScript.SysName, {
      lift: VAPI.DataRePlay.lift.MemoryCapacity,
      lower: VAPI.DataRePlay.lower.MemoryCapacity,
    });
  }
}
export class Statistic
  implements VScript.Referenceable<"DataRePlay::Data::Statistic">
{
  readonly type_identifier = "DataRePlay::Data::Statistic" as const;
  constructor(readonly raw: VScript.DataViews.Subtree<VScript.VSocket>) {}
  get pages_per_instance(): VScript.rKeyword<
    VScript.VSocket,
    number,
    VAPI.Primitives.Unsigned32,
    VAPI.DataRePlay.Statistic
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      number,
      VAPI.Primitives.Unsigned32,
      VAPI.DataRePlay.Statistic
    >(this, "pages_per_instance" as VScript.SysName, {
      lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
      lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
    });
  }
  get max_writer_instance(): VScript.rKeyword<
    VScript.VSocket,
    number,
    VAPI.Primitives.Unsigned32,
    VAPI.DataRePlay.Statistic
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      number,
      VAPI.Primitives.Unsigned32,
      VAPI.DataRePlay.Statistic
    >(this, "max_writer_instance" as VScript.SysName, {
      lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
      lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
    });
  }
  get writer_instance(): VScript.rKeyword<
    VScript.VSocket,
    Array<number>,
    Array<VAPI.Primitives.Unsigned32>,
    VAPI.DataRePlay.Statistic
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      Array<number>,
      Array<VAPI.Primitives.Unsigned32>,
      VAPI.DataRePlay.Statistic
    >(this, "writer_instance" as VScript.SysName, {
      lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
      lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
    });
  }
  get max_read_instance(): VScript.rKeyword<
    VScript.VSocket,
    number,
    VAPI.Primitives.Unsigned32,
    VAPI.DataRePlay.Statistic
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      number,
      VAPI.Primitives.Unsigned32,
      VAPI.DataRePlay.Statistic
    >(this, "max_read_instance" as VScript.SysName, {
      lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
      lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
    });
  }
  get read_instance(): VScript.rKeyword<
    VScript.VSocket,
    Array<number>,
    Array<VAPI.Primitives.Unsigned32>,
    VAPI.DataRePlay.Statistic
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      Array<number>,
      Array<VAPI.Primitives.Unsigned32>,
      VAPI.DataRePlay.Statistic
    >(this, "read_instance" as VScript.SysName, {
      lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
      lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
    });
  }
  get memory_map(): VScript.rKeyword<
    VScript.VSocket,
    Array<boolean>,
    Array<boolean>,
    VAPI.DataRePlay.Statistic
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      Array<boolean>,
      Array<boolean>,
      VAPI.DataRePlay.Statistic
    >(this, "memory_map" as VScript.SysName, {
      lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
      lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
    });
  }
}
