All Downloads are FREE. Search and download functionalities are using the official Maven repository.

scala.scalanative.posix.sys.resource.scala Maven / Gradle / Ivy

There is a newer version: 0.5.5
Show newest version
package scala.scalanative
package posix
package sys

// Reference:
//   The Open Group Base Specifications Issue 7, 2018 edition
//   https://pubs.opengroup.org/onlinepubs/9699919799/basedefs\
//       /sys_resource.h.html
//
//   Method argument names come from Ubuntu 19.04 linux man pages.
//   Open Group seems to no longer suggest them.

import scalanative.unsafe._

@extern
@define("__SCALANATIVE_POSIX_SYS_RESOURCE")
object resource {

  type id_t = sys.types.id_t

  type rlim_t = CUnsignedLongInt

  type timeval = sys.time.timeval

  type rlimit = CStruct2[
    rlim_t, // rlim_cur
    rlim_t // rlim_max
  ]

  type rusage = CStruct2[
    timeval, // ru_utime
    timeval // ru_stime
  ]

  def getpriority(which: CInt, who: id_t): CInt = extern

  @name("scalanative_getrlimit")
  def getrlimit(resource: CInt, rlim: Ptr[rlimit]): CInt = extern

  @name("scalanative_getrusage")
  def getrusage(who: CInt, usage: Ptr[rusage]): CInt = extern

  def setpriority(which: CInt, who: id_t, prio: CInt): CInt = extern

  @name("scalanative_setrlimit")
  def setrlimit(resource: CInt, rlim: Ptr[rlimit]): CInt = extern

  // Constants
  @name("scalanative_prio_process")
  def PRIO_PROCESS: CInt = extern

  @name("scalanative_prio_pgrp")
  def PRIO_PGRP: CInt = extern

  @name("scalanative_prio_user")
  def PRIO_USER: CInt = extern

  @name("scalanative_rlim_infinity")
  def RLIM_INFINITY: rlim_t = extern

  @name("scalanative_rlim_saved_cur")
  def RLIM_SAVED_CUR: rlim_t = extern

  @name("scalanative_rlim_saved_max")
  def RLIM_SAVED_MAX: rlim_t = extern

  @name("scalanative_rlimit_as")
  def RLIMIT_AS: CInt = extern

  @name("scalanative_rlimit_core")
  def RLIMIT_CORE: CInt = extern

  @name("scalanative_rlimit_cpu")
  def RLIMIT_CPU: CInt = extern

  @name("scalanative_rlimit_data")
  def RLIMIT_DATA: CInt = extern

  @name("scalanative_rlimit_fsize")
  def RLIMIT_FSIZE: CInt = extern

  @name("scalanative_rlimit_nofile")
  def RLIMIT_NOFILE: CInt = extern

  @name("scalanative_rlimit_stack")
  def RLIMIT_STACK: CInt = extern

  @name("scalanative_rusage_children")
  def RUSAGE_CHILDREN: CInt = extern

  @name("scalanative_rusage_self")
  def RUSAGE_SELF: CInt = extern
}

object resourceOps {

  import resource.{rlimit, rlim_t, rusage, timeval}

  implicit class rlimitOps(val ptr: Ptr[rlimit]) extends AnyVal {
    def rlim_cur: rlim_t = ptr._1
    def rlim_max: rlim_t = ptr._2
    def rlim_cur_=(v: rlim_t): Unit = ptr._1 = v
    def rlim_max_=(v: rlim_t): Unit = ptr._2 = v
  }

  implicit class rusageOps(val ptr: Ptr[rusage]) extends AnyVal {
    def ru_utime: timeval = ptr._1
    def ru_stime: timeval = ptr._2
    def ru_utime_=(v: timeval): Unit = ptr._1 = v
    def ru_stime_=(v: timeval): Unit = ptr._2 = v
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy