# API Review for 1.0

For the 1.0 release, all APIs should be reviewed, as starting 1.0, they are supposed to be stable.

Right now, we have fhe following:

## Protocols

* ❌ OFApplicationDelegate
* ✅ OFCollection
* ❌ OFComparing
  * Classes implementing it should b e changed to override it with a more specific type
  * Documentation should say that it should be overridden
* ✅ OFCopying
* ❌ OFCryptoHash
* ❌ OFDatagramSocketDelegate
* ❌ OFDNSResolverHostDelegate
* ❌ OFDNSResolverQueryDelegate
* ❌ OFEnumeration
  * Documentation should say that it should be overridden with a more specific type
* ✅ OFFastEnumeration
  * API given by the compiler
* ❌ OFHTTPClientDelegate
* ❌ OFHTTPServerDelegate
* ❌ OFIPSocketAsyncConnecting
* ❌ OFIPXSocketDelegate
* ❌ OFJSONRepresentation
* ❌ OFKernelEventObserverDelegate
* ❌ OFKeyValueCoding
* ✅ OFLocking
* ❌ OFMessagePackRepresentation
* ✅ OFMutableCopying
* ❌ OFObject
* ❌ OFReadyForReadingObserving
* ❌ OFReadyForWritingObserving
* ❌ OFSequencedPacketSocketDelegate
* ❌ OFSerialization
* ❌ OFSPXSocketDelegate
* ❌ OFSPXStreamSocketDelegate
* ❌ OFStreamDelegate
* ❌ OFStreamSocketDelegate
* ❌ OFStringXMLUnescapingDelegate
* ❌ OFTCPSocketDelegate
* ❌ OFTLSSocket
* ❌ OFTLSSocketDelegate
* ❌ OFUDPSocketDelegate
* ❌ OFUNIXDatagramSocketDelegate
* ❌ OFXMLElementBuilderDelegate
* ❌ OFXMLParserDelegate

## Classes

* ✅ NSString
  * Fake class has no API and is only used to make string boxing via `@(cString)` work.
* ❌ OFAAAADNSResourceRecord
* ❌ OFAcceptFailedException
* ✅ OFAdjacentArray
  * Private
* ✅ OFAdjacentSubarray
  * Private
* ❌ OFADNSResourceRecord
* ❌ OFAllocFailedException
* ❌ OFAlreadyConnectedException
* ❌ OFApplication
* ❌ OFArray
* ❌ OFBindFailedException
* ❌ OFBitSetCharacterSet
* ✅ OFBlock
  * Has no API
* ❌ OFBytesValue
* ❌ OFChangeCurrentDirectoryPathFailedException
* ❌ OFCharacterSet
* ❌ OFCharacterSet (URLCharacterSets)
* ❌ OFChecksumMismatchException
* ❌ OFCNAMEDNSResourceRecord
* ❌ OFColor
* ❌ OFCondition
* ❌ OFConditionBroadcastFailedException
* ❌ OFConditionSignalFailedException
* ❌ OFConditionStillWaitingException
* ❌ OFConditionWaitFailedException
* ❌ OFConnectionFailedException
* ❌ OFConstantString
* ❌ OFCopyItemFailedException
* ❌ OFCountedMapTableSet
* ❌ OFCountedSet
* ❌ OFCreateDirectoryFailedException
* ❌ OFCreateSymbolicLinkFailedException
* ❌ OFCreateWindowsRegistryKeyFailedException
* ❌ OFData
* ❌ OFData (CryptoHashing)
* ❌ OFDatagramSocket
* ❌ OFData (MessagePackParsing)
* ❌ OFDate
* ❌ OFDeleteWindowsRegistryKeyFailedException
* ❌ OFDeleteWindowsRegistryValueFailedException
* ❌ OFDictionary
* ❌ OFDictionary (FileAttributes)
* ❌ OFDimensionValue
* ❌ OFDNSQuery
* ❌ OFDNSQueryFailedException
* ❌ OFDNSResolver
* ❌ OFDNSResolverSettings
* ❌ OFDNSResourceRecord
* ❌ OFDNSResponse
* ❌ OFEnumerationMutationException
* ❌ OFEnumerator
* ✅ OFEpollKernelEventObserver
  * Private
