# Platform API

The Platform API is designed to allow easy porting of the Open Screen Library
between platforms. This folder contains classes and logic used by Open Screen to
access system resources and other common OS-level facilities, such as the clock
and task runner. Note: utilities are generally not homed here, instead
preferring the top level util/ directory. New classes added here must NOT
depend on any other folders in the openscreen repository, excepting third party
libraries like Abseil or GTest. We include "default implementations" of many
platform features.

## Directory structure

 - api/ contains the Platform API which is used by the Open Screen Library.
   Some of the public API may also include adapter code that acts as a small
   shim above the C functions to be implemented by the platform. The entire
   Open Screen repository can depend on files from api/, though classes
   defined in api/ can only depend on third_party or platform/base files.

 - base/ contains declarations/definitions of API constructs. Classes homed here
   shall only depend on platform/api or this folder.

 - impl/ contains the implementation of the standalone use case, namely a
   self-contained binary using the default implementation of the platform API.
   Note: people familiar with the old layout may notice that all files from the
   posix/, linux/, and mac/ directories have been moved here with an OS-specific
   suffix (e.g. _mac, _posix).

 - test/ contains API implementations used for testing purposes, like the
   FakeClock or FakeTaskRunner.