   }
 
   /// Create a Key object from an llb_data_t.
-  private static func fromInternalData(_ data: llb_data_t) -> Key {
+  fileprivate static func fromInternalData(_ data: llb_data_t) -> Key {
     return Key([UInt8](UnsafeBufferPointer(start: data.data, count: Int(data.length))))
   }
 
   /// Provide a Key contents as an llb_data_t pointer.
-  private func withInternalDataPtr<T>(closure: @noescape (UnsafePointer<llb_data_t>) -> T) -> T {
+  fileprivate func withInternalDataPtr<T>(closure: @noescape (UnsafePointer<llb_data_t>) -> T) -> T {
     return data.withUnsafeBufferPointer { (dataPtr: UnsafeBufferPointer<UInt8>) -> T in
         var value = llb_data_t(length: UInt64(self.data.count), data: dataPtr.baseAddress)
         return withUnsafePointer(&value, closure)

  /// use. The structure *must* be filled in by the closure.
  ///
  /// \return The output Value.
  private static func fromInternalDataOutputPtr(closure: @noescape (UnsafeMutablePointer<llb_data_t>) -> Void) -> Value {
    var data = llb_data_t()
    withUnsafeMutablePointer(&data, closure)
    return Value.fromInternalData(data)


  /// MARK: Internal Task-Only API

  fileprivate func taskNeedsInput(_ taskWrapper: TaskWrapper, key: Key, inputID: Int) {
    key.withInternalDataPtr { keyPtr in
      llb_buildengine_task_needs_input(self._engine, taskWrapper.taskInternal, keyPtr, UInt(inputID))
    }
  }

  fileprivate func taskMustFollow(_ taskWrapper: TaskWrapper, key: Key) {
    key.withInternalDataPtr { keyPtr in
      llb_buildengine_task_must_follow(self._engine, taskWrapper.taskInternal, keyPtr)
    }
  }

  fileprivate func taskDiscoveredDependency(_ taskWrapper: TaskWrapper, key: Key) {
    key.withInternalDataPtr { keyPtr in
      llb_buildengine_task_discovered_dependency(self._engine, taskWrapper.taskInternal, keyPtr)
    }
  }

  fileprivate func taskIsComplete(_ taskWrapper: TaskWrapper, result: Value, forceChange: Bool = false) {
    result.withInternalDataPtr { dataPtr in
      llb_buildengine_task_is_complete(self._engine, taskWrapper.taskInternal, dataPtr, forceChange)
    }