* ❌ OFException
* ❌ OFFile
* ❌ OFFileManager
* ❌ OFFileURLHandler
* ❌ OFGetCurrentDirectoryPathFailedException
* ❌ OFGetOptionFailedException
* ❌ OFGetWindowsRegistryValueFailedException
* ✅ OFGlobalBlock
  * Doesn't have an API
* ❌ OFGZIPStream
* ❌ OFHashAlreadyCalculatedException
* ❌ OFHINFODNSResourceRecord
* ❌ OFHMAC
* ❌ OFHostAddressResolver
* ❌ OFHTTPClient
* ❌ OFHTTPCookie
* ❌ OFHTTPCookieManager
* ❌ OFHTTPRequest
* ❌ OFHTTPRequestFailedException
* ❌ OFHTTPResponse
* ❌ OFHTTPServer
* ❌ OFHTTPURLHandler
* ❌ OFInflate64Stream
* ❌ OFInflateStream
* ❌ OFINICategory
* ❌ OFINIFile
* ❌ OFINIFileSettings
* ❌ OFInitializationFailedException
* ❌ OFInvalidArgumentException
* ❌ OFInvalidEncodingException
* ❌ OFInvalidFormatException
* ❌ OFInvalidJSONException
* ❌ OFInvalidServerReplyException
* ❌ OFInvertedCharacterSet
* ❌ OFInvocation
* ✅ OFIPSocketAsyncConnector
  * Private
* ❌ OFIPXSocket
* ❌ OFKernelEventObserver
* ✅ OFKqueueKernelEventObserver
  * Private
* ❌ OFLHAArchive
* ❌ OFLHAArchiveEntry
* ❌ OFLHADecompressingStream
* ❌ OFLinkFailedException
* ❌ OFList
* ❌ OFListenFailedException
* ❌ OFLoadPluginFailedException
* ❌ OFLocale
* ❌ OFLockFailedException
* ❌ OFMalformedXMLException
* ✅ OFMallocBlock
  * Doesn't have an API
* ❌ OFMapTable
* ✅ OFMapTableDictionary
  * Private
* ❌ OFMapTableEnumerator
* ✅ OFMapTableSet
  * Private
* ❌ OFMD5Hash
* ❌ OFMemoryNotPartOfObjectException
* ❌ OFMessagePackExtension
* ❌ OFMethodSignature
* ❌ OFMoveItemFailedException
* ✅ OFMutableAdjacentArray
  * Private
* ❌ OFMutableArray
* ❌ OFMutableData
* ❌ OFMutableDictionary
* ❌ OFMutableLHAArchiveEntry
* ✅ OFMutableMapTableDictionary
  * Private
* ✅ OFMutableMapTableSet
  * Private
* ❌ OFMutablePair
* ❌ OFMutableSet
* ❌ OFMutableString
* ❌ OFMutableTarArchiveEntry
* ❌ OFMutableTriple
* ❌ OFMutableURL
* ✅ OFMutableUTF8String
  * Private
* ❌ OFMutableZIPArchiveEntry
* ❌ OFMutex
* ❌ OFMXDNSResourceRecord
* ❌ OFNonretainedObjectValue
* ❌ OFNotImplementedException
* ❌ OFNotOpenException
* ❌ OFNSDNSResourceRecord
* ❌ OFNull
* ❌ OFNumber
* ❌ OFObject (KeyValueCoding) &lt;OFKeyValueCoding&gt;
* ❌ OFObject &lt;OFObject&gt;
* ❌ OFObject (OFSerialization)
* ❌ OFObserveFailedException
* ❌ OFOpenItemFailedException
* ❌ OFOpenWindowsRegistryKeyFailedException
* ❌ OFOptionsParser
* ❌ OFOutOfMemoryException
* ❌ OFOutOfRangeException
* ❌ OFPair
* ❌ OFPlugin
* ❌ OFPointerValue
* ❌ OFPointValue
* ✅ OFPollKernelEventObserver
  * Private
