G      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None&3Free List structure Record size File handle What to do on close if no recordposition handleIClose underlying handle and return if we have still objects in the list Add object to list'get object to list if list is non empty    Safe-Inferred The name of the "name" propertyThe name of the object file The name of the object type fileThe name of the relation file The name of the object type fileThe name of the property file"The name of the property type file#The name of the property value filePrefix for free list files  None&+0L Settings for the Graph DBThe exceptions we may throw-Something is not right with the name propertyA typed property value'the supported data types for properties'A lookup table allowing two ways lookup"IThe current model: lookup tables between names and ids types of artifacts'Handles to the various files3;Type of a relation as represented in the relation type file5!First property of the type itself68Type of an object as represented in the object type file8!First property of the type itself9;Type of a property as represented in the property type file; Data type ID<!first property of the type itself=.A property as represented in the property file?type of the property@next property idAoffset of the valueBlength of the valueC.A relation as represented in the relation fileE origin objectForigin object typeG target objectHtarget object typeItype of the relationJnext relation of origin objectKnext relation of target objectLfirst property idM+An object as represented in the object fileOtype of objectP'first relation starting from the objectQ%first relation arriving at the objectRfirst propertyS&Length of property value on value fileT&Offset of property value on value fileUIDs for data typesVIDs for types of propertiesWIDs for property valuesXIDs for types of relationsYIDs for relationsZIDs for types of objects[IDs for objects\"put our constraints in one synonym]Size of an object record^ECalculates the length of the binary serialization of the given object_size of a relation record`size of a property recordasize of a property type recordbSize of an object type recordcSize of a relation type recorddthe ID of the "name" propertyeAdd to the lookup mapsf#Convert a DataType object to its IDg+Convert a DataType ID to the Haskell objecth#Get the data type for a given valuei(Get the value in a format ready to indexjTransform a text in a index keyk#Transform an integer in a index keyl%Transform a bytestring in a index keymDefault instance for settingsn'Make our exception a standard exceptionoDefault instance (empty tables)pCDefault model: a "name" property property type with a name propertyqsimple default instancersimple binary instancessimple default instancetsimple binary instanceusimple default instancevsimple binary instancewsimple default instancexsimple binary instanceysimple default instancezsimple binary instance{Simple default instance|Simple binary instancet  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|d  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklt\[ZYXWVUTSMNOPQR|{]^CDEFGHIJKLzy_=>?@ABxw`9:;<vua678tsb345rqc'()*+,-./012"#$%&pd !oefghijkln m7   !"#$%&' ()*+,-./0123456789:;<=>?@ABC DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|None&+03HM A Trie Nodethe key (def for nothing)the value (def for nothing),the offset of next sibling (def for nothing)+the offset of first child (def for nothing)} Trie on diskThe disk HandleThe length of a recordBuild a file backed trieCreate a new trie with a given handle The limitations are: Key and Value must have a binary representation of constant length!dInsert a value if it does not exist in the tree if it exists, return the old value and does nothingQInsert a value for a key if the value existed for that key, return the old valueFInsert a value performing a given action if the key is already presentRead a given record7Read a given record whose offset must be greater than 0Lookup a value from a keyLookup a node from a KeykReturn all key and values for the given prefix which may be null (in which case all mappings are returned).{Delete the value associated with a key This only remove the value from the trienode, it doesn't prune the trie in any way.Simple binary instance}~ }~ }~}~None &236MUA class that defines basic read and write operations for a given ID and binary objectOpen all the file handles.?Set the buffer mode on the given handle, if provided. Close all the file handlesZRead the current model from the handles generate a default model if none present (new db)Generic write operation: write the given binary using the given ID and record size if no id, we write at then end otherwise we always ensure that we write at the proper offset, which is why we have fixed length records3Read a binary with a given ID from the given handleSRead all binary objects from a given handle, generating their IDs from their offsetSRead all binary objects from a given handle, generating their IDs from their offset\Read all properties, starting from a given one, with an optional filter on the Property Type3Write a property, knowing the next one in the chainVHelper method throwing an exception if we got a Maybe, otherwise return the Just value0Read a property value given an offset and length9Serialization methods for RelationTypeID + RelationType 5Serialization methods for ObjectTypeID + ObjectType 9Serialization methods for PropertyTypeID + PropertyType /Serialization methods for PropertyID + Property/Serialization methods for RelationID + Relation+Serialization methods for ObjectID + ObjectNone&*+-2346=BHKM+;A relation between two objects, with a type and properties.%An object with a type and properties.Our monad transformer.Index metadataState for the monadXRun a computation with the graph storage engine, storing the data in the given directoryGet the file handles.Get the currently known model.Get the currently known model.Get the current settings.Get the current indices.-The file used to store the index information.Create or replace an object.Replace an object.Checks if there is a duplicate on any applicable index. Then remove obsolete values from the index, and generate the list of values to add We'll only add the values once the object has been properly written, so we can have the ID of new objects.#Check if duplicates exist in index.(Insert new values in applicable indices.=Create properties from map, returns the first ID in the chainfilter objects-(Internal) Fill an object with its propertiesGet one object from its ID./Get the type name for a given low level Object.=(Internal) Build a property map by reading the property list.%Create a relation between two objects%Create a relation between two objects list relations matchinf a filterDelete a relation from the DB.)(Internal) Delete a relation from the DB.Delete an object,(Internal) Delete all properties in the listL(Internal) retrieve an object type id from its name (creating it if need be)[(Internal) retrieve a property type id from its name and data type (creating it if need be)N(Internal) retrieve an relation type id from its name (creating it if need be)(Internal) Fetch type helper)Add an index to be automatically managed.)Add an index to be automatically managed.(Internal) Create an index.(Get the indices to update, per property.7Is the given index applicable to the given object type?MonadLogger instance.Monad Base Control instance.Monad Trans Control instance.Monad Base instance.A1Should we clean the origin object relation list? 0Should we clean the target object relation list?)The next ids in the chain we didn't clean=A+None&+3FResult of a query step Relation idDirection of relationType of relationProperties of relation Target objectOne step in the query+Types of relations to follow (empty -> all)Direction of relation+Types of objects to retrieve (empty -> all)Condition to match on objectsMMaximum number of relations to follow (limit applies after all other filters)Direction to follow(Run a one step query on one given object)Default instance: navigates all out links      !"#$$%&''()*++,-./012345667889::;<==>?@ABBCDEFGHIJKKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyzz{|}~HGraphStorage-0.0.3%Database.Graph.HGraphStorage.FreeList"Database.Graph.HGraphStorage.Types"Database.Graph.HGraphStorage.Index$Database.Graph.HGraphStorage.FileOps Database.Graph.HGraphStorage.API"Database.Graph.HGraphStorage.Query&Database.Graph.HGraphStorage.ConstantsFreeListflSizeflHandleflOnEmptyClose initFreeList closeFreeList addToFreeListgetFromFreeList GraphSettingsgsMainBufferinggsFreeBufferinggsIndexBufferingGraphStorageExceptionDuplicateIndexKeyUnknownRelationTypeUnknownObjectTypeMultipleNamePropertyNoNamePropertyUnknownPropertyTypeIncoherentNamePropertyTypeID PropertyValuePVBinary PVIntegerPVTextDataTypeDTBinary DTIntegerDTTextLookupfromNametoNameModel mObjectTypesmRelationTypesmPropertyTypesHandleshObjects hObjectFree hObjectTypes hRelations hRelationFreehRelationTypes hProperties hPropertyFreehPropertyTypeshPropertyValues RelationTypertFirstProperty ObjectTypeotFirstProperty PropertyType ptDataTypeptFirstPropertyPropertypTypepNextpOffsetpLengthRelationrFrom rFromTyperTorToTyperType rFromNextrToNextrFirstPropertyObjectoType oFirstFromoFirstTooFirstPropertyPropertyValueLengthPropertyValueOffset DataTypeIDPropertyTypeID PropertyIDRelationTypeID RelationID ObjectTypeIDObjectIDGraphUsableMonad objectSize binLength relationSize propertySizepropertyTypeSizeobjectTypeSizerelationTypeSizenamePropertyID addToLookup dataTypeIDdataType valueType valueToIndex textToKey integerToKeybytestringToKey$fDefaultGraphSettings $fExceptionGraphStorageException$fDefaultLookup$fDefaultModel$fDefaultRelationType$fBinaryRelationType$fDefaultObjectType$fBinaryObjectType$fDefaultPropertyType$fBinaryPropertyType$fDefaultProperty$fBinaryProperty$fDefaultRelation$fBinaryRelation$fDefaultObject$fBinaryObjectTrietrHandletrRecordLength newFileTrienewTrie insertNewinsertlookupprefixdeleteGraphIdSerializablewritereadOnefoldAllopen setBufferModeclose readModel writeGeneric readGenericreadAllfoldAllGenericreadProperties writePropertythrowIfNothingreadPropertyValue&$fGraphIdSerializableInt16RelationType$$fGraphIdSerializableInt16ObjectType&$fGraphIdSerializableInt16PropertyType"$fGraphIdSerializableInt32Property"$fGraphIdSerializableInt32Relation $fGraphIdSerializableInt32Object GraphRelationgrIDgrFromgrTogrType grProperties GraphObjectgoIDgoType goProperties GraphStorageTGsunIs IndexInfoiiNameiiTypesiiPropsGsData gsHandlesgsModelgsDir gsSettings gsIndexeswithGraphStorage getHandlesgetModel getDirectory getSettings getIndices indexFile createObject updateObjectremoveOldValuesFromIndexcheckDuplicatesinsertNewValuesInIndexcreateProperties filterObjectspopulateObject getObject getTypeNamelistPropertiescreateRelationcreateRelation'filterRelationsdeleteRelationdeleteRelation' deleteObjectdeleteProperties objectType propertyType relationType fetchTypeaddIndex addIndex' createIndexindexMapisIndexApplicable$fMonadLoggerGraphStorageT $fMonadBaseControlbGraphStorageT $fMonadTransControlGraphStorageT$fMonadBasebGraphStorageT StepResult srRelationID srDirectionsrType srPropertiessrObject RelationStep rsRelTypes rsDirection rsTgtTypes rsTgtFilterrsLimit RelationDirBOTHINOUT queryStep$fDefaultRelationStepnamePropertyName objectFileobjectTypeFile relationFilerelationTypeFile propertyFilepropertyTypeFilepropertyValuesFile freePrefixTrieNodetnKeytnValuetnNexttnChild insertValue readRecordreadChildRecord lookupNode$fBinaryTrieNode