diff options
Diffstat (limited to 'docs/tool/Modules/NaturalDocs/SourceDB/WatchedFileDefinitions.pm')
| -rw-r--r-- | docs/tool/Modules/NaturalDocs/SourceDB/WatchedFileDefinitions.pm | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/docs/tool/Modules/NaturalDocs/SourceDB/WatchedFileDefinitions.pm b/docs/tool/Modules/NaturalDocs/SourceDB/WatchedFileDefinitions.pm new file mode 100644 index 00000000..956c6644 --- /dev/null +++ b/docs/tool/Modules/NaturalDocs/SourceDB/WatchedFileDefinitions.pm @@ -0,0 +1,159 @@ +############################################################################### +# +# Package: NaturalDocs::SourceDB::WatchedFileDefinitions +# +############################################################################### +# +# A class to track the definitions appearing in a watched file. This is only used for extensions that track definition info with +# <NaturalDocs::SourceDB::ItemDefinition>-derived objects. Do not use it for extensions that only track existence. +# +############################################################################### + +# This file is part of Natural Docs, which is Copyright (C) 2003-2008 Greg Valure +# Natural Docs is licensed under the GPL + +use strict; +use integer; + + +package NaturalDocs::SourceDB::WatchedFileDefinitions; + + +# +# Variables: Members +# +# This object would only have one member, which is an array, so the object itself serves as that member. +# +# <ExtensionIDs> are used as indexes into this object. Each entry is a hashref that maps item strings to +# <NaturalDocs::SourceDB::ItemDefinition>-derived objects. This is only done for extensions that use those objects to track +# definitions, it's not needed for extensions that only track existence. If there are no definitions, the entry will be undef. +# + + +# +# Function: New +# +# Creates and returns a new object. +# +sub New + { + my $class = shift; + + my $object = [ ]; + bless $object, $class; + + return $object; + }; + + + +############################################################################### +# Group: Definition Functions +# + + +# +# Function: AddDefinition +# +# Adds a definition for the passed item string. If it's already defined, the new definition will be ignored. +# +# Parameters: +# +# extension - The <ExtensionID>. +# itemString - The item string. +# definition - The definition, which must be an object derived from <NaturalDocs::SourceDB::ItemDefinition>. +# +# Returns: +# +# Whether the definition was added, which is to say, whether this was the first definition for the passed <FileName>. +# +sub AddDefinition #(ExtensionID extension, string itemString, NaturalDocs::SourceDB::ItemDefinition definition) => bool + { + my ($self, $extension, $itemString, $definition) = @_; + + if (!defined $self->[$extension]) + { $self->[$extension] = { }; }; + + if (!exists $self->[$extension]->{$itemString}) + { + $self->[$extension]->{$itemString} = $definition; + return 1; + } + else + { return 0; }; + }; + + +# +# Function: GetDefinition +# +# Returns the <NaturalDocs::SourceDB::ItemDefinition>-derived object for the passed item string or undef if there is none. +# +sub GetDefinition #(ExtensionID extension, string itemString) => NaturalDocs::SourceDB::ItemDefinition + { + my ($self, $extension, $itemString) = @_; + + if (defined $self->[$extension]) + { return $self->[$extension]->{$itemString}; } + else + { return undef; }; + }; + + +# +# Function: DeleteDefinition +# +# Removes the definition for the passed item string. Returns whether it was successful, meaning whether a definition existed +# for that item. +# +sub DeleteDefinition #(ExtensionID extension, string itemString) => bool + { + my ($self, $extension, $itemString) = @_; + + if (defined $self->[$extension]) + { + if (exists $self->[$extension]->{$itemString}) + { + delete $self->[$extension]->{$itemString}; + + if (!scalar keys %{$self->[$extension]}) + { $self->[$extension] = undef; }; + + return 1; + }; + }; + + return 0; + }; + + +# +# Function: HasDefinitions +# +# Returns whether there are any definitions for this item. +# +sub HasDefinitions #(ExtensionID extension) => bool + { + my ($self, $extension) = @_; + + return (defined $self->[$extension]); + }; + + +# +# Function: HasDefinition +# +# Returns whether there is a definition for the passed item string. +# +sub HasDefinition #(ExtensionID extension, string itemString) => bool + { + my ($self, $extension, $itemString) = @_; + + if (defined $self->[$extension]) + { return (exists $self->[$extension]->{$itemString}); } + else + { return 0; }; + }; + + +1; |