* ❌ OFPTRDNSResourceRecord
* ❌ OFRangeCharacterSet
* ❌ OFRangeValue
* ❌ OFReadFailedException
* ❌ OFReadOrWriteFailedException
* ❌ OFRectangleValue
* ❌ OFRecursiveMutex
* ❌ OFRemoveItemFailedException
* ❌ OFResolveHostFailedException
* ❌ OFRetrieveItemAttributesFailedException
* ❌ OFRIPEMD160Hash
* ❌ OFRPDNSResourceRecord
* ❌ OFRunLoop
* ✅ OFSandbox
  * Private in 1.0 (but public in trunk)
* ✅ OFSandboxActivationFailedException
  * Private in 1.0 (but public in trunk)
* ❌ OFSecureData
* ❌ OFSeekableStream
* ❌ OFSeekFailedException
* ✅ OFSelectKernelEventObserver
  * Private
* ❌ OFSequencedPacketSocket
* ❌ OFSet
* ❌ OFSetItemAttributesFailedException
* ❌ OFSetOptionFailedException
* ❌ OFSettings
* ❌ OFSetWindowsRegistryValueFailedException
* ❌ OFSHA1Hash
* ❌ OFSHA224Hash
* ❌ OFSHA224Or256Hash
* ❌ OFSHA256Hash
* ❌ OFSHA384Hash
* ❌ OFSHA384Or512Hash
* ❌ OFSHA512Hash
* ❌ OFSOADNSResourceRecord
* ❌ OFSortedList
* ❌ OFSPXSocket
* ❌ OFSPXStreamSocket
* ❌ OFSRVDNSResourceRecord
* ✅ OFStackBlock
  * Doesn't have an API
* ❌ OFStdIOStream
* ❌ OFStillLockedException
* ❌ OFStream
* ❌ OFStreamSocket
* ❌ OFString
* ❌ OFString (CryptoHashing)
* ❌ OFString (JSONParsing)
* ❌ OFString (PathAdditions)
* ❌ OFString (PropertyListParsing)
* ❌ OFString (Serialization)
* ❌ OFString (URLEncoding)
* ❌ OFString (XMLEscaping)
* ❌ OFString (XMLUnescaping)
* ❌ OFSubarray
* ❌ OFSubprocess
* ❌ OFSystemInfo
* ❌ OFTarArchive
* ❌ OFTarArchiveEntry
* ❌ OFTCPSocket
* ✅ OFTCPSocketSOCKS5Connector
  * Private
* ❌ OFThread
* ❌ OFThreadJoinFailedException
* ❌ OFThreadStartFailedException
* ❌ OFThreadStillRunningException
* ❌ OFTimer
* ❌ OFTriple
* ❌ OFTruncatedDataException
* ❌ OFTXTDNSResourceRecord
* ❌ OFUDPSocket
* ❌ OFUnboundNamespaceException
* ❌ OFUnboundPrefixException
* ❌ OFUndefinedKeyException
* ❌ OFUnknownXMLEntityException
* ❌ OFUnlockFailedException
* ❌ OFUnsupportedProtocolException
* ❌ OFUnsupportedVersionException
* ❌ OFURL
* ❌ OFURLHandler
* ✅ OFUTF8String
  * Private
* ❌ OFValue
* ✅ OFWin32ConsoleStdIOStream
  * Private
* ❌ OFWindowsRegistryKey
* ❌ OFWriteFailedException
* ❌ OFXMLAttribute
* ❌ OFXMLCDATA
* ❌ OFXMLCharacters
* ❌ OFXMLComment
* ❌ OFXMLElement
* ❌ OFXMLElementBuilder
* ❌ OFXMLElement (OFSerialization)
* ❌ OFXMLNode
* ❌ OFXMLParser
* ❌ OFXMLProcessingInstructions
* ❌ OFZIPArchive
* ❌ OFZIPArchiveEntry

## Commands

**Get all protocols**

```sh
find src -name '*.h' -and -not -name '*+Private.h' -and -not -wholename -and -not -wholename -exec grep '^@protocol ' {} \; | grep -v '^@protocol.*;' | sed /* ❌ /' | sed | sed | sort
```

**Get all classes**

```sh
find src -name '*.h' -and -not -name '*+Private.h' -and -not -wholename -and -not -wholename -exec grep '^@interface ' {} \; | sed /* ❌ /' | sed | sed | sed | sed | sort
```