77 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace nur;
 | 
						|
 | 
						|
use nur\b\io\FileReader;
 | 
						|
use nur\b\io\IOException;
 | 
						|
use nur\b\io\IReader;
 | 
						|
use nur\b\ValueException;
 | 
						|
 | 
						|
/**
 | 
						|
 * Class reader: des outils pour lire des valeurs depuis une destination
 | 
						|
 */
 | 
						|
class reader {
 | 
						|
  const INPUT_MAP = [
 | 
						|
    "-" => "php://stdin",
 | 
						|
    "/dev/stdin" => "php://stdin",
 | 
						|
  ];
 | 
						|
  const INPUT_MODES = [
 | 
						|
    "php://stdin" => "r",
 | 
						|
  ];
 | 
						|
 | 
						|
  /**
 | 
						|
   * ouvrir le cas échéant le fichier spécifié pour écriture
 | 
						|
   *
 | 
						|
   * @throws IOException
 | 
						|
   */
 | 
						|
  static final function with($input, ?string $mode=null): IReader {
 | 
						|
    if ($input instanceof IReader) return $input;
 | 
						|
    if ($mode === null) $mode = FileReader::DEFAULT_MODE;
 | 
						|
    if (!is_resource($input)) {
 | 
						|
      if (array_key_exists($input, self::INPUT_MAP)) {
 | 
						|
        $input = self::INPUT_MAP[$input];
 | 
						|
      }
 | 
						|
      if (array_key_exists($input, self::INPUT_MODES)) {
 | 
						|
        $mode = self::INPUT_MODES[$input];
 | 
						|
      }
 | 
						|
    }
 | 
						|
    return new FileReader($input, $mode);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * lire toutes les lignes de $input
 | 
						|
   *
 | 
						|
   * @throws IOException
 | 
						|
   */
 | 
						|
  static final function read_lines($input): array {
 | 
						|
    $close = !($input instanceof IReader);
 | 
						|
    $reader = self::with($input);
 | 
						|
    try {
 | 
						|
      return $reader->readLines();
 | 
						|
    } finally {
 | 
						|
      $reader->close($close);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * lire le contenu du fichier $input
 | 
						|
   *
 | 
						|
   * @throws ValueException si $input n'est pas un string ni une instance de
 | 
						|
   * {@link IReader}
 | 
						|
   * @throws IOException si une erreur de lecture s'est produite
 | 
						|
   */
 | 
						|
  public static final function get_contents($input): string {
 | 
						|
    if ($input === null) {
 | 
						|
      $contents = stream_get_contents(STDIN);
 | 
						|
      if ($contents === false) throw IOException::last_error();
 | 
						|
    } elseif (is_string($input)) {
 | 
						|
      $contents = file_get_contents($input);
 | 
						|
      if ($contents === false) throw IOException::last_error();
 | 
						|
    } elseif ($input instanceof IReader) {
 | 
						|
      $contents = $input->getContents();
 | 
						|
    } else {
 | 
						|
      throw ValueException::unexpected_type(["string", IReader::class], $input);
 | 
						|
    }
 | 
						|
    return $contents;
 | 
						|
  }
 | 
						|
}
 |