diff --git a/docs/libdonet/all.html b/docs/libdonet/all.html index 7997a28..6fb932a 100644 --- a/docs/libdonet/all.html +++ b/docs/libdonet/all.html @@ -1,3 +1,3 @@ List of all items in this crate

List of all items

Structs

Enums

Unions

Traits

Functions

Type Aliases

Statics

Constants

\ No newline at end of file +data-use_system_theme="false">

List of all items

Structs

Enums

Unions

Traits

Functions

Type Aliases

Statics

Constants

\ No newline at end of file diff --git a/docs/libdonet/datagram/index.html b/docs/libdonet/datagram/index.html index 1e9eb28..d136c5c 100644 --- a/docs/libdonet/datagram/index.html +++ b/docs/libdonet/datagram/index.html @@ -1,3 +1,5 @@ -libdonet::datagram - Rust

Module libdonet::datagram

source ·

Structs

\ No newline at end of file +data-use_system_theme="false">

Module libdonet::datagram

source ·
Expand description

Provides structures to write network datagrams and tools +for iterating over datagram data.

+

Structs

\ No newline at end of file diff --git a/docs/libdonet/datagram/struct.Datagram.html b/docs/libdonet/datagram/struct.Datagram.html index 451744a..f63f585 100644 --- a/docs/libdonet/datagram/struct.Datagram.html +++ b/docs/libdonet/datagram/struct.Datagram.html @@ -1,11 +1,38 @@ Datagram in libdonet::datagram - Rust

Struct libdonet::datagram::Datagram

source ·
pub struct Datagram { /* private fields */ }

Implementations§

source§

impl Datagram

source

pub fn new() -> Self

source

pub fn add_bool(&mut self, v: bool) -> DgResult

source

pub fn add_u8(&mut self, v: u8) -> DgResult

source

pub fn add_u16(&mut self, v: u16) -> DgResult

source

pub fn add_u32(&mut self, v: u32) -> DgResult

source

pub fn add_u64(&mut self, v: u64) -> DgResult

source

pub fn add_i8(&mut self, v: i8) -> DgResult

source

pub fn add_i16(&mut self, v: i16) -> DgResult

source

pub fn add_i32(&mut self, v: i32) -> DgResult

source

pub fn add_i64(&mut self, v: i64) -> DgResult

source

pub fn add_f32(&mut self, v: f32) -> DgResult

source

pub fn add_f64(&mut self, v: f64) -> DgResult

source

pub fn add_size(&mut self, v: DgSizeTag) -> DgResult

source

pub fn add_channel(&mut self, v: Channel) -> DgResult

source

pub fn add_doid(&mut self, v: DoId) -> DgResult

source

pub fn add_zone(&mut self, v: Zone) -> DgResult

source

pub fn add_location(&mut self, parent: DoId, zone: Zone) -> DgResult

source

pub fn add_data(&mut self, v: Vec<u8>) -> DgResult

source

pub fn add_datagram(&mut self, dg: &mut Datagram) -> DgResult

source

pub fn add_string(&mut self, v: &str) -> DgResult

source

pub fn add_blob(&mut self, v: Vec<u8>) -> DgResult

source

pub fn add_buffer(&mut self, bytes: DgSizeTag) -> DgBufferResult

source

pub fn add_server_header( +data-use_system_theme="false">

Struct libdonet::datagram::Datagram

source ·
pub struct Datagram { /* private fields */ }

Implementations§

source§

impl Datagram

source

pub fn new() -> Self

source

pub fn add_bool(&mut self, v: bool) -> DgResult

Adds an unsigned 8-bit integer to the datagram that is +guaranteed to be one of the values 0x00 (false) or 0x01 (true).

+
source

pub fn add_u8(&mut self, v: u8) -> DgResult

Adds an unsigned 8-bit integer value to the datagram.

+
source

pub fn add_u16(&mut self, v: u16) -> DgResult

source

pub fn add_u32(&mut self, v: u32) -> DgResult

source

pub fn add_u64(&mut self, v: u64) -> DgResult

source

pub fn add_i8(&mut self, v: i8) -> DgResult

source

pub fn add_i16(&mut self, v: i16) -> DgResult

source

pub fn add_i32(&mut self, v: i32) -> DgResult

source

pub fn add_i64(&mut self, v: i64) -> DgResult

source

pub fn add_f32(&mut self, v: f32) -> DgResult

32-bit IEEE 754 floating point. same bitwise operations.

+
source

pub fn add_f64(&mut self, v: f64) -> DgResult

64-bit IEEE 754 floating point. same bitwise operations.

+
source

pub fn add_size(&mut self, v: DgSizeTag) -> DgResult

Adds a Datagram / Field length tag to the end of the datagram.

+
source

pub fn add_channel(&mut self, v: Channel) -> DgResult

Adds a 64-bit channel ID to the end of the datagram.

+
source

pub fn add_doid(&mut self, v: DoId) -> DgResult

Adds a 32-bit Distributed Object ID to the end of the datagram.

+
source

pub fn add_zone(&mut self, v: Zone) -> DgResult

Adds a 32-bit zone ID to the end of the datagram.

+
source

pub fn add_location(&mut self, parent: DoId, zone: Zone) -> DgResult

Added for convenience, but also better performance +than adding the parent and the zone separately.

+
source

pub fn add_data(&mut self, v: Vec<u8>) -> DgResult

Adds raw bytes to the datagram via an unsigned 8-bit integer vector. +NOTE: not to be confused with add_blob(), which adds a dclass blob to the datagram.

+
source

pub fn add_datagram(&mut self, dg: &mut Datagram) -> DgResult

Appends another datagram’s binary data to this datagram.

+
source

pub fn add_string(&mut self, v: &str) -> DgResult

Adds a dclass string value to the end of the datagram. +A 16-bit length tag prefix with the string’s size in bytes is added.

+
source

pub fn add_blob(&mut self, v: Vec<u8>) -> DgResult

Adds a dclass blob value (binary data) to the end of the datagram. +A 16-bit length tag prefix with the blob’s size in bytes is added.

+
source

pub fn add_buffer(&mut self, bytes: DgSizeTag) -> DgBufferResult

Reserves an amount of bytes in the datagram buffer.

+
source

pub fn add_server_header( &mut self, to: Vec<Channel>, from: Channel, msg_type: MsgType -) -> DgResult

source

pub fn add_control_header(&mut self, msg_type: MsgType) -> DgResult

source

pub fn size(&mut self) -> DgSizeTag

source

pub fn get_data(&mut self) -> Vec<u8>

Trait Implementations§

source§

impl Default for Datagram

source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere +) -> DgResult

Appends a generic header for messages that are to be routed to +one or more role instances within the server cluster. +Use this method to avoid repetitive code for every internal message.

+

The header is formatted as shown below: +(recipients: u8, recipients: Vec, sender: Channel, message_type: u16)

+
source

pub fn add_control_header(&mut self, msg_type: MsgType) -> DgResult

Appends a control header, which is very similar to a server header, +but it always has only one recipient, which is the control channel, +and does not require a sender (or ‘from’) channel to be provided.

+
source

pub fn size(&mut self) -> DgSizeTag

source

pub fn get_data(&mut self) -> Vec<u8>

Trait Implementations§

source§

impl Default for Datagram

source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/docs/libdonet/datagram/struct.DatagramIterator.html b/docs/libdonet/datagram/struct.DatagramIterator.html index 0361301..9d668aa 100644 --- a/docs/libdonet/datagram/struct.DatagramIterator.html +++ b/docs/libdonet/datagram/struct.DatagramIterator.html @@ -1,6 +1,20 @@ -DatagramIterator in libdonet::datagram - Rust
pub struct DatagramIterator { /* private fields */ }

Implementations§

source§

impl DatagramIterator

source

pub fn new(dg: Datagram) -> Self

source

pub fn check_read_length(&mut self, bytes: DgSizeTag) -> DgResult

source

pub fn tell(&mut self) -> DgSizeTag

source

pub fn seek(&mut self, to: DgSizeTag)

source

pub fn skip(&mut self, bytes: DgSizeTag) -> DgResult

source

pub fn get_remaining(&mut self) -> DgSizeTag

source

pub fn read_data(&mut self, bytes: DgSizeTag) -> Vec<u8>

source

pub fn read_u8(&mut self) -> u8

source

pub fn read_u16(&mut self) -> u16

source

pub fn read_u32(&mut self) -> u32

source

pub fn read_u64(&mut self) -> u64

source

pub fn read_i8(&mut self) -> i8

source

pub fn read_i16(&mut self) -> i16

source

pub fn read_i32(&mut self) -> i32

source

pub fn read_i64(&mut self) -> i64

source

pub fn read_f32(&mut self) -> f32

source

pub fn read_f64(&mut self) -> f64

source

pub fn read_bool(&mut self) -> bool

source

pub fn read_size(&mut self) -> DgSizeTag

source

pub fn read_channel(&mut self) -> Channel

source

pub fn read_doid(&mut self) -> DoId

source

pub fn read_zone(&mut self) -> Zone

source

pub fn read_recipient_count(&mut self) -> u8

source

pub fn read_msg_type(&mut self) -> Protocol

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere +data-use_system_theme="false">
pub struct DatagramIterator { /* private fields */ }
Expand description

Utility for iterating value by value of a datagram message.

+

Implementations§

source§

impl DatagramIterator

source

pub fn new(dg: Datagram) -> Self

source

pub fn check_read_length(&mut self, bytes: DgSizeTag) -> DgResult

source

pub fn tell(&mut self) -> DgSizeTag

Returns the value of self.index in bytes.

+
source

pub fn seek(&mut self, to: DgSizeTag)

Manually sets the buffer_offset position.

+
source

pub fn skip(&mut self, bytes: DgSizeTag) -> DgResult

Increments the buffer_offset by bytes length. +Returns DgError.DatagramIteratorEOF if it’s past the end of the buffer.

+
source

pub fn get_remaining(&mut self) -> DgSizeTag

Returns the number of unread bytes left in the datagram

+
source

pub fn read_data(&mut self, bytes: DgSizeTag) -> Vec<u8>

Reads the next number of bytes in the datagram.

+
source

pub fn read_u8(&mut self) -> u8

source

pub fn read_u16(&mut self) -> u16

source

pub fn read_u32(&mut self) -> u32

source

pub fn read_u64(&mut self) -> u64

source

pub fn read_i8(&mut self) -> i8

source

pub fn read_i16(&mut self) -> i16

source

pub fn read_i32(&mut self) -> i32

source

pub fn read_i64(&mut self) -> i64

source

pub fn read_f32(&mut self) -> f32

32-bit IEEE 754 floating point in native endianness.

+
source

pub fn read_f64(&mut self) -> f64

64-bit IEEE 754 floating point in native endianness.

+
source

pub fn read_bool(&mut self) -> bool

source

pub fn read_size(&mut self) -> DgSizeTag

source

pub fn read_channel(&mut self) -> Channel

source

pub fn read_doid(&mut self) -> DoId

source

pub fn read_zone(&mut self) -> Zone

source

pub fn read_recipient_count(&mut self) -> u8

Get the recipient count in a datagram message. +Does not advance the DatagramIterator index.

+
source

pub fn read_msg_type(&mut self) -> Protocol

Returns the datagram’s message type. Does not advance the index. +Useful for if index needs to be saved or if next field isn’t msg type. +If iterating through a fresh datagram, use read_u16.

+

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/docs/libdonet/dcarray/index.html b/docs/libdonet/dcarray/index.html index f70fd2f..cf41f65 100644 --- a/docs/libdonet/dcarray/index.html +++ b/docs/libdonet/dcarray/index.html @@ -1,3 +1,5 @@ -libdonet::dcarray - Rust
\ No newline at end of file +data-use_system_theme="false">

Module libdonet::dcarray

source ·
Expand description

Data model of the DC Array element, which is a parameter +type that stores a list of values of the same data type.

+

Structs

Traits

\ No newline at end of file diff --git a/docs/libdonet/dcarray/struct.DCArrayType.html b/docs/libdonet/dcarray/struct.DCArrayType.html index 3ba9f34..2dabc3e 100644 --- a/docs/libdonet/dcarray/struct.DCArrayType.html +++ b/docs/libdonet/dcarray/struct.DCArrayType.html @@ -1,6 +1,9 @@ DCArrayType in libdonet::dcarray - Rust
pub struct DCArrayType { /* private fields */ }

Trait Implementations§

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere +data-use_system_theme="false">
pub struct DCArrayType { /* private fields */ }

Trait Implementations§

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/docs/libdonet/dcarray/trait.DCArrayTypeInterface.html b/docs/libdonet/dcarray/trait.DCArrayTypeInterface.html index 13652db..52502bf 100644 --- a/docs/libdonet/dcarray/trait.DCArrayTypeInterface.html +++ b/docs/libdonet/dcarray/trait.DCArrayTypeInterface.html @@ -1,14 +1,17 @@ DCArrayTypeInterface in libdonet::dcarray - Rust
pub trait DCArrayTypeInterface {
+data-use_system_theme="false">
pub trait DCArrayTypeInterface {
     // Required methods
     fn new(
-        element_type: DCTypeEnum,
+        element_type: Option<DCTypeDefinition>,
         range: Option<DCNumericRange>
-    ) -> DCArrayType;
+    ) -> Self;
     fn generate_hash(&self, hashgen: &mut DCHashGenerator);
     fn has_range(&self) -> bool;
-    fn get_range(&self) -> DCNumericRange;
-    fn get_element_type(&self) -> DCTypeDefinition;
-    fn get_array_size(&self) -> usize;
-}

Required Methods§

source

fn new(element_type: DCTypeEnum, range: Option<DCNumericRange>) -> DCArrayType

source

fn generate_hash(&self, hashgen: &mut DCHashGenerator)

source

fn has_range(&self) -> bool

source

fn get_range(&self) -> DCNumericRange

source

fn get_element_type(&self) -> DCTypeDefinition

source

fn get_array_size(&self) -> usize

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file + fn get_range(&self) -> Option<DCNumericRange>; + fn get_element_type(&self) -> Option<DCTypeDefinition>; + fn get_array_size(&self) -> u16; +}

Required Methods§

source

fn new( + element_type: Option<DCTypeDefinition>, + range: Option<DCNumericRange> +) -> Self

source

fn generate_hash(&self, hashgen: &mut DCHashGenerator)

source

fn has_range(&self) -> bool

source

fn get_range(&self) -> Option<DCNumericRange>

source

fn get_element_type(&self) -> Option<DCTypeDefinition>

source

fn get_array_size(&self) -> u16

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/docs/libdonet/dcatomic/index.html b/docs/libdonet/dcatomic/index.html new file mode 100644 index 0000000..5505a3d --- /dev/null +++ b/docs/libdonet/dcatomic/index.html @@ -0,0 +1,7 @@ +libdonet::dcatomic - Rust

Module libdonet::dcatomic

source ·
Expand description

Data model for a DC Atomic Field, which represents a remote +procedure call method of a Distributed Class.

+

Structs

  • Represents an atomic field of a Distributed Class. +This defines the interface to a DClass object, and is +always implemented as a remote procedure call (RPC).

Traits

\ No newline at end of file diff --git a/docs/libdonet/dcatomic/sidebar-items.js b/docs/libdonet/dcatomic/sidebar-items.js new file mode 100644 index 0000000..44ad8a8 --- /dev/null +++ b/docs/libdonet/dcatomic/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"struct":["DCAtomicField"],"trait":["DCAtomicFieldInterface"]}; \ No newline at end of file diff --git a/docs/libdonet/dcatomic/struct.DCAtomicField.html b/docs/libdonet/dcatomic/struct.DCAtomicField.html new file mode 100644 index 0000000..dcfef5d --- /dev/null +++ b/docs/libdonet/dcatomic/struct.DCAtomicField.html @@ -0,0 +1,16 @@ +DCAtomicField in libdonet::dcatomic - Rust
pub struct DCAtomicField { /* private fields */ }
Expand description

Represents an atomic field of a Distributed Class. +This defines the interface to a DClass object, and is +always implemented as a remote procedure call (RPC).

+

Trait Implementations§

source§

impl DCAtomicFieldInterface for DCAtomicField

source§

fn new(name: &str, dclass: Arc<Mutex<DClass>>, bogus_field: bool) -> Self

source§

fn generate_hash(&self, hashgen: &mut DCHashGenerator)

source§

fn get_num_elements(&self) -> usize

source§

fn get_element(&self, index: usize) -> Option<Arc<Mutex<DCParameter>>>

source§

fn add_element(&mut self, element: DCParameter)

source§

impl Debug for DCAtomicField

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/docs/libdonet/dcatomic/trait.DCAtomicFieldInterface.html b/docs/libdonet/dcatomic/trait.DCAtomicFieldInterface.html new file mode 100644 index 0000000..e678be6 --- /dev/null +++ b/docs/libdonet/dcatomic/trait.DCAtomicFieldInterface.html @@ -0,0 +1,10 @@ +DCAtomicFieldInterface in libdonet::dcatomic - Rust
pub trait DCAtomicFieldInterface {
+    // Required methods
+    fn new(name: &str, dclass: Arc<Mutex<DClass>>, bogus_field: bool) -> Self;
+    fn generate_hash(&self, hashgen: &mut DCHashGenerator);
+    fn get_num_elements(&self) -> usize;
+    fn get_element(&self, index: usize) -> Option<Arc<Mutex<DCParameter>>>;
+    fn add_element(&mut self, element: DCParameter);
+}

Required Methods§

source

fn new(name: &str, dclass: Arc<Mutex<DClass>>, bogus_field: bool) -> Self

source

fn generate_hash(&self, hashgen: &mut DCHashGenerator)

source

fn get_num_elements(&self) -> usize

source

fn get_element(&self, index: usize) -> Option<Arc<Mutex<DCParameter>>>

source

fn add_element(&mut self, element: DCParameter)

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/docs/libdonet/dcfield/enum.ClassField.html b/docs/libdonet/dcfield/enum.ClassField.html new file mode 100644 index 0000000..d01944d --- /dev/null +++ b/docs/libdonet/dcfield/enum.ClassField.html @@ -0,0 +1,29 @@ +ClassField in libdonet::dcfield - Rust
pub enum ClassField {
+    Field(DCField),
+    Atomic(DCAtomicField),
+    Molecular(DCMolecularField),
+}
Expand description

Enumerator representing the 3 types of fields that inherit DC Field, +which can legally be declared within a Distributed Class.

+

Plain DC Fields represent a property, or member, of a structure +or class. DC fields have a data type assigned to them.

+

DC Atomic Fields represent a method of a Distributed Class, which +is always implemented as a remote procedure call (RPC). Unlike +attribute fields, atomic fields cannot be declared within structs.

+

DC Molecular Fields represent a collection of DC Attribute or +DC Atomic Fields as one field under one identifier. The parameters +of a molecular field are the parameters of all the fields it +represents, joined together in the order in which they were declared +when the molecular field was declared.

+

Variants§

Trait Implementations§

source§

impl Debug for ClassField

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/docs/libdonet/dcfield/enum.StructField.html b/docs/libdonet/dcfield/enum.StructField.html new file mode 100644 index 0000000..35a0647 --- /dev/null +++ b/docs/libdonet/dcfield/enum.StructField.html @@ -0,0 +1,18 @@ +StructField in libdonet::dcfield - Rust
pub enum StructField {
+    Field(DCField),
+    Molecular(DCMolecularField),
+}
Expand description

A different enumerator representing DC Field types used +for DC Structs, since they cannot contain DC Atomic Fields.

+

Variants§

§

Field(DCField)

§

Molecular(DCMolecularField)

Trait Implementations§

source§

impl Debug for StructField

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/docs/libdonet/dcfield/index.html b/docs/libdonet/dcfield/index.html index e914490..93584ae 100644 --- a/docs/libdonet/dcfield/index.html +++ b/docs/libdonet/dcfield/index.html @@ -1,3 +1,9 @@ -libdonet::dcfield - Rust
\ No newline at end of file +data-use_system_theme="false">

Module libdonet::dcfield

source ·
Expand description

Base data model for DC Field elements. Alone, it represents +an attribute of a structure or Distributed Class.

+

Structs

  • A field of a Distributed Class. The DCField struct is a base for +struct and dclass fields. In the DC language, there are three types +of field declarations, which are: plain fields, atomic, and molecular.

Enums

  • Enumerator representing the 3 types of fields that inherit DC Field, +which can legally be declared within a Distributed Class.
  • A different enumerator representing DC Field types used +for DC Structs, since they cannot contain DC Atomic Fields.

Traits

\ No newline at end of file diff --git a/docs/libdonet/dcfield/sidebar-items.js b/docs/libdonet/dcfield/sidebar-items.js index d8db455..111bec3 100644 --- a/docs/libdonet/dcfield/sidebar-items.js +++ b/docs/libdonet/dcfield/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"struct":["DCField"],"trait":["DCFieldInterface"]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"enum":["ClassField","StructField"],"struct":["DCField"],"trait":["DCFieldInterface"]}; \ No newline at end of file diff --git a/docs/libdonet/dcfield/struct.DCField.html b/docs/libdonet/dcfield/struct.DCField.html index 7cd7fb3..12e39cd 100644 --- a/docs/libdonet/dcfield/struct.DCField.html +++ b/docs/libdonet/dcfield/struct.DCField.html @@ -1,6 +1,9 @@ -DCField in libdonet::dcfield - Rust

Struct libdonet::dcfield::DCField

source ·
pub struct DCField { /* private fields */ }

Trait Implementations§

source§

impl DCFieldInterface for DCField

source§

fn new(name: &str, id: FieldId) -> Self

source§

fn generate_hash(&mut self)

source§

fn set_field_id(&mut self, id: FieldId)

source§

fn set_field_name(&mut self, name: String)

source§

fn set_parent_struct(&mut self, parent: Arc<Mutex<DCStruct>>)

source§

fn set_parent_dclass(&mut self, parent: Arc<Mutex<DClass>>)

source§

impl Debug for DCField

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere +data-use_system_theme="false">

Struct libdonet::dcfield::DCField

source ·
pub struct DCField { /* private fields */ }
Expand description

A field of a Distributed Class. The DCField struct is a base for +struct and dclass fields. In the DC language, there are three types +of field declarations, which are: plain fields, atomic, and molecular.

+

Trait Implementations§

source§

impl DCFieldInterface for DCField

source§

fn new(name: &str, dtype: DCTypeDefinition) -> Self

source§

fn generate_hash(&self, hashgen: &mut DCHashGenerator)

source§

fn get_field_id(&self) -> FieldId

source§

fn get_dclass(&self) -> Arc<Mutex<DClass>>

source§

fn set_field_id(&mut self, id: FieldId)

source§

fn set_field_name(&mut self, name: String)

source§

fn set_field_type(&mut self, dtype: DCTypeDefinition)

source§

fn set_default_value(&mut self, value: Vec<u8>)

source§

fn set_bogus_field(&mut self, is_bogus: bool)

source§

fn set_parent_struct(&mut self, parent: Arc<Mutex<DCStruct>>)

source§

fn set_parent_dclass(&mut self, parent: Arc<Mutex<DClass>>)

source§

fn has_default_value(&self) -> bool

source§

fn validate_ranges(&self, packed_data: &Datagram) -> bool

source§

fn is_bogus_field(&self) -> bool

source§

fn is_required(&self) -> bool

source§

fn is_broadcast(&self) -> bool

source§

fn is_ram(&self) -> bool

source§

fn is_db(&self) -> bool

source§

fn is_clsend(&self) -> bool

source§

fn is_clrecv(&self) -> bool

source§

fn is_ownsend(&self) -> bool

source§

fn is_ownrecv(&self) -> bool

source§

fn is_airecv(&self) -> bool

source§

impl Debug for DCField

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/docs/libdonet/dcfield/trait.DCFieldInterface.html b/docs/libdonet/dcfield/trait.DCFieldInterface.html index ace7146..9265867 100644 --- a/docs/libdonet/dcfield/trait.DCFieldInterface.html +++ b/docs/libdonet/dcfield/trait.DCFieldInterface.html @@ -1,11 +1,28 @@ DCFieldInterface in libdonet::dcfield - Rust
pub trait DCFieldInterface {
-    // Required methods
-    fn new(name: &str, id: FieldId) -> Self;
-    fn generate_hash(&mut self);
+data-use_system_theme="false">
pub trait DCFieldInterface {
+
Show 23 methods // Required methods + fn new(name: &str, dtype: DCTypeDefinition) -> Self; + fn generate_hash(&self, hashgen: &mut DCHashGenerator); + fn get_field_id(&self) -> FieldId; + fn get_dclass(&self) -> Arc<Mutex<DClass>>; fn set_field_id(&mut self, id: FieldId); fn set_field_name(&mut self, name: String); + fn set_field_type(&mut self, dtype: DCTypeDefinition); + fn set_default_value(&mut self, value: Vec<u8>); + fn set_bogus_field(&mut self, is_bogus: bool); fn set_parent_struct(&mut self, parent: Arc<Mutex<DCStruct>>); fn set_parent_dclass(&mut self, parent: Arc<Mutex<DClass>>); -}

Required Methods§

source

fn new(name: &str, id: FieldId) -> Self

source

fn generate_hash(&mut self)

source

fn set_field_id(&mut self, id: FieldId)

source

fn set_field_name(&mut self, name: String)

source

fn set_parent_struct(&mut self, parent: Arc<Mutex<DCStruct>>)

source

fn set_parent_dclass(&mut self, parent: Arc<Mutex<DClass>>)

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file + fn has_default_value(&self) -> bool; + fn validate_ranges(&self, packed_data: &Datagram) -> bool; + fn is_bogus_field(&self) -> bool; + fn is_required(&self) -> bool; + fn is_broadcast(&self) -> bool; + fn is_ram(&self) -> bool; + fn is_db(&self) -> bool; + fn is_clsend(&self) -> bool; + fn is_clrecv(&self) -> bool; + fn is_ownsend(&self) -> bool; + fn is_ownrecv(&self) -> bool; + fn is_airecv(&self) -> bool; +
}

Required Methods§

source

fn new(name: &str, dtype: DCTypeDefinition) -> Self

source

fn generate_hash(&self, hashgen: &mut DCHashGenerator)

source

fn get_field_id(&self) -> FieldId

source

fn get_dclass(&self) -> Arc<Mutex<DClass>>

source

fn set_field_id(&mut self, id: FieldId)

source

fn set_field_name(&mut self, name: String)

source

fn set_field_type(&mut self, dtype: DCTypeDefinition)

source

fn set_default_value(&mut self, value: Vec<u8>)

source

fn set_bogus_field(&mut self, is_bogus: bool)

source

fn set_parent_struct(&mut self, parent: Arc<Mutex<DCStruct>>)

source

fn set_parent_dclass(&mut self, parent: Arc<Mutex<DClass>>)

source

fn has_default_value(&self) -> bool

source

fn validate_ranges(&self, packed_data: &Datagram) -> bool

source

fn is_bogus_field(&self) -> bool

source

fn is_required(&self) -> bool

source

fn is_broadcast(&self) -> bool

source

fn is_ram(&self) -> bool

source

fn is_db(&self) -> bool

source

fn is_clsend(&self) -> bool

source

fn is_clrecv(&self) -> bool

source

fn is_ownsend(&self) -> bool

source

fn is_ownrecv(&self) -> bool

source

fn is_airecv(&self) -> bool

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/docs/libdonet/dcfile/index.html b/docs/libdonet/dcfile/index.html index 6e5d318..e0abd2f 100644 --- a/docs/libdonet/dcfile/index.html +++ b/docs/libdonet/dcfile/index.html @@ -1,3 +1,7 @@ -libdonet::dcfile - Rust
\ No newline at end of file +data-use_system_theme="false">

Module libdonet::dcfile

source ·
Expand description

Root structure that stores the collection of DC elements +in memory. Provides functions for manipulating the tree.

+

Structs

  • Data model that provides a high level representation of a single, +or collection, of DC files and their elements such as class imports, +type definitions, structures, and Distributed Classes.

Traits

\ No newline at end of file diff --git a/docs/libdonet/dcfile/struct.DCFile.html b/docs/libdonet/dcfile/struct.DCFile.html index 4ec412a..83635e7 100644 --- a/docs/libdonet/dcfile/struct.DCFile.html +++ b/docs/libdonet/dcfile/struct.DCFile.html @@ -1,6 +1,14 @@ -DCFile in libdonet::dcfile - Rust

Struct libdonet::dcfile::DCFile

source ·
pub struct DCFile { /* private fields */ }

Implementations§

Trait Implementations§

source§

impl DCFileInterface for DCFile

source§

fn get_hash(&mut self) -> DCFileHash

source§

fn generate_hash(&mut self, hashgen: &mut DCHashGenerator)

source§

fn get_pretty_hash(&mut self) -> String

source§

fn add_field(&mut self, field: DCField)

source§

fn get_num_imports(&mut self) -> usize

source§

fn get_python_import(&mut self, index: usize) -> DCImport

source§

fn add_python_import(&mut self, import: DCImport)

source§

fn get_num_keywords(&self) -> usize

source§

fn get_keyword(&self, index: usize) -> Arc<DCKeyword>

source§

fn has_keyword(&self, keyword: String) -> bool

source§

fn add_keyword(&mut self, keyword: DCKeyword)

source§

fn add_typedef(&mut self, name: String) -> Result<(), ()>

source§

fn get_num_dclasses(&mut self) -> usize

source§

fn get_next_dclass_id(&mut self) -> DClassId

source§

fn get_dclass(&mut self, index: usize) -> Arc<Mutex<DClass>>

source§

fn get_dclass_by_id(&mut self, id: DClassId) -> Arc<Mutex<DClass>>

source§

fn get_dclass_by_name(&mut self, name: &str) -> Arc<Mutex<DClass>>

source§

fn add_dclass(&mut self, dclass: DClass)

source§

fn get_num_structs(&mut self) -> usize

source§

fn get_struct(&mut self, index: usize) -> Arc<Mutex<DCStruct>>

source§

fn add_struct(&mut self, strct: DCStruct)

source§

impl Debug for DCFile

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere +data-use_system_theme="false">

Struct libdonet::dcfile::DCFile

source ·
pub struct DCFile { /* private fields */ }
Expand description

Data model that provides a high level representation of a single, +or collection, of DC files and their elements such as class imports, +type definitions, structures, and Distributed Classes.

+

Implementations§

Trait Implementations§

source§

impl DCFileInterface for DCFile

source§

fn get_hash(&mut self) -> DCFileHash

Returns a 32-bit hash index associated with this file. This number is +guaranteed to be consistent if the contents of the file have not changed, +and it is very likely to be different if the contents of the file do change.

+
source§

fn generate_hash(&mut self, hashgen: &mut DCHashGenerator)

Accumulates the elements of the DC file into the hash.

+
source§

fn get_pretty_hash(&mut self) -> String

Returns a string with the hash as a pretty format hexadecimal.

+
source§

fn add_field(&mut self, field: DCField)

source§

fn get_num_imports(&mut self) -> usize

source§

fn get_python_import(&mut self, index: usize) -> DCImport

source§

fn add_python_import(&mut self, import: DCImport)

source§

fn get_num_keywords(&self) -> usize

source§

fn get_keyword(&self, index: usize) -> Arc<DCKeyword>

source§

fn has_keyword(&self, keyword: String) -> bool

source§

fn add_keyword(&mut self, keyword: DCKeyword)

source§

fn add_typedef(&mut self, name: String) -> Result<(), ()>

source§

fn get_num_dclasses(&mut self) -> usize

source§

fn get_next_dclass_id(&mut self) -> DClassId

source§

fn get_dclass(&mut self, index: usize) -> Arc<Mutex<DClass>>

source§

fn get_dclass_by_id(&mut self, id: DClassId) -> Arc<Mutex<DClass>>

source§

fn get_dclass_by_name(&mut self, name: &str) -> Arc<Mutex<DClass>>

source§

fn add_dclass(&mut self, dclass: DClass)

source§

fn get_num_structs(&mut self) -> usize

source§

fn get_struct(&mut self, index: usize) -> Arc<Mutex<DCStruct>>

source§

fn add_struct(&mut self, strct: DCStruct)

source§

impl Debug for DCFile

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/docs/libdonet/dcfile/struct.DCImport.html b/docs/libdonet/dcfile/struct.DCImport.html index 9723949..339f900 100644 --- a/docs/libdonet/dcfile/struct.DCImport.html +++ b/docs/libdonet/dcfile/struct.DCImport.html @@ -1,9 +1,9 @@ DCImport in libdonet::dcfile - Rust

Struct libdonet::dcfile::DCImport

source ·
pub struct DCImport {
+data-use_system_theme="false">

Struct libdonet::dcfile::DCImport

source ·
pub struct DCImport {
     pub python_module: String,
     pub symbols: Vec<String>,
-}

Fields§

§python_module: String§symbols: Vec<String>

Implementations§

source§

impl DCImport

source

pub fn new(mod_: String, symbols: Vec<String>) -> DCImport

Trait Implementations§

source§

impl Clone for DCImport

source§

fn clone(&self) -> DCImport

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DCImport

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere +}

Fields§

§python_module: String§symbols: Vec<String>

Implementations§

source§

impl DCImport

source

pub fn new(mod_: String, symbols: Vec<String>) -> DCImport

Trait Implementations§

source§

impl Clone for DCImport

source§

fn clone(&self) -> DCImport

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DCImport

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/docs/libdonet/dcfile/trait.DCFileInterface.html b/docs/libdonet/dcfile/trait.DCFileInterface.html index 0b05a85..2ae448d 100644 --- a/docs/libdonet/dcfile/trait.DCFileInterface.html +++ b/docs/libdonet/dcfile/trait.DCFileInterface.html @@ -1,6 +1,6 @@ DCFileInterface in libdonet::dcfile - Rust
pub trait DCFileInterface {
+data-use_system_theme="false">
pub trait DCFileInterface {
 
Show 21 methods // Required methods fn get_hash(&mut self) -> DCFileHash; fn generate_hash(&mut self, hashgen: &mut DCHashGenerator); @@ -23,4 +23,4 @@ fn get_num_structs(&mut self) -> usize; fn get_struct(&mut self, index: usize) -> Arc<Mutex<DCStruct>>; fn add_struct(&mut self, strct: DCStruct); -
}

Required Methods§

source

fn get_hash(&mut self) -> DCFileHash

source

fn generate_hash(&mut self, hashgen: &mut DCHashGenerator)

source

fn get_pretty_hash(&mut self) -> String

source

fn add_field(&mut self, field: DCField)

source

fn get_num_imports(&mut self) -> usize

source

fn get_python_import(&mut self, index: usize) -> DCImport

source

fn add_python_import(&mut self, import: DCImport)

source

fn get_num_keywords(&self) -> usize

source

fn get_keyword(&self, index: usize) -> Arc<DCKeyword>

source

fn has_keyword(&self, keyword: String) -> bool

source

fn add_keyword(&mut self, keyword: DCKeyword)

source

fn add_typedef(&mut self, name: String) -> Result<(), ()>

source

fn get_num_dclasses(&mut self) -> usize

source

fn get_next_dclass_id(&mut self) -> DClassId

source

fn get_dclass(&mut self, index: usize) -> Arc<Mutex<DClass>>

source

fn get_dclass_by_id(&mut self, id: DClassId) -> Arc<Mutex<DClass>>

source

fn get_dclass_by_name(&mut self, name: &str) -> Arc<Mutex<DClass>>

source

fn add_dclass(&mut self, dclass: DClass)

source

fn get_num_structs(&mut self) -> usize

source

fn get_struct(&mut self, index: usize) -> Arc<Mutex<DCStruct>>

source

fn add_struct(&mut self, strct: DCStruct)

Implementors§

\ No newline at end of file +
}

Required Methods§

source

fn get_hash(&mut self) -> DCFileHash

source

fn generate_hash(&mut self, hashgen: &mut DCHashGenerator)

source

fn get_pretty_hash(&mut self) -> String

source

fn add_field(&mut self, field: DCField)

source

fn get_num_imports(&mut self) -> usize

source

fn get_python_import(&mut self, index: usize) -> DCImport

source

fn add_python_import(&mut self, import: DCImport)

source

fn get_num_keywords(&self) -> usize

source

fn get_keyword(&self, index: usize) -> Arc<DCKeyword>

source

fn has_keyword(&self, keyword: String) -> bool

source

fn add_keyword(&mut self, keyword: DCKeyword)

source

fn add_typedef(&mut self, name: String) -> Result<(), ()>

source

fn get_num_dclasses(&mut self) -> usize

source

fn get_next_dclass_id(&mut self) -> DClassId

source

fn get_dclass(&mut self, index: usize) -> Arc<Mutex<DClass>>

source

fn get_dclass_by_id(&mut self, id: DClassId) -> Arc<Mutex<DClass>>

source

fn get_dclass_by_name(&mut self, name: &str) -> Arc<Mutex<DClass>>

source

fn add_dclass(&mut self, dclass: DClass)

source

fn get_num_structs(&mut self) -> usize

source

fn get_struct(&mut self, index: usize) -> Arc<Mutex<DCStruct>>

source

fn add_struct(&mut self, strct: DCStruct)

Implementors§

\ No newline at end of file diff --git a/docs/libdonet/dckeyword/enum.IdentifyKeyword.html b/docs/libdonet/dckeyword/enum.IdentifyKeyword.html new file mode 100644 index 0000000..944ee7e --- /dev/null +++ b/docs/libdonet/dckeyword/enum.IdentifyKeyword.html @@ -0,0 +1,17 @@ +IdentifyKeyword in libdonet::dckeyword - Rust
pub enum IdentifyKeyword {
+    ByStruct(DCKeyword),
+    ByName(String),
+}
Expand description

Represents the two types of inputs that DCKeywordList.has_keyword`` accepts for looking up a Keyword. In Panda and Astron, the has_keyword` method is overloaded instead.

+

Variants§

§

ByStruct(DCKeyword)

§

ByName(String)

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/docs/libdonet/dckeyword/index.html b/docs/libdonet/dckeyword/index.html index 97c67bb..1ab71fa 100644 --- a/docs/libdonet/dckeyword/index.html +++ b/docs/libdonet/dckeyword/index.html @@ -1,3 +1,7 @@ -libdonet::dckeyword - Rust
\ No newline at end of file +data-use_system_theme="false">

Module libdonet::dckeyword

source ·
Expand description

Representation of arbitrary and historical +keywords as defined in the DC file.

+

Structs

Enums

  • Represents the two types of inputs that DCKeywordList.has_keyword`` accepts for looking up a Keyword. In Panda and Astron, the has_keyword` method is overloaded instead.

Traits

Type Aliases

  • This is a flag bitmask for historical keywords. +Panda uses a C/C++ ‘int’ for this, which is stored +as 4 bytes in modern 32-bit and 64-bit C/C++ compilers.
  • A map of key/value pairs mapping keyword names to DCKeyword struct pointers.
\ No newline at end of file diff --git a/docs/libdonet/dckeyword/sidebar-items.js b/docs/libdonet/dckeyword/sidebar-items.js index 694ef66..eeea23f 100644 --- a/docs/libdonet/dckeyword/sidebar-items.js +++ b/docs/libdonet/dckeyword/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"struct":["DCKeyword"],"trait":["DCKeywordInterface"],"type":["HistoricalFlag"]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"enum":["IdentifyKeyword"],"struct":["DCKeyword","DCKeywordList"],"trait":["DCKeywordInterface","DCKeywordListInterface"],"type":["HistoricalFlag","KeywordName2Keyword"]}; \ No newline at end of file diff --git a/docs/libdonet/dckeyword/struct.DCKeyword.html b/docs/libdonet/dckeyword/struct.DCKeyword.html index 95229d5..a418553 100644 --- a/docs/libdonet/dckeyword/struct.DCKeyword.html +++ b/docs/libdonet/dckeyword/struct.DCKeyword.html @@ -1,6 +1,8 @@ DCKeyword in libdonet::dckeyword - Rust
pub struct DCKeyword { /* private fields */ }

Trait Implementations§

source§

impl DCKeywordInterface for DCKeyword

source§

impl Debug for DCKeyword

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere +data-use_system_theme="false">
pub struct DCKeyword { /* private fields */ }

Trait Implementations§

source§

impl DCKeywordInterface for DCKeyword

source§

fn new(name: String, historical_flag: Option<HistoricalFlag>) -> Self

source§

fn generate_hash(&self, hashgen: &mut DCHashGenerator)

source§

fn get_name(&self) -> String

source§

fn get_historical_flag(&self) -> HistoricalFlag

source§

fn clear_historical_flag(&mut self)

source§

impl Debug for DCKeyword

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq for DCKeyword

source§

fn eq(&self, other: &DCKeyword) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for DCKeyword

source§

impl StructuralEq for DCKeyword

source§

impl StructuralPartialEq for DCKeyword

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/docs/libdonet/dckeyword/struct.DCKeywordList.html b/docs/libdonet/dckeyword/struct.DCKeywordList.html new file mode 100644 index 0000000..76d5f0d --- /dev/null +++ b/docs/libdonet/dckeyword/struct.DCKeywordList.html @@ -0,0 +1,19 @@ +DCKeywordList in libdonet::dckeyword - Rust
pub struct DCKeywordList { /* private fields */ }

Trait Implementations§

source§

impl DCKeywordListInterface for DCKeywordList

source§

fn _get_keyword_list(&self) -> Vec<Arc<Mutex<DCKeyword>>>

Returns a clone of this object’s keyword array.

+
source§

fn _get_keywords_by_name_map(&self) -> KeywordName2Keyword

Returns a clone of this object’s keyword name map.

+
source§

fn compare_with(&self, target: &DCKeywordList) -> bool

Compares this Keyword List with another DCKeywordList object.

+
source§

fn copy_keywords(&mut self, target: &DCKeywordList)

Overwrites the DCKeywords of this list with the target’s DCKeywords.

+
source§

fn clear_keywords(&mut self)

Clears the DCKeywords array, keyword name map, and +historical flags bitmask from this DCKeywordList struct.

+
source§

fn new() -> Self

source§

fn generate_hash(&self, hashgen: &mut DCHashGenerator)

source§

fn add_keyword(&mut self, keyword: DCKeyword) -> Result<(), ()>

source§

fn get_num_keywords(&self) -> usize

source§

fn has_keyword(&self, kw: IdentifyKeyword) -> bool

source§

fn get_keyword(&self, index: usize) -> Option<Arc<Mutex<DCKeyword>>>

source§

fn get_keyword_by_name(&self, name: String) -> Option<Arc<Mutex<DCKeyword>>>

source§

impl Debug for DCKeywordList

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for DCKeywordList

source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/docs/libdonet/dckeyword/trait.DCKeywordInterface.html b/docs/libdonet/dckeyword/trait.DCKeywordInterface.html index 27b100f..6077bae 100644 --- a/docs/libdonet/dckeyword/trait.DCKeywordInterface.html +++ b/docs/libdonet/dckeyword/trait.DCKeywordInterface.html @@ -1,9 +1,10 @@ DCKeywordInterface in libdonet::dckeyword - Rust
pub trait DCKeywordInterface {
+data-use_system_theme="false">
pub trait DCKeywordInterface {
     // Required methods
-    fn new(name: String, historical_flag: Option<HistoricalFlag>) -> DCKeyword;
+    fn new(name: String, historical_flag: Option<HistoricalFlag>) -> Self;
+    fn generate_hash(&self, hashgen: &mut DCHashGenerator);
     fn get_name(&self) -> String;
     fn get_historical_flag(&self) -> HistoricalFlag;
     fn clear_historical_flag(&mut self);
-}

Required Methods§

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file +}

Required Methods§

source

fn new(name: String, historical_flag: Option<HistoricalFlag>) -> Self

source

fn generate_hash(&self, hashgen: &mut DCHashGenerator)

source

fn get_name(&self) -> String

source

fn get_historical_flag(&self) -> HistoricalFlag

source

fn clear_historical_flag(&mut self)

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/docs/libdonet/dckeyword/trait.DCKeywordListInterface.html b/docs/libdonet/dckeyword/trait.DCKeywordListInterface.html new file mode 100644 index 0000000..b047a7c --- /dev/null +++ b/docs/libdonet/dckeyword/trait.DCKeywordListInterface.html @@ -0,0 +1,17 @@ +DCKeywordListInterface in libdonet::dckeyword - Rust
pub trait DCKeywordListInterface {
+    // Required methods
+    fn new() -> Self;
+    fn generate_hash(&self, hashgen: &mut DCHashGenerator);
+    fn add_keyword(&mut self, keyword: DCKeyword) -> Result<(), ()>;
+    fn get_num_keywords(&self) -> usize;
+    fn has_keyword(&self, kw: IdentifyKeyword) -> bool;
+    fn get_keyword(&self, index: usize) -> Option<Arc<Mutex<DCKeyword>>>;
+    fn get_keyword_by_name(&self, name: String) -> Option<Arc<Mutex<DCKeyword>>>;
+    fn _get_keyword_list(&self) -> Vec<Arc<Mutex<DCKeyword>>>;
+    fn _get_keywords_by_name_map(&self) -> KeywordName2Keyword;
+    fn compare_with(&self, target: &DCKeywordList) -> bool;
+    fn copy_keywords(&mut self, target: &DCKeywordList);
+    fn clear_keywords(&mut self);
+}

Required Methods§

source

fn new() -> Self

source

fn generate_hash(&self, hashgen: &mut DCHashGenerator)

source

fn add_keyword(&mut self, keyword: DCKeyword) -> Result<(), ()>

source

fn get_num_keywords(&self) -> usize

source

fn has_keyword(&self, kw: IdentifyKeyword) -> bool

source

fn get_keyword(&self, index: usize) -> Option<Arc<Mutex<DCKeyword>>>

source

fn get_keyword_by_name(&self, name: String) -> Option<Arc<Mutex<DCKeyword>>>

source

fn _get_keyword_list(&self) -> Vec<Arc<Mutex<DCKeyword>>>

source

fn _get_keywords_by_name_map(&self) -> KeywordName2Keyword

source

fn compare_with(&self, target: &DCKeywordList) -> bool

source

fn copy_keywords(&mut self, target: &DCKeywordList)

source

fn clear_keywords(&mut self)

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/docs/libdonet/dckeyword/type.HistoricalFlag.html b/docs/libdonet/dckeyword/type.HistoricalFlag.html index 4e71d1b..80d445c 100644 --- a/docs/libdonet/dckeyword/type.HistoricalFlag.html +++ b/docs/libdonet/dckeyword/type.HistoricalFlag.html @@ -1,3 +1,6 @@ -HistoricalFlag in libdonet::dckeyword - Rust
pub type HistoricalFlag = u16;
\ No newline at end of file +data-use_system_theme="false">
pub type HistoricalFlag = i32;
Expand description

This is a flag bitmask for historical keywords. +Panda uses a C/C++ ‘int’ for this, which is stored +as 4 bytes in modern 32-bit and 64-bit C/C++ compilers.

+
\ No newline at end of file diff --git a/docs/libdonet/dckeyword/type.KeywordName2Keyword.html b/docs/libdonet/dckeyword/type.KeywordName2Keyword.html new file mode 100644 index 0000000..dcee49b --- /dev/null +++ b/docs/libdonet/dckeyword/type.KeywordName2Keyword.html @@ -0,0 +1,4 @@ +KeywordName2Keyword in libdonet::dckeyword - Rust
pub type KeywordName2Keyword = MultiMap<String, Arc<Mutex<DCKeyword>>>;
Expand description

A map of key/value pairs mapping keyword names to DCKeyword struct pointers.

+

Aliased Type§

struct KeywordName2Keyword { /* private fields */ }
\ No newline at end of file diff --git a/docs/libdonet/dclass/index.html b/docs/libdonet/dclass/index.html index a087707..b5b26bc 100644 --- a/docs/libdonet/dclass/index.html +++ b/docs/libdonet/dclass/index.html @@ -1,3 +1,5 @@ -libdonet::dclass - Rust
\ No newline at end of file +data-use_system_theme="false">

Module libdonet::dclass

source ·
Expand description

Data model for Distributed Class definitions in the DC file. +Stores DC Fields and tracks class hierarchy.

+

Structs

Traits

Type Aliases

\ No newline at end of file diff --git a/docs/libdonet/dclass/struct.DClass.html b/docs/libdonet/dclass/struct.DClass.html index 440c975..71f1674 100644 --- a/docs/libdonet/dclass/struct.DClass.html +++ b/docs/libdonet/dclass/struct.DClass.html @@ -1,6 +1,6 @@ DClass in libdonet::dclass - Rust

Struct libdonet::dclass::DClass

source ·
pub struct DClass { /* private fields */ }

Trait Implementations§

source§

impl DClassInterface for DClass

source§

fn new(name: &str) -> Self

source§

fn generate_hash(&mut self, hashgen: &mut DCHashGenerator)

source§

fn set_parent(&mut self, parent: Arc<Mutex<DClass>>)

source§

fn get_name(&mut self) -> String

source§

fn get_class_id(&mut self) -> DClassId

source§

fn set_class_id(&mut self, id: DClassId)

source§

fn get_num_parents(&mut self) -> usize

source§

fn get_parent(&mut self, index: usize) -> Option<Arc<Mutex<DClass>>>

source§

fn has_constructor(&mut self) -> bool

source§

fn get_constructor(&mut self) -> Option<Arc<Mutex<DCField>>>

source§

impl Debug for DClass

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere +data-use_system_theme="false">

Struct libdonet::dclass::DClass

source ·
pub struct DClass { /* private fields */ }

Trait Implementations§

source§

impl DClassInterface for DClass

source§

fn new(name: &str) -> Self

source§

fn generate_hash(&mut self, hashgen: &mut DCHashGenerator)

source§

fn set_parent(&mut self, parent: Arc<Mutex<DClass>>)

source§

fn get_name(&mut self) -> String

source§

fn get_dclass_id(&mut self) -> DClassId

source§

fn set_dclass_id(&mut self, id: DClassId)

source§

fn get_num_parents(&mut self) -> usize

source§

fn get_parent(&mut self, index: usize) -> Option<Arc<Mutex<DClass>>>

source§

fn has_constructor(&mut self) -> bool

source§

fn get_constructor(&mut self) -> Option<Arc<Mutex<DCAtomicField>>>

source§

impl Debug for DClass

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/docs/libdonet/dclass/trait.DClassInterface.html b/docs/libdonet/dclass/trait.DClassInterface.html index cb05cca..d5b211c 100644 --- a/docs/libdonet/dclass/trait.DClassInterface.html +++ b/docs/libdonet/dclass/trait.DClassInterface.html @@ -1,15 +1,15 @@ DClassInterface in libdonet::dclass - Rust
pub trait DClassInterface {
+data-use_system_theme="false">
pub trait DClassInterface {
     // Required methods
     fn new(name: &str) -> Self;
     fn generate_hash(&mut self, hashgen: &mut DCHashGenerator);
     fn set_parent(&mut self, parent: Arc<Mutex<DClass>>);
     fn get_name(&mut self) -> String;
-    fn get_class_id(&mut self) -> DClassId;
-    fn set_class_id(&mut self, id: DClassId);
+    fn get_dclass_id(&mut self) -> DClassId;
+    fn set_dclass_id(&mut self, id: DClassId);
     fn get_num_parents(&mut self) -> usize;
     fn get_parent(&mut self, index: usize) -> Option<Arc<Mutex<DClass>>>;
     fn has_constructor(&mut self) -> bool;
-    fn get_constructor(&mut self) -> Option<Arc<Mutex<DCField>>>;
-}

Required Methods§

source

fn new(name: &str) -> Self

source

fn generate_hash(&mut self, hashgen: &mut DCHashGenerator)

source

fn set_parent(&mut self, parent: Arc<Mutex<DClass>>)

source

fn get_name(&mut self) -> String

source

fn get_class_id(&mut self) -> DClassId

source

fn set_class_id(&mut self, id: DClassId)

source

fn get_num_parents(&mut self) -> usize

source

fn get_parent(&mut self, index: usize) -> Option<Arc<Mutex<DClass>>>

source

fn has_constructor(&mut self) -> bool

source

fn get_constructor(&mut self) -> Option<Arc<Mutex<DCField>>>

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file + fn get_constructor(&mut self) -> Option<Arc<Mutex<DCAtomicField>>>; +}

Required Methods§

source

fn new(name: &str) -> Self

source

fn generate_hash(&mut self, hashgen: &mut DCHashGenerator)

source

fn set_parent(&mut self, parent: Arc<Mutex<DClass>>)

source

fn get_name(&mut self) -> String

source

fn get_dclass_id(&mut self) -> DClassId

source

fn set_dclass_id(&mut self, id: DClassId)

source

fn get_num_parents(&mut self) -> usize

source

fn get_parent(&mut self, index: usize) -> Option<Arc<Mutex<DClass>>>

source

fn has_constructor(&mut self) -> bool

source

fn get_constructor(&mut self) -> Option<Arc<Mutex<DCAtomicField>>>

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/docs/libdonet/dclass/type.FieldId2Field.html b/docs/libdonet/dclass/type.FieldId2Field.html index dbbf8ea..ce3c186 100644 --- a/docs/libdonet/dclass/type.FieldId2Field.html +++ b/docs/libdonet/dclass/type.FieldId2Field.html @@ -1,3 +1,3 @@ FieldId2Field in libdonet::dclass - Rust

Type Alias libdonet::dclass::FieldId2Field

source ·
pub type FieldId2Field = MultiMap<FieldId, Arc<Mutex<DCField>>>;

Aliased Type§

struct FieldId2Field { /* private fields */ }
\ No newline at end of file +data-use_system_theme="false">

Type Alias libdonet::dclass::FieldId2Field

source ·
pub type FieldId2Field = MultiMap<FieldId, Arc<Mutex<ClassField>>>;

Aliased Type§

struct FieldId2Field { /* private fields */ }
\ No newline at end of file diff --git a/docs/libdonet/dclass/type.FieldName2Field.html b/docs/libdonet/dclass/type.FieldName2Field.html index 77a5c9d..d09557e 100644 --- a/docs/libdonet/dclass/type.FieldName2Field.html +++ b/docs/libdonet/dclass/type.FieldName2Field.html @@ -1,3 +1,3 @@ FieldName2Field in libdonet::dclass - Rust

Type Alias libdonet::dclass::FieldName2Field

source ·
pub type FieldName2Field = MultiMap<String, Arc<Mutex<DCField>>>;

Aliased Type§

struct FieldName2Field { /* private fields */ }
\ No newline at end of file +data-use_system_theme="false">

Type Alias libdonet::dclass::FieldName2Field

source ·
pub type FieldName2Field = MultiMap<String, Arc<Mutex<ClassField>>>;

Aliased Type§

struct FieldName2Field { /* private fields */ }
\ No newline at end of file diff --git a/docs/libdonet/dclexer/enum.DCToken.html b/docs/libdonet/dclexer/enum.DCToken.html index 47b3fd2..d891fd9 100644 --- a/docs/libdonet/dclexer/enum.DCToken.html +++ b/docs/libdonet/dclexer/enum.DCToken.html @@ -1,6 +1,6 @@ DCToken in libdonet::dclexer - Rust
pub enum DCToken {
+data-use_system_theme="false">
pub enum DCToken {
 
Show 61 variants Whitespace, Comment, Newline, @@ -62,9 +62,9 @@ Semicolon, Equals, Colon, -
}

Variants§

§

Whitespace

§

Comment

§

Newline

§

DecimalLiteral(i64)

§

OctalLiteral(String)

§

HexLiteral(String)

§

BinaryLiteral(String)

§

FloatLiteral(f64)

§

CharacterLiteral(char)

§

StringLiteral(String)

§

EscapeCharacter(String)

§

CharT

§

Int8T

§

Int16T

§

Int32T

§

Int64T

§

UInt8T

§

UInt16T

§

UInt32T

§

UInt64T

§

Float32T

§

Float64T

§

Int8ArrayT

§

Int16ArrayT

§

Int32ArrayT

§

UInt8ArrayT

§

UInt16ArrayT

§

UInt32ArrayT

§

UInt32UInt8ArrayT

§

StringT

§

BlobT

§

Blob32T

§

DClass

§

Struct

§

Keyword

§

Typedef

§

From

§

Import

§

Switch

§

Case

§

Default

§

Break

§

Identifier(String)

§

DCKeyword(String)

§

ViewSuffix(String)

§

Percent

§

Star

§

Plus

§

Hyphen

§

ForwardSlash

§

Period

§

OpenParenthesis

§

CloseParenthesis

§

OpenBraces

§

CloseBraces

§

OpenBrackets

§

CloseBrackets

§

Comma

§

Semicolon

§

Equals

§

Colon

Trait Implementations§

source§

impl Clone for DCToken

source§

fn clone(&self) -> DCToken

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DCToken

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq for DCToken

source§

fn eq(&self, other: &DCToken) -> bool

This method tests for self and other values to be equal, and is used +
}

Variants§

§

Whitespace

§

Comment

§

Newline

§

DecimalLiteral(i64)

§

OctalLiteral(String)

§

HexLiteral(String)

§

BinaryLiteral(String)

§

FloatLiteral(f64)

§

CharacterLiteral(char)

§

StringLiteral(String)

§

EscapeCharacter(String)

§

CharT

§

Int8T

§

Int16T

§

Int32T

§

Int64T

§

UInt8T

§

UInt16T

§

UInt32T

§

UInt64T

§

Float32T

§

Float64T

§

Int8ArrayT

§

Int16ArrayT

§

Int32ArrayT

§

UInt8ArrayT

§

UInt16ArrayT

§

UInt32ArrayT

§

UInt32UInt8ArrayT

§

StringT

§

BlobT

§

Blob32T

§

DClass

§

Struct

§

Keyword

§

Typedef

§

From

§

Import

§

Switch

§

Case

§

Default

§

Break

§

Identifier(String)

§

DCKeyword(String)

§

ViewSuffix(String)

§

Percent

§

Star

§

Plus

§

Hyphen

§

ForwardSlash

§

Period

§

OpenParenthesis

§

CloseParenthesis

§

OpenBraces

§

CloseBraces

§

OpenBrackets

§

CloseBrackets

§

Comma

§

Semicolon

§

Equals

§

Colon

Trait Implementations§

source§

impl Clone for DCToken

source§

fn clone(&self) -> DCToken

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DCToken

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq for DCToken

source§

fn eq(&self, other: &DCToken) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl StructuralPartialEq for DCToken

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere +sufficient, and should not be overridden without very good reason.

source§

impl StructuralPartialEq for DCToken

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/docs/libdonet/dclexer/index.html b/docs/libdonet/dclexer/index.html index b714058..0b6e064 100644 --- a/docs/libdonet/dclexer/index.html +++ b/docs/libdonet/dclexer/index.html @@ -1,3 +1,5 @@ -libdonet::dclexer - Rust
\ No newline at end of file +data-use_system_theme="false">

Module libdonet::dclexer

source ·
Expand description

Definition of the Lexer machine to process raw DC file +string data into a stream of lexical tokens for the DC parser.

+

Structs

Enums

\ No newline at end of file diff --git a/docs/libdonet/dclexer/struct.Lexer.html b/docs/libdonet/dclexer/struct.Lexer.html index da8ce49..f3f6b46 100644 --- a/docs/libdonet/dclexer/struct.Lexer.html +++ b/docs/libdonet/dclexer/struct.Lexer.html @@ -1,6 +1,6 @@ Lexer in libdonet::dclexer - Rust

Struct libdonet::dclexer::Lexer

source ·
pub struct Lexer<'a> { /* private fields */ }

Implementations§

source§

impl<'a> Lexer<'a>

source

pub fn new(s: &'a str) -> Lexer<'a>

Trait Implementations§

source§

impl<'a> Iterator for Lexer<'a>

§

type Item = (DCToken, Span)

The type of the elements being iterated over.
source§

fn next(&mut self) -> Option<(DCToken, Span)>

Advances the iterator and returns the next value. Read more
source§

fn next_chunk<const N: usize>( +data-use_system_theme="false">

Struct libdonet::dclexer::Lexer

source ·
pub struct Lexer<'a> { /* private fields */ }

Implementations§

source§

impl<'a> Lexer<'a>

source

pub fn new(s: &'a str) -> Lexer<'a>

Trait Implementations§

source§

impl<'a> Iterator for Lexer<'a>

§

type Item = (DCToken, Span)

The type of the elements being iterated over.
source§

fn next(&mut self) -> Option<(DCToken, Span)>

Advances the iterator and returns the next value. Read more
source§

fn next_chunk<const N: usize>( &mut self ) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where Self: Sized,

🔬This is a nightly-only experimental API. (iter_next_chunk)
Advances the iterator and returns an array containing the next N values. Read more
1.0.0 · source§

fn size_hint(&self) -> (usize, Option<usize>)

Returns the bounds on the remaining length of the iterator. Read more
1.0.0 · source§

fn count(self) -> usizewhere diff --git a/docs/libdonet/dclexer/struct.Span.html b/docs/libdonet/dclexer/struct.Span.html index 5ff178a..11d15f0 100644 --- a/docs/libdonet/dclexer/struct.Span.html +++ b/docs/libdonet/dclexer/struct.Span.html @@ -1,12 +1,12 @@ Span in libdonet::dclexer - Rust

Struct libdonet::dclexer::Span

source ·
pub struct Span {
+data-use_system_theme="false">

Struct libdonet::dclexer::Span

source ·
pub struct Span {
     pub min: usize,
     pub max: usize,
     pub line: usize,
-}

Fields§

§min: usize§max: usize§line: usize

Trait Implementations§

source§

impl Clone for Span

source§

fn clone(&self) -> Span

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Span

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq for Span

source§

fn eq(&self, other: &Span) -> bool

This method tests for self and other values to be equal, and is used +}

Fields§

§min: usize§max: usize§line: usize

Trait Implementations§

source§

impl Clone for Span

source§

fn clone(&self) -> Span

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Span

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq for Span

source§

fn eq(&self, other: &Span) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Copy for Span

source§

impl StructuralPartialEq for Span

Auto Trait Implementations§

§

impl RefUnwindSafe for Span

§

impl Send for Span

§

impl Sync for Span

§

impl Unpin for Span

§

impl UnwindSafe for Span

Blanket Implementations§

source§

impl<T> Any for Twhere +sufficient, and should not be overridden without very good reason.

source§

impl Copy for Span

source§

impl StructuralPartialEq for Span

Auto Trait Implementations§

§

impl RefUnwindSafe for Span

§

impl Send for Span

§

impl Sync for Span

§

impl Unpin for Span

§

impl UnwindSafe for Span

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/docs/libdonet/dcmolecular/index.html b/docs/libdonet/dcmolecular/index.html new file mode 100644 index 0000000..4826ae4 --- /dev/null +++ b/docs/libdonet/dcmolecular/index.html @@ -0,0 +1,5 @@ +libdonet::dcmolecular - Rust

Module libdonet::dcmolecular

source ·
Expand description

Data model for a DC Molecular field, which represents +a form of a field ‘alias’ for a collection of fields.

+

Structs

\ No newline at end of file diff --git a/docs/libdonet/dcmolecular/sidebar-items.js b/docs/libdonet/dcmolecular/sidebar-items.js new file mode 100644 index 0000000..17e3479 --- /dev/null +++ b/docs/libdonet/dcmolecular/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"struct":["DCMolecularField"]}; \ No newline at end of file diff --git a/docs/libdonet/dcmolecular/struct.DCMolecularField.html b/docs/libdonet/dcmolecular/struct.DCMolecularField.html new file mode 100644 index 0000000..c701d20 --- /dev/null +++ b/docs/libdonet/dcmolecular/struct.DCMolecularField.html @@ -0,0 +1,13 @@ +DCMolecularField in libdonet::dcmolecular - Rust
pub struct DCMolecularField { /* private fields */ }

Trait Implementations§

source§

impl Debug for DCMolecularField

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/docs/libdonet/dcnumeric/index.html b/docs/libdonet/dcnumeric/index.html index 13a62bf..92eaab6 100644 --- a/docs/libdonet/dcnumeric/index.html +++ b/docs/libdonet/dcnumeric/index.html @@ -1,3 +1,7 @@ -libdonet::dcnumeric - Rust
\ No newline at end of file +data-use_system_theme="false">

Module libdonet::dcnumeric

source ·
Expand description

Structure representing data types supported in the DC +language and enforcing numeric limits through constraints.

+

Structs

  • Numeric Range structs are used to represent a range of signed/unsigned +integers or floating point numbers. Used for enforcing numeric limits +within constraints of array, string, or blob sized types.

Traits

\ No newline at end of file diff --git a/docs/libdonet/dcnumeric/struct.DCNumericRange.html b/docs/libdonet/dcnumeric/struct.DCNumericRange.html index e5d56b2..7bb64ae 100644 --- a/docs/libdonet/dcnumeric/struct.DCNumericRange.html +++ b/docs/libdonet/dcnumeric/struct.DCNumericRange.html @@ -1,6 +1,13 @@ -DCNumericRange in libdonet::dcnumeric - Rust
pub struct DCNumericRange { /* private fields */ }

Trait Implementations§

source§

impl Clone for DCNumericRange

source§

fn clone(&self) -> DCNumericRange

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere +data-use_system_theme="false">
pub struct DCNumericRange {
+    pub min: DCNumber,
+    pub max: DCNumber,
+    /* private fields */
+}
Expand description

Numeric Range structs are used to represent a range of signed/unsigned +integers or floating point numbers. Used for enforcing numeric limits +within constraints of array, string, or blob sized types.

+

Fields§

§min: DCNumber§max: DCNumber

Implementations§

source§

impl DCNumericRange

source

pub fn new() -> Self

source

pub fn new_integer_range(min: i64, max: i64) -> Self

source

pub fn new_unsigned_integer_range(min: u64, max: u64) -> Self

source

pub fn new_floating_point_range(min: f64, max: f64) -> Self

source

pub fn contains(&self, num: DCNumber) -> bool

source

pub fn is_empty(&self) -> bool

Trait Implementations§

source§

impl Clone for DCNumericRange

source§

fn clone(&self) -> DCNumericRange

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/docs/libdonet/dcnumeric/struct.DCNumericType.html b/docs/libdonet/dcnumeric/struct.DCNumericType.html index 09f796a..50be311 100644 --- a/docs/libdonet/dcnumeric/struct.DCNumericType.html +++ b/docs/libdonet/dcnumeric/struct.DCNumericType.html @@ -1,6 +1,6 @@ DCNumericType in libdonet::dcnumeric - Rust
pub struct DCNumericType { /* private fields */ }

Trait Implementations§

source§

impl DCNumericTypeInterface for DCNumericType

source§

fn new(base_type: DCTypeEnum) -> DCNumericType

source§

fn generate_hash(&self, hashgen: &mut DCHashGenerator)

source§

fn has_modulus(&self) -> bool

source§

fn has_range(&self) -> bool

source§

fn get_divisor(&self) -> u16

source§

fn get_modulus(&self) -> f64

source§

fn get_range(&self) -> DCNumericRange

source§

fn set_divisor(&mut self, divisor: u16) -> Result<(), ()>

source§

fn set_modulus(&mut self, modulus: f64) -> Result<(), ()>

source§

fn set_range(&mut self, range: DCNumericRange) -> Result<(), ()>

source§

fn within_range(&self, data: Vec<u8>, length: u64) -> Result<(), ()>

source§

impl Deref for DCNumericType

§

type Target = DCTypeDefinition

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere +data-use_system_theme="false">
pub struct DCNumericType { /* private fields */ }

Trait Implementations§

source§

impl DCNumericTypeInterface for DCNumericType

source§

fn new(base_type: DCTypeEnum) -> Self

source§

fn generate_hash(&self, hashgen: &mut DCHashGenerator)

source§

fn has_modulus(&self) -> bool

source§

fn has_range(&self) -> bool

source§

fn get_divisor(&self) -> u16

source§

fn get_modulus(&self) -> f64

source§

fn get_range(&self) -> DCNumericRange

source§

fn set_divisor(&mut self, divisor: u16) -> Result<(), ()>

source§

fn set_modulus(&mut self, modulus: f64) -> Result<(), ()>

source§

fn set_range(&mut self, range: DCNumericRange) -> Result<(), ()>

source§

fn within_range(&self, data: Vec<u8>, length: u64) -> Result<(), ()>

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/docs/libdonet/dcnumeric/trait.DCNumericTypeInterface.html b/docs/libdonet/dcnumeric/trait.DCNumericTypeInterface.html index 1d5371c..cc54cd4 100644 --- a/docs/libdonet/dcnumeric/trait.DCNumericTypeInterface.html +++ b/docs/libdonet/dcnumeric/trait.DCNumericTypeInterface.html @@ -1,8 +1,8 @@ DCNumericTypeInterface in libdonet::dcnumeric - Rust
pub trait DCNumericTypeInterface {
+data-use_system_theme="false">
pub trait DCNumericTypeInterface {
     // Required methods
-    fn new(base_type: DCTypeEnum) -> DCNumericType;
+    fn new(base_type: DCTypeEnum) -> Self;
     fn generate_hash(&self, hashgen: &mut DCHashGenerator);
     fn has_modulus(&self) -> bool;
     fn has_range(&self) -> bool;
@@ -13,4 +13,4 @@
     fn set_modulus(&mut self, modulus: f64) -> Result<(), ()>;
     fn set_range(&mut self, range: DCNumericRange) -> Result<(), ()>;
     fn within_range(&self, data: Vec<u8>, length: u64) -> Result<(), ()>;
-}

Required Methods§

source

fn new(base_type: DCTypeEnum) -> DCNumericType

source

fn generate_hash(&self, hashgen: &mut DCHashGenerator)

source

fn has_modulus(&self) -> bool

source

fn has_range(&self) -> bool

source

fn get_divisor(&self) -> u16

source

fn get_modulus(&self) -> f64

source

fn get_range(&self) -> DCNumericRange

source

fn set_divisor(&mut self, divisor: u16) -> Result<(), ()>

source

fn set_modulus(&mut self, modulus: f64) -> Result<(), ()>

source

fn set_range(&mut self, range: DCNumericRange) -> Result<(), ()>

source

fn within_range(&self, data: Vec<u8>, length: u64) -> Result<(), ()>

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file +}

Required Methods§

source

fn new(base_type: DCTypeEnum) -> Self

source

fn generate_hash(&self, hashgen: &mut DCHashGenerator)

source

fn has_modulus(&self) -> bool

source

fn has_range(&self) -> bool

source

fn get_divisor(&self) -> u16

source

fn get_modulus(&self) -> f64

source

fn get_range(&self) -> DCNumericRange

source

fn set_divisor(&mut self, divisor: u16) -> Result<(), ()>

source

fn set_modulus(&mut self, modulus: f64) -> Result<(), ()>

source

fn set_range(&mut self, range: DCNumericRange) -> Result<(), ()>

source

fn within_range(&self, data: Vec<u8>, length: u64) -> Result<(), ()>

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/docs/libdonet/dcparameter/index.html b/docs/libdonet/dcparameter/index.html new file mode 100644 index 0000000..553a913 --- /dev/null +++ b/docs/libdonet/dcparameter/index.html @@ -0,0 +1,5 @@ +libdonet::dcparameter - Rust

Module libdonet::dcparameter

source ·
Expand description

Data model that represents a single parameter of an atomic +field, which together form a RPC method signature.

+

Structs

\ No newline at end of file diff --git a/docs/libdonet/dcparameter/sidebar-items.js b/docs/libdonet/dcparameter/sidebar-items.js new file mode 100644 index 0000000..eecb352 --- /dev/null +++ b/docs/libdonet/dcparameter/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"struct":["DCParameter"]}; \ No newline at end of file diff --git a/docs/libdonet/dcparameter/struct.DCParameter.html b/docs/libdonet/dcparameter/struct.DCParameter.html new file mode 100644 index 0000000..55d3368 --- /dev/null +++ b/docs/libdonet/dcparameter/struct.DCParameter.html @@ -0,0 +1,13 @@ +DCParameter in libdonet::dcparameter - Rust
pub struct DCParameter {}

Trait Implementations§

source§

impl Debug for DCParameter

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/docs/libdonet/dcparser/fn.parse.html b/docs/libdonet/dcparser/fn.parse.html index 3a70183..be75bbb 100644 --- a/docs/libdonet/dcparser/fn.parse.html +++ b/docs/libdonet/dcparser/fn.parse.html @@ -1,5 +1,5 @@ parse in libdonet::dcparser - Rust

Function libdonet::dcparser::parse

source ·
pub fn parse<I: Iterator<Item = (DCToken, Span)>>(
+data-use_system_theme="false">

Function libdonet::dcparser::parse

source ·
pub fn parse<I: Iterator<Item = (DCToken, Span)>>(
     i: I
 ) -> Result<DCFile, (Option<(DCToken, Span)>, &'static str)>
\ No newline at end of file diff --git a/docs/libdonet/dcparser/index.html b/docs/libdonet/dcparser/index.html index f456091..03e9638 100644 --- a/docs/libdonet/dcparser/index.html +++ b/docs/libdonet/dcparser/index.html @@ -1,3 +1,5 @@ -libdonet::dcparser - Rust
\ No newline at end of file +data-use_system_theme="false">

Module libdonet::dcparser

source ·
Expand description

Definition of the DC language context free grammar for the +LALR(1) parser processing the stream of lexical tokens.

+

Functions

\ No newline at end of file diff --git a/docs/libdonet/dcstruct/index.html b/docs/libdonet/dcstruct/index.html index 6a2f936..ba4d70e 100644 --- a/docs/libdonet/dcstruct/index.html +++ b/docs/libdonet/dcstruct/index.html @@ -1,3 +1,4 @@ -libdonet::dcstruct - Rust
\ No newline at end of file +data-use_system_theme="false">

Module libdonet::dcstruct

source ·
Expand description

Data model representing a DC Struct element.

+

Structs

\ No newline at end of file diff --git a/docs/libdonet/dcstruct/struct.DCStruct.html b/docs/libdonet/dcstruct/struct.DCStruct.html index 697e857..f5570d0 100644 --- a/docs/libdonet/dcstruct/struct.DCStruct.html +++ b/docs/libdonet/dcstruct/struct.DCStruct.html @@ -1,8 +1,8 @@ DCStruct in libdonet::dcstruct - Rust

Struct libdonet::dcstruct::DCStruct

source ·
pub struct DCStruct {}

Implementations§

Trait Implementations§

source§

impl Debug for DCStruct

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq for DCStruct

source§

fn eq(&self, other: &DCStruct) -> bool

This method tests for self and other values to be equal, and is used +data-use_system_theme="false">

Struct libdonet::dcstruct::DCStruct

source ·
pub struct DCStruct {}

Implementations§

source§

impl DCStruct

source

pub fn new() -> Self

Trait Implementations§

source§

impl Debug for DCStruct

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for DCStruct

source§

fn default() -> DCStruct

Returns the “default value” for a type. Read more
source§

impl PartialEq for DCStruct

source§

fn eq(&self, other: &DCStruct) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl StructuralPartialEq for DCStruct

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere +sufficient, and should not be overridden without very good reason.

source§

impl StructuralPartialEq for DCStruct

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/docs/libdonet/dctype/enum.DCNumberType.html b/docs/libdonet/dctype/enum.DCNumberType.html index b0ba84c..22e912a 100644 --- a/docs/libdonet/dctype/enum.DCNumberType.html +++ b/docs/libdonet/dctype/enum.DCNumberType.html @@ -1,15 +1,17 @@ DCNumberType in libdonet::dctype - Rust
pub enum DCNumberType {
+data-use_system_theme="false">
pub enum DCNumberType {
     None = 0,
     Int = 1,
     UInt = 2,
     Float = 3,
-}

Variants§

§

None = 0

§

Int = 1

§

UInt = 2

§

Float = 3

Implementations§

source§

impl DCNumberType

source

pub const fn is_none(&self) -> bool

Returns true if the enum is DCNumberType::None otherwise false

-
source

pub const fn is_int(&self) -> bool

Returns true if the enum is DCNumberType::Int otherwise false

-
source

pub const fn is_u_int(&self) -> bool

Returns true if the enum is DCNumberType::UInt otherwise false

-
source

pub const fn is_float(&self) -> bool

Returns true if the enum is DCNumberType::Float otherwise false

-

Trait Implementations§

source§

impl Clone for DCNumberType

source§

fn clone(&self) -> DCNumberType

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere +}

Variants§

§

None = 0

§

Int = 1

§

UInt = 2

§

Float = 3

Implementations§

source§

impl DCNumberType

source

pub const fn is_none(&self) -> bool

Returns true if the enum is DCNumberType::None otherwise false

+
source

pub const fn is_int(&self) -> bool

Returns true if the enum is DCNumberType::Int otherwise false

+
source

pub const fn is_u_int(&self) -> bool

Returns true if the enum is DCNumberType::UInt otherwise false

+
source

pub const fn is_float(&self) -> bool

Returns true if the enum is DCNumberType::Float otherwise false

+

Trait Implementations§

source§

impl Clone for DCNumberType

source§

fn clone(&self) -> DCNumberType

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl PartialEq for DCNumberType

source§

fn eq(&self, other: &DCNumberType) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl StructuralPartialEq for DCNumberType

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/docs/libdonet/dctype/enum.DCTypeEnum.html b/docs/libdonet/dctype/enum.DCTypeEnum.html index 5b1052b..7ba8b5a 100644 --- a/docs/libdonet/dctype/enum.DCTypeEnum.html +++ b/docs/libdonet/dctype/enum.DCTypeEnum.html @@ -1,6 +1,6 @@ DCTypeEnum in libdonet::dctype - Rust
#[repr(u8)]
pub enum DCTypeEnum { +data-use_system_theme="false">
#[repr(u8)]
pub enum DCTypeEnum {
Show 22 variants TInt8 = 0, TInt16 = 1, TInt32 = 2, @@ -23,7 +23,9 @@ TStruct = 17, TMethod = 18, TInvalid = 21, -
}

Variants§

§

TInt8 = 0

§

TInt16 = 1

§

TInt32 = 2

§

TInt64 = 3

§

TUInt8 = 4

§

TChar = 8

§

TUInt16 = 5

§

TUInt32 = 6

§

TUInt64 = 7

§

TFloat32 = 9

§

TFloat64 = 10

§

TString = 11

§

TVarString = 12

§

TBlob = 13

§

TVarBlob = 14

§

TBlob32 = 19

§

TVarBlob32 = 20

§

TArray = 15

§

TVarArray = 16

§

TStruct = 17

§

TMethod = 18

§

TInvalid = 21

Trait Implementations§

source§

impl Clone for DCTypeEnum

source§

fn clone(&self) -> DCTypeEnum

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere +

}

Variants§

§

TInt8 = 0

§

TInt16 = 1

§

TInt32 = 2

§

TInt64 = 3

§

TUInt8 = 4

§

TChar = 8

§

TUInt16 = 5

§

TUInt32 = 6

§

TUInt64 = 7

§

TFloat32 = 9

§

TFloat64 = 10

§

TString = 11

§

TVarString = 12

§

TBlob = 13

§

TVarBlob = 14

§

TBlob32 = 19

§

TVarBlob32 = 20

§

TArray = 15

§

TVarArray = 16

§

TStruct = 17

§

TMethod = 18

§

TInvalid = 21

Trait Implementations§

source§

impl Clone for DCTypeEnum

source§

fn clone(&self) -> DCTypeEnum

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DCTypeEnum

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq for DCTypeEnum

source§

fn eq(&self, other: &DCTypeEnum) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl StructuralPartialEq for DCTypeEnum

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/docs/libdonet/dctype/index.html b/docs/libdonet/dctype/index.html index b2e042b..86da2d8 100644 --- a/docs/libdonet/dctype/index.html +++ b/docs/libdonet/dctype/index.html @@ -1,3 +1,5 @@ -libdonet::dctype - Rust
\ No newline at end of file +data-use_system_theme="false">

Module libdonet::dctype

source ·
Expand description

Represents all data types supported by the DC language +and developer-defined type alias definitions.

+

Structs

Enums

Traits

Unions

\ No newline at end of file diff --git a/docs/libdonet/dctype/struct.DCNumber.html b/docs/libdonet/dctype/struct.DCNumber.html index e9b6cfe..5b2b0d3 100644 --- a/docs/libdonet/dctype/struct.DCNumber.html +++ b/docs/libdonet/dctype/struct.DCNumber.html @@ -1,9 +1,11 @@ DCNumber in libdonet::dctype - Rust

Struct libdonet::dctype::DCNumber

source ·
pub struct DCNumber {
+data-use_system_theme="false">

Struct libdonet::dctype::DCNumber

source ·
pub struct DCNumber {
     pub number_type: DCNumberType,
     pub value: DCNumberValueUnion,
-}

Fields§

§number_type: DCNumberType§value: DCNumberValueUnion

Implementations§

source§

impl DCNumber

source

pub fn new() -> Self

source

pub fn new_integer(num: i64) -> Self

source

pub fn new_unsigned_integer(num: u64) -> Self

source

pub fn new_floating_point(num: f64) -> Self

Trait Implementations§

source§

impl Clone for DCNumber

source§

fn clone(&self) -> DCNumber

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere +}

Fields§

§number_type: DCNumberType§value: DCNumberValueUnion

Implementations§

source§

impl DCNumber

source

pub fn new() -> Self

source

pub fn new_integer(num: i64) -> Self

source

pub fn new_unsigned_integer(num: u64) -> Self

source

pub fn new_floating_point(num: f64) -> Self

Trait Implementations§

source§

impl Clone for DCNumber

source§

fn clone(&self) -> DCNumber

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Default for DCNumber

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl PartialEq for DCNumber

source§

fn eq(&self, rhs: &Self) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/docs/libdonet/dctype/struct.DCTypeDefinition.html b/docs/libdonet/dctype/struct.DCTypeDefinition.html index 86a98ec..1ab14a4 100644 --- a/docs/libdonet/dctype/struct.DCTypeDefinition.html +++ b/docs/libdonet/dctype/struct.DCTypeDefinition.html @@ -1,10 +1,11 @@ DCTypeDefinition in libdonet::dctype - Rust
pub struct DCTypeDefinition {
+data-use_system_theme="false">
pub struct DCTypeDefinition {
     pub data_type: DCTypeEnum,
     pub size: DgSizeTag,
     /* private fields */
-}

Fields§

§data_type: DCTypeEnum§size: DgSizeTag

Trait Implementations§

source§

impl Clone for DCTypeDefinition

source§

fn clone(&self) -> DCTypeDefinition

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl DCTypeDefinitionInterface for DCTypeDefinition

source§

fn new() -> DCTypeDefinition

source§

fn generate_hash(&self, hashgen: &mut DCHashGenerator)

source§

fn get_dc_type(&self) -> DCTypeEnum

source§

fn is_variable_length(&self) -> bool

source§

fn get_size(&self) -> DgSizeTag

source§

fn has_alias(&self) -> bool

source§

fn get_alias(&self) -> Result<String, ()>

source§

fn set_alias(&mut self, alias: String)

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere +}

Fields§

§data_type: DCTypeEnum§size: DgSizeTag

Trait Implementations§

source§

impl Clone for DCTypeDefinition

source§

fn clone(&self) -> DCTypeDefinition

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl DCTypeDefinitionInterface for DCTypeDefinition

source§

fn generate_hash(&self, hashgen: &mut DCHashGenerator)

Generates the hash for this DC Type element.

+
source§

fn new() -> Self

source§

fn get_dc_type(&self) -> DCTypeEnum

source§

fn is_variable_length(&self) -> bool

source§

fn get_size(&self) -> DgSizeTag

source§

fn has_alias(&self) -> bool

source§

fn get_alias(&self) -> Result<String, ()>

source§

fn set_alias(&mut self, alias: String)

source§

impl Debug for DCTypeDefinition

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/docs/libdonet/dctype/trait.DCTypeDefinitionInterface.html b/docs/libdonet/dctype/trait.DCTypeDefinitionInterface.html index c6b08d2..3928921 100644 --- a/docs/libdonet/dctype/trait.DCTypeDefinitionInterface.html +++ b/docs/libdonet/dctype/trait.DCTypeDefinitionInterface.html @@ -1,8 +1,8 @@ DCTypeDefinitionInterface in libdonet::dctype - Rust
pub trait DCTypeDefinitionInterface {
+data-use_system_theme="false">
pub trait DCTypeDefinitionInterface {
     // Required methods
-    fn new() -> DCTypeDefinition;
+    fn new() -> Self;
     fn generate_hash(&self, hashgen: &mut DCHashGenerator);
     fn get_dc_type(&self) -> DCTypeEnum;
     fn is_variable_length(&self) -> bool;
@@ -10,4 +10,4 @@
     fn has_alias(&self) -> bool;
     fn get_alias(&self) -> Result<String, ()>;
     fn set_alias(&mut self, alias: String);
-}

Required Methods§

source

fn new() -> DCTypeDefinition

source

fn generate_hash(&self, hashgen: &mut DCHashGenerator)

source

fn get_dc_type(&self) -> DCTypeEnum

source

fn is_variable_length(&self) -> bool

source

fn get_size(&self) -> DgSizeTag

source

fn has_alias(&self) -> bool

source

fn get_alias(&self) -> Result<String, ()>

source

fn set_alias(&mut self, alias: String)

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file +}

Required Methods§

source

fn new() -> Self

source

fn generate_hash(&self, hashgen: &mut DCHashGenerator)

source

fn get_dc_type(&self) -> DCTypeEnum

source

fn is_variable_length(&self) -> bool

source

fn get_size(&self) -> DgSizeTag

source

fn has_alias(&self) -> bool

source

fn get_alias(&self) -> Result<String, ()>

source

fn set_alias(&mut self, alias: String)

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/docs/libdonet/dctype/union.DCNumberValueUnion.html b/docs/libdonet/dctype/union.DCNumberValueUnion.html index 3c84fd2..8966de3 100644 --- a/docs/libdonet/dctype/union.DCNumberValueUnion.html +++ b/docs/libdonet/dctype/union.DCNumberValueUnion.html @@ -1,11 +1,11 @@ DCNumberValueUnion in libdonet::dctype - Rust
#[repr(C)]
+data-use_system_theme="false">
#[repr(C)]
 pub union DCNumberValueUnion {
     pub integer: i64,
     pub unsigned_integer: u64,
     pub floating_point: f64,
-}

Fields§

§integer: i64§unsigned_integer: u64§floating_point: f64

Trait Implementations§

source§

impl Clone for DCNumberValueUnion

source§

fn clone(&self) -> DCNumberValueUnion

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Copy for DCNumberValueUnion

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere +}

Fields§

§integer: i64§unsigned_integer: u64§floating_point: f64

Trait Implementations§

source§

impl Clone for DCNumberValueUnion

source§

fn clone(&self) -> DCNumberValueUnion

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Copy for DCNumberValueUnion

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/docs/libdonet/fn.read_dc_files.html b/docs/libdonet/fn.read_dc_files.html index 4cae672..427638d 100644 --- a/docs/libdonet/fn.read_dc_files.html +++ b/docs/libdonet/fn.read_dc_files.html @@ -1,6 +1,6 @@ read_dc_files in libdonet - Rust

Function libdonet::read_dc_files

source ·
pub fn read_dc_files(file_paths: Vec<String>) -> DCReadResult
Expand description

Easy to use interface for the DC file parser. Handles reading +data-use_system_theme="false">

Function libdonet::read_dc_files

source ·
pub fn read_dc_files(file_paths: Vec<String>) -> DCReadResult
Expand description

Easy to use interface for the DC file parser. Handles reading the DC files, instantiating the lexer and parser, and either returns the DCFile object or a Parse/File error.

Example Usage

diff --git a/docs/libdonet/index.html b/docs/libdonet/index.html index ae1f0c5..a5e4347 100644 --- a/docs/libdonet/index.html +++ b/docs/libdonet/index.html @@ -1,7 +1,7 @@ libdonet - Rust

Crate libdonet

source ·
Expand description

DONET SOFTWARE

+
  • All Items
  • Crate libdonet

    source ·
    Expand description

    DONET SOFTWARE

    Copyright (c) 2024, Donet Authors.

    This program is free software; you can redistribute it and/or modify it under the terms of the GNU Affero General Public License version 3. @@ -34,7 +34,20 @@

    Getting Started

  • dcfile: Includes the DC file lexer, parser, and DC element structures.
  • Modules

    • Utils for swapping little-endian bytes to the compiling -processor’s native endianness (byte order).
    • Includes definitions of type aliases for Donet concepts, +processor’s native endianness (byte order).
    • Provides structures to write network datagrams and tools +for iterating over datagram data.
    • Data model of the DC Array element, which is a parameter +type that stores a list of values of the same data type.
    • Data model for a DC Atomic Field, which represents a remote +procedure call method of a Distributed Class.
    • Base data model for DC Field elements. Alone, it represents +an attribute of a structure or Distributed Class.
    • Root structure that stores the collection of DC elements +in memory. Provides functions for manipulating the tree.
    • Representation of arbitrary and historical +keywords as defined in the DC file.
    • Data model for Distributed Class definitions in the DC file. +Stores DC Fields and tracks class hierarchy.
    • Definition of the Lexer machine to process raw DC file +string data into a stream of lexical tokens for the DC parser.
    • Data model for a DC Molecular field, which represents +a form of a field ‘alias’ for a collection of fields.
    • Structure representing data types supported in the DC +language and enforcing numeric limits through constraints.
    • Data model that represents a single parameter of an atomic +field, which together form a RPC method signature.
    • Definition of the DC language context free grammar for the +LALR(1) parser processing the stream of lexical tokens.
    • Data model representing a DC Struct element.
    • Represents all data types supported by the DC language +and developer-defined type alias definitions.
    • Includes definitions of type aliases for Donet concepts, and the full definition of the network protocol message types.

    Functions

    • Easy to use interface for the DC file parser. Handles reading the DC files, instantiating the lexer and parser, and either returns the DCFile object or a Parse/File error.
    \ No newline at end of file diff --git a/docs/libdonet/sidebar-items.js b/docs/libdonet/sidebar-items.js index 5bfdddc..4288a60 100644 --- a/docs/libdonet/sidebar-items.js +++ b/docs/libdonet/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"fn":["read_dc_files"],"mod":["byte_order","datagram","dcarray","dcfield","dcfile","dckeyword","dclass","dclexer","dcnumeric","dcparser","dcstruct","dctype","globals"]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"fn":["read_dc_files"],"mod":["byte_order","datagram","dcarray","dcatomic","dcfield","dcfile","dckeyword","dclass","dclexer","dcmolecular","dcnumeric","dcparameter","dcparser","dcstruct","dctype","globals"]}; \ No newline at end of file diff --git a/docs/search-index.js b/docs/search-index.js index ab61535..98bfcf4 100644 --- a/docs/search-index.js +++ b/docs/search-index.js @@ -1,5 +1,5 @@ var searchIndex = JSON.parse('{\ -"libdonet":{"doc":"DONET SOFTWARE","t":"AAAAAAAAAAAAAFFFFDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDILLLKLKLKLKLKLLKLLLLDILLLLKLLKLKLKLKLKLLLLDIDKLKLKLKLKLKLLLLLLLLLLLKLKLKLKLKLKLKLKLKLKLKLKLKLKLKLLLLLMMLLLLLLLDIGLLKLLLKLKLLKLLLLDIGGLLLLKLKLKLKLKLKLKLLKLKLKLLLLNNNNNNNNNNNNNNENNNNNNNNNNNNNNNNNNNNNNDNNNNNNNNNDNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLMMMLLLLLLLLLLLLLDDILLLLLLLLLKLKLKLKLKLKLLLKLKLKLKLLLLLLLLKLFDLLLLLLLLLLDETDIENNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLMMLLLLLKLKLKLKLKLMLLLLLLLLLKLKLLLLLMKLMLLLLLLLLLLLLLLLLLLLLMMRRRNNNNNNNNNNNNNNNNNNNRRGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGEGHHHHGRRNNGEGGGNNNGNHRRHNNNNNNGNNNGNEDNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNRRGLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLL","n":["byte_order","datagram","dcarray","dcfield","dcfile","dckeyword","dclass","dclexer","dcnumeric","dcparser","dcstruct","dctype","globals","read_dc_files","swap_le_16","swap_le_32","swap_le_64","Datagram","DatagramIterator","add_blob","add_bool","add_buffer","add_channel","add_control_header","add_data","add_datagram","add_doid","add_f32","add_f64","add_i16","add_i32","add_i64","add_i8","add_location","add_server_header","add_size","add_string","add_u16","add_u32","add_u64","add_u8","add_zone","borrow","borrow","borrow_mut","borrow_mut","check_read_length","default","from","from","get_data","get_remaining","into","into","new","new","read_bool","read_channel","read_data","read_doid","read_f32","read_f64","read_i16","read_i32","read_i64","read_i8","read_msg_type","read_recipient_count","read_size","read_u16","read_u32","read_u64","read_u8","read_zone","seek","size","skip","tell","try_from","try_from","try_into","try_into","type_id","type_id","DCArrayType","DCArrayTypeInterface","borrow","borrow_mut","from","generate_hash","generate_hash","get_array_size","get_array_size","get_element_type","get_element_type","get_range","get_range","has_range","has_range","into","new","new","try_from","try_into","type_id","DCField","DCFieldInterface","borrow","borrow_mut","fmt","from","generate_hash","generate_hash","into","new","new","set_field_id","set_field_id","set_field_name","set_field_name","set_parent_dclass","set_parent_dclass","set_parent_struct","set_parent_struct","try_from","try_into","type_id","DCFile","DCFileInterface","DCImport","add_dclass","add_dclass","add_field","add_field","add_keyword","add_keyword","add_python_import","add_python_import","add_struct","add_struct","add_typedef","add_typedef","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","fmt","fmt","from","from","generate_hash","generate_hash","get_dclass","get_dclass","get_dclass_by_id","get_dclass_by_id","get_dclass_by_name","get_dclass_by_name","get_hash","get_hash","get_keyword","get_keyword","get_next_dclass_id","get_next_dclass_id","get_num_dclasses","get_num_dclasses","get_num_imports","get_num_imports","get_num_keywords","get_num_keywords","get_num_structs","get_num_structs","get_pretty_hash","get_pretty_hash","get_python_import","get_python_import","get_struct","get_struct","has_keyword","has_keyword","into","into","new","new","python_module","symbols","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","DCKeyword","DCKeywordInterface","HistoricalFlag","borrow","borrow_mut","clear_historical_flag","clear_historical_flag","fmt","from","get_historical_flag","get_historical_flag","get_name","get_name","into","new","new","try_from","try_into","type_id","DClass","DClassInterface","FieldId2Field","FieldName2Field","borrow","borrow_mut","fmt","from","generate_hash","generate_hash","get_class_id","get_class_id","get_constructor","get_constructor","get_name","get_name","get_num_parents","get_num_parents","get_parent","get_parent","has_constructor","has_constructor","into","new","new","set_class_id","set_class_id","set_parent","set_parent","try_from","try_into","type_id","BinaryLiteral","Blob32T","BlobT","Break","Case","CharT","CharacterLiteral","CloseBraces","CloseBrackets","CloseParenthesis","Colon","Comma","Comment","DCKeyword","DCToken","DClass","DecimalLiteral","Default","Equals","EscapeCharacter","Float32T","Float64T","FloatLiteral","ForwardSlash","From","HexLiteral","Hyphen","Identifier","Import","Int16ArrayT","Int16T","Int32ArrayT","Int32T","Int64T","Int8ArrayT","Int8T","Keyword","Lexer","Newline","OctalLiteral","OpenBraces","OpenBrackets","OpenParenthesis","Percent","Period","Plus","Semicolon","Span","Star","StringLiteral","StringT","Struct","Switch","Typedef","UInt16ArrayT","UInt16T","UInt32ArrayT","UInt32T","UInt32UInt8ArrayT","UInt64T","UInt8ArrayT","UInt8T","ViewSuffix","Whitespace","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","eq","eq","fmt","fmt","from","from","from","into","into","into","into_iter","line","max","min","new","next","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","DCNumericRange","DCNumericType","DCNumericTypeInterface","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","deref","from","from","generate_hash","generate_hash","get_divisor","get_divisor","get_modulus","get_modulus","get_range","get_range","has_modulus","has_modulus","has_range","has_range","into","into","new","new","set_divisor","set_divisor","set_modulus","set_modulus","set_range","set_range","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","within_range","within_range","parse","DCStruct","borrow","borrow_mut","eq","fmt","from","into","new","try_from","try_into","type_id","DCNumber","DCNumberType","DCNumberValueUnion","DCTypeDefinition","DCTypeDefinitionInterface","DCTypeEnum","Float","Int","None","TArray","TBlob","TBlob32","TChar","TFloat32","TFloat64","TInt16","TInt32","TInt64","TInt8","TInvalid","TMethod","TString","TStruct","TUInt16","TUInt32","TUInt64","TUInt8","TVarArray","TVarBlob","TVarBlob32","TVarString","UInt","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","data_type","floating_point","from","from","from","from","from","generate_hash","generate_hash","get_alias","get_alias","get_dc_type","get_dc_type","get_size","get_size","has_alias","has_alias","integer","into","into","into","into","into","is_float","is_int","is_none","is_u_int","is_variable_length","is_variable_length","new","new","new","new_floating_point","new_integer","new_unsigned_integer","number_type","set_alias","set_alias","size","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","unsigned_integer","value","BCHAN_CLIENTS","BCHAN_DBSERVERS","BCHAN_STATESERVERS","CAAddInterest","CAAddInterestMultiple","CAAddPostRemove","CAAddSessionObject","CAClearPostRemoves","CACloseChannel","CADeclareObject","CADrop","CAEject","CAGetNetworkAddress","CAGetNetworkAddressResp","CAOpenChannel","CARemoveInterest","CARemoveSessionObject","CASendDatagram","CASetClientID","CASetFieldsSendable","CASetState","CAUndeclareObject","CHANNEL_MAX","CONTROL_CHANNEL","Channel","ClientAddInterest","ClientAddInterestMultiple","ClientDisconnect","ClientDoneInterestResp","ClientEject","ClientEnterObjectRequired","ClientEnterObjectRequiredOther","ClientEnterObjectRequiredOwner","ClientEnterObjectRequiredOwnerOther","ClientHeartbeat","ClientHello","ClientHelloResp","ClientObjectLeaving","ClientObjectLeavingOwner","ClientObjectLocation","ClientObjectSetField","ClientObjectSetFields","ClientRemoveInterest","DBCreateObject","DBCreateObjectResp","DBObjectDelete","DBObjectDeleteField","DBObjectDeleteFields","DBObjectGetAll","DBObjectGetAllResp","DBObjectGetField","DBObjectGetFieldResp","DBObjectGetFields","DBObjectGetFieldsResp","DBObjectSetField","DBObjectSetFieldIfEmpty","DBObjectSetFieldIfEmptyResp","DBObjectSetFieldIfEquals","DBObjectSetFieldIfEqualsResp","DBObjectSetFields","DBObjectSetFieldsIfEquals","DBObjectSetFieldsIfEqualsResp","DBSSObjectActivateWithDefaults","DBSSObjectActivateWithDefaultsOther","DBSSObjectDeleteDisk","DBSSObjectDeleteFieldDisk","DBSSObjectDeleteFieldsDisk","DBSSObjectGetActivated","DBSSObjectGetActivatedResp","DCFileHash","DCReadError","DCReadResult","DC_MULTIPLE_INHERITANCE","DC_SORT_INHERITANCE_BY_FILE","DC_VIEW_SUFFIXES","DC_VIRTUAL_INHERITANCE","DClassId","DG_SIZE_MAX","DOID_MAX","DatagramIteratorEOF","DatagramOverflow","DgBufferResult","DgError","DgResult","DgSizeTag","DoId","Err","Err","Err","FieldId","FileError","HISTORICAL_DC_KEYWORDS","INVALID_CHANNEL","INVALID_DOID","MAX_PRIME_NUMBERS","MDAddChannel","MDAddPostRemove","MDAddRange","MDClearPostRemoves","MDRemoveChannel","MDRemoveRange","MsgType","Ok","Ok","Ok","ParseError","ParseError","Protocol","ProtocolIter","SSCreateObjectWithRequired","SSCreateObjectWithRequiredOther","SSDeleteAIObjects","SSObjectChangingAI","SSObjectChangingLocation","SSObjectChangingOwner","SSObjectDeleteChildren","SSObjectDeleteFieldRAM","SSObjectDeleteFieldsRAM","SSObjectDeleteRAM","SSObjectDeleteZone","SSObjectDeleteZones","SSObjectEnterAIWithRequired","SSObjectEnterAIWithRequiredOther","SSObjectEnterLocationWithRequired","SSObjectEnterLocationWithRequiredOther","SSObjectEnterOwnerWithRequired","SSObjectEnterOwnerWithRequiredOther","SSObjectGetAI","SSObjectGetAIResp","SSObjectGetAll","SSObjectGetAllResp","SSObjectGetChildCount","SSObjectGetChildCountResp","SSObjectGetChildren","SSObjectGetField","SSObjectGetFieldResp","SSObjectGetFields","SSObjectGetFieldsResp","SSObjectGetLocation","SSObjectGetLocationResp","SSObjectGetOwner","SSObjectGetOwnerResp","SSObjectGetZoneCount","SSObjectGetZoneCountResp","SSObjectGetZoneObjects","SSObjectGetZonesCount","SSObjectGetZonesCountResp","SSObjectGetZonesObjects","SSObjectSetAI","SSObjectSetField","SSObjectSetFields","SSObjectSetLocation","SSObjectSetOwner","ZONE_BITS","ZONE_MAX","Zone","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","eq","eq","fmt","fmt","fmt","fmt","from","from","from","from","into","into","into","into","into_iter","iter","len","msg_type","next","next_back","nth","size_hint","to_owned","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id"],"q":[[0,"libdonet"],[14,"libdonet::byte_order"],[17,"libdonet::datagram"],[84,"libdonet::dcarray"],[105,"libdonet::dcfield"],[127,"libdonet::dcfile"],[195,"libdonet::dckeyword"],[214,"libdonet::dclass"],[246,"libdonet::dclexer"],[347,"libdonet::dcnumeric"],[390,"libdonet::dcparser"],[391,"libdonet::dcstruct"],[402,"libdonet::dctype"],[515,"libdonet::globals"],[719,"alloc::string"],[720,"alloc::vec"],[721,"core::result"],[722,"core::any"],[723,"core::option"],[724,"core::fmt"],[725,"core::fmt"],[726,"alloc::sync"],[727,"core::iter::traits::iterator"]],"d":["Utils for swapping little-endian bytes to the compiling …","","","","","","","","","","","","Includes definitions of type aliases for Donet concepts, …","Easy to use interface for the DC file parser. Handles …","Swaps 2 bytes in little endian byte order to big endian. …","Swaps 4 bytes in little endian byte order to big endian. …","Swaps 8 bytes in little endian byte order to big endian. …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","","","","","","","","","Calls U::from(self).","","","","","","","","","","","Returns the argument unchanged.","","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","","","Calls U::from(self).","","","","","","","","","","","","","Returns the argument unchanged.","","","","","","","","","","","","","","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns true if the enum is DCNumberType::Float otherwise …","Returns true if the enum is DCNumberType::Int otherwise …","Returns true if the enum is DCNumberType::None otherwise …","Returns true if the enum is DCNumberType::UInt otherwise …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Sent by the client when it’s closing the connection. …","","","","","","","The client should send this message on a regular interval. …","","This is sent by the Client Agent to the client when the …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Contains the error value","Contains the error value","Contains the error value","","","","","","","","","","","","","","Contains the success value","Contains the success value","Contains the success value","","","Enumerator for every message type in the Donet network …","An iterator over the variants of Protocol","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","Utility for converting protocol enumerator to u16 (MsgType)","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,24,7,24,24,7,7,24,7,24,7,24,7,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,7,24,24,7,24,7,24,7,24,0,0,29,29,29,60,29,60,29,60,29,60,29,60,29,29,60,29,29,29,29,0,0,35,35,35,35,61,35,35,61,35,61,35,61,35,61,35,61,35,35,35,35,0,0,0,62,43,62,43,62,43,62,43,62,43,62,43,45,43,45,43,45,45,45,43,45,43,62,43,62,43,62,43,62,43,62,43,62,43,62,43,62,43,62,43,62,43,62,43,62,43,62,43,62,43,62,43,45,43,45,43,45,45,45,45,43,45,43,45,43,0,0,0,44,44,63,44,44,44,63,44,63,44,44,63,44,44,44,44,0,0,0,0,39,39,39,39,64,39,64,39,64,39,64,39,64,39,64,39,64,39,39,64,39,64,39,64,39,39,39,39,49,49,49,49,49,49,49,49,49,49,49,49,49,49,0,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,0,49,49,49,49,49,49,49,49,49,0,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,51,49,50,51,49,50,49,50,49,50,49,50,49,50,51,49,50,51,49,50,51,50,50,50,51,51,49,50,51,49,50,51,49,50,51,49,50,0,0,0,52,32,52,32,32,32,52,52,32,65,52,65,52,65,52,65,52,65,52,65,52,52,32,65,52,65,52,65,52,65,52,32,52,32,52,32,52,32,65,52,0,0,42,42,42,42,42,42,42,42,42,42,0,0,0,0,0,0,56,56,56,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,56,33,31,54,55,56,33,31,54,55,56,33,31,54,55,56,33,31,54,55,56,31,54,33,31,54,55,56,66,31,66,31,66,31,66,31,66,31,54,33,31,54,55,56,56,56,56,56,66,31,66,31,55,55,55,55,55,66,31,31,33,31,54,55,56,33,31,54,55,56,33,31,54,55,56,33,31,54,55,56,54,55,0,0,0,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,0,0,0,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,0,0,0,0,0,0,0,0,0,0,58,58,0,0,0,0,0,3,9,12,0,59,0,0,0,0,25,25,25,25,25,25,0,3,9,12,0,59,0,0,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,0,0,0,59,58,25,57,59,58,25,57,25,57,25,57,58,25,59,58,25,57,59,58,25,57,59,58,25,57,57,25,57,0,57,57,57,57,25,57,59,58,25,57,59,58,25,57,59,58,25,57],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,[[[2,[1]]],3],[4,4],[5,5],[6,6],0,0,[[7,[2,[8]]],9],[[7,10],9],[[7,11],12],[[7,13],9],[[7,14],9],[[7,[2,[8]]],9],[[7,7],9],[[7,15],9],[[7,16],9],[[7,17],9],[[7,18],9],[[7,19],9],[[7,20],9],[[7,21],9],[[7,15,22],9],[[7,[2,[13]],13,14],9],[[7,11],9],[[7,23],9],[[7,4],9],[[7,5],9],[[7,6],9],[[7,8],9],[[7,22],9],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[24,11],9],[[],7],[-1,-1,[]],[-1,-1,[]],[7,[[2,[8]]]],[24,11],[-1,-2,[],[]],[-1,-2,[],[]],[[],7],[7,24],[24,10],[24,13],[[24,11],[[2,[8]]]],[24,15],[24,16],[24,17],[24,18],[24,19],[24,20],[24,21],[24,25],[24,8],[24,11],[24,4],[24,5],[24,6],[24,8],[24,22],[[24,11],26],[7,11],[[24,11],9],[24,11],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,28,[]],[-1,28,[]],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-1,[]],0,0,[-1,30,[]],[29,30],[-1,31,[]],[29,31],[-1,32,[]],[29,32],[-1,10,[]],[29,10],[-1,-2,[],[]],[[33,[34,[32]]],29],[[33,[34,[32]]],29],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,28,[]],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[[35,36],37],[-1,-1,[]],[-1,26,[]],[35,26],[-1,-2,[],[]],[[23,38],-1,[]],[[23,38],35],[[-1,38],26,[]],[[35,38],26],[[-1,1],26,[]],[[35,1],26],[[-1,[41,[[40,[39]]]]],26,[]],[[35,[41,[[40,[39]]]]],26],[[-1,[41,[[40,[42]]]]],26,[]],[[35,[41,[[40,[42]]]]],26],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,28,[]],0,0,0,[[-1,39],26,[]],[[43,39],26],[[-1,35],26,[]],[[43,35],26],[[-1,44],26,[]],[[43,44],26],[[-1,45],26,[]],[[43,45],26],[[-1,42],26,[]],[[43,42],26],[[-1,1],[[27,[26,26]]],[]],[[43,1],[[27,[26,26]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[45,45],[[-1,-2],26,[],[]],[[45,36],37],[[43,36],37],[-1,-1,[]],[-1,-1,[]],0,0,[[-1,30],[[41,[[40,[39]]]]],[]],[[43,30],[[41,[[40,[39]]]]]],[[-1,46],[[41,[[40,[39]]]]],[]],[[43,46],[[41,[[40,[39]]]]]],[[-1,23],[[41,[[40,[39]]]]],[]],[[43,23],[[41,[[40,[39]]]]]],[-1,47,[]],[43,47],[[-1,30],[[41,[44]]],[]],[[43,30],[[41,[44]]]],[-1,46,[]],[43,46],[-1,30,[]],[43,30],[-1,30,[]],[43,30],[-1,30,[]],[43,30],[-1,30,[]],[43,30],[-1,1,[]],[43,1],[[-1,30],45,[]],[[43,30],45],[[-1,30],[[41,[[40,[42]]]]],[]],[[43,30],[[41,[[40,[42]]]]]],[[-1,1],10,[]],[[43,1],10],[-1,-2,[],[]],[-1,-2,[],[]],[[1,[2,[1]]],45],[[],43],0,0,[-1,-2,[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,28,[]],[-1,28,[]],0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,26,[]],[44,26],[[44,36],37],[-1,-1,[]],[-1,48,[]],[44,48],[-1,1,[]],[44,1],[-1,-2,[],[]],[[1,[34,[48]]],44],[[1,[34,[48]]],44],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,28,[]],0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[[39,36],37],[-1,-1,[]],0,0,[-1,46,[]],[39,46],[-1,[[34,[[41,[[40,[35]]]]]]],[]],[39,[[34,[[41,[[40,[35]]]]]]]],[-1,1,[]],[39,1],[-1,30,[]],[39,30],[[-1,30],[[34,[[41,[[40,[39]]]]]]],[]],[[39,30],[[34,[[41,[[40,[39]]]]]]]],[-1,10,[]],[39,10],[-1,-2,[],[]],[23,-1,[]],[23,39],[[-1,46],26,[]],[[39,46],26],[[-1,[41,[[40,[39]]]]],26,[]],[[39,[41,[[40,[39]]]]],26],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,28,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[49,49],[50,50],[[-1,-2],26,[],[]],[[-1,-2],26,[],[]],[[49,49],10],[[50,50],10],[[49,36],37],[[50,36],37],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,[23,51],[51,[[34,[[26,[49,50]]]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,28,[]],[-1,28,[]],[-1,28,[]],0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[32,32],[[-1,-2],26,[],[]],[52],[-1,-1,[]],[-1,-1,[]],0,0,[-1,4,[]],[52,4],[-1,17,[]],[52,17],[-1,32,[]],[52,32],[-1,10,[]],[52,10],[-1,10,[]],[52,10],[-1,-2,[],[]],[-1,-2,[],[]],[33,52],[33,52],[[-1,4],[[27,[26,26]]],[]],[[52,4],[[27,[26,26]]]],[[-1,17],[[27,[26,26]]],[]],[[52,17],[[27,[26,26]]]],[[-1,32],[[27,[26,26]]],[]],[[52,32],[[27,[26,26]]]],[-1,-2,[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,28,[]],[-1,28,[]],[[-1,[2,[8]],6],[[27,[26,26]]],[]],[[52,[2,[8]],6],[[27,[26,26]]]],[-1,[[27,[43,[26,[[34,[[26,[49,50]]]],23]]]]],53],0,[-1,-2,[],[]],[-1,-2,[],[]],[[42,42],10],[[42,36],37],[-1,-1,[]],[-1,-2,[],[]],[[],42],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,28,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[33,33],[31,31],[54,54],[55,55],[56,56],[[-1,-2],26,[],[]],[[-1,-2],26,[],[]],[[-1,-2],26,[],[]],[[-1,-2],26,[],[]],[[-1,-2],26,[],[]],0,0,[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],0,0,[-1,[[27,[1,26]]],[]],[31,[[27,[1,26]]]],[-1,33,[]],[31,33],[-1,11,[]],[31,11],[-1,10,[]],[31,10],0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[56,10],[56,10],[56,10],[56,10],[-1,10,[]],[31,10],[[],31],[[],31],[[],55],[17,55],[20,55],[6,55],0,[[-1,1],26,[]],[[31,1],26],0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,28,[]],[-1,28,[]],[-1,28,[]],[-1,28,[]],[-1,28,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[25,25],[57,57],[[-1,-2],26,[],[]],[[-1,-2],26,[],[]],[[58,58],10],[[25,25],10],[[59,36],37],[[58,36],37],[[25,36],37],[[57,36],37],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[],57],[57,30],[25,14],[57,34],[57,34],[[57,30],34],[57,[[26,[30,[34,[30]]]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,28,[]],[-1,28,[]],[-1,28,[]],[-1,28,[]]],"c":[],"p":[[3,"String",719],[3,"Vec",720],[6,"DCReadResult",515],[15,"u16"],[15,"u32"],[15,"u64"],[3,"Datagram",17],[15,"u8"],[6,"DgResult",515],[15,"bool"],[6,"DgSizeTag",515],[6,"DgBufferResult",515],[6,"Channel",515],[6,"MsgType",515],[6,"DoId",515],[15,"f32"],[15,"f64"],[15,"i16"],[15,"i32"],[15,"i64"],[15,"i8"],[6,"Zone",515],[15,"str"],[3,"DatagramIterator",17],[4,"Protocol",515],[15,"tuple"],[4,"Result",721],[3,"TypeId",722],[3,"DCArrayType",84],[15,"usize"],[3,"DCTypeDefinition",402],[3,"DCNumericRange",347],[4,"DCTypeEnum",402],[4,"Option",723],[3,"DCField",105],[3,"Formatter",724],[6,"Result",724],[6,"FieldId",515],[3,"DClass",214],[3,"Mutex",725],[3,"Arc",726],[3,"DCStruct",391],[3,"DCFile",127],[3,"DCKeyword",195],[3,"DCImport",127],[6,"DClassId",515],[6,"DCFileHash",515],[6,"HistoricalFlag",195],[4,"DCToken",246],[3,"Span",246],[3,"Lexer",246],[3,"DCNumericType",347],[8,"Iterator",727],[19,"DCNumberValueUnion",402],[3,"DCNumber",402],[4,"DCNumberType",402],[3,"ProtocolIter",515],[4,"DgError",515],[4,"DCReadError",515],[8,"DCArrayTypeInterface",84],[8,"DCFieldInterface",105],[8,"DCFileInterface",127],[8,"DCKeywordInterface",195],[8,"DClassInterface",214],[8,"DCNumericTypeInterface",347],[8,"DCTypeDefinitionInterface",402]],"b":[]}\ +"libdonet":{"doc":"DONET SOFTWARE","t":"AAAAAAAAAAAAAAAAFFFFDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDILLLKLKLKLKLKLLKLLLLDIKLLLLLKLKLKLLKLLLLNEDINNNNELLLLLLLLLLLLKLKLKLKLLLLKLKLKLKLKLKLKLKLKLKLKLKLKLKLKLKLKLKLLLLLLLLLLKLDIDKLKLKLKLKLKLLLLLLLLLLLKLKLKLKLKLKLKLKLKLKLKLKLKLKLKLLLLLMMLLLLLLLNNDIDIGEGKLKLKLLLLLLLKLKLKLKLLLLLLLLKKLLKLKLKLKLKLKLLLLKKLLLLLLLLLLLDIGGLLLLKLKLKLKLKLKLKLLKLKLKLLLLNNNNNNNNNNNNNNENNNNNNNNNNNNNNNNNNNNNNDNNNNNNNNNDNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLMMMLLLLLLLLLLLLLDLLLLLLLLDDILLLLLLLLLKLKLKLKLKLKLLLLMMKLLLLLKLKLKLLLLLLLLKLDLLLLLLLLFDLLLLLLLLLLLDETDIENNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLMLLLLMLLLLLLLKLKLKLKLKLMLLLLLLLLLKLKLLLLLMKLMLLLLLLLLLLLLLLLLLLLLMMRRRNNNNNNNNNNNNNNNNNNNRRGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGEGHHHHGRRNNGEGGGNNNGNHRRHNNNNNNGNNNGNEDNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNRRGLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLL","n":["byte_order","datagram","dcarray","dcatomic","dcfield","dcfile","dckeyword","dclass","dclexer","dcmolecular","dcnumeric","dcparameter","dcparser","dcstruct","dctype","globals","read_dc_files","swap_le_16","swap_le_32","swap_le_64","Datagram","DatagramIterator","add_blob","add_bool","add_buffer","add_channel","add_control_header","add_data","add_datagram","add_doid","add_f32","add_f64","add_i16","add_i32","add_i64","add_i8","add_location","add_server_header","add_size","add_string","add_u16","add_u32","add_u64","add_u8","add_zone","borrow","borrow","borrow_mut","borrow_mut","check_read_length","default","from","from","get_data","get_remaining","into","into","new","new","read_bool","read_channel","read_data","read_doid","read_f32","read_f64","read_i16","read_i32","read_i64","read_i8","read_msg_type","read_recipient_count","read_size","read_u16","read_u32","read_u64","read_u8","read_zone","seek","size","skip","tell","try_from","try_from","try_into","try_into","type_id","type_id","DCArrayType","DCArrayTypeInterface","borrow","borrow_mut","from","generate_hash","generate_hash","get_array_size","get_array_size","get_element_type","get_element_type","get_range","get_range","has_range","has_range","into","new","new","try_from","try_into","type_id","DCAtomicField","DCAtomicFieldInterface","add_element","add_element","borrow","borrow_mut","fmt","from","generate_hash","generate_hash","get_element","get_element","get_num_elements","get_num_elements","into","new","new","try_from","try_into","type_id","Atomic","ClassField","DCField","DCFieldInterface","Field","Field","Molecular","Molecular","StructField","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","fmt","fmt","fmt","from","from","from","generate_hash","generate_hash","get_dclass","get_dclass","get_field_id","get_field_id","has_default_value","has_default_value","into","into","into","is_airecv","is_airecv","is_bogus_field","is_bogus_field","is_broadcast","is_broadcast","is_clrecv","is_clrecv","is_clsend","is_clsend","is_db","is_db","is_ownrecv","is_ownrecv","is_ownsend","is_ownsend","is_ram","is_ram","is_required","is_required","new","new","set_bogus_field","set_bogus_field","set_default_value","set_default_value","set_field_id","set_field_id","set_field_name","set_field_name","set_field_type","set_field_type","set_parent_dclass","set_parent_dclass","set_parent_struct","set_parent_struct","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","validate_ranges","validate_ranges","DCFile","DCFileInterface","DCImport","add_dclass","add_dclass","add_field","add_field","add_keyword","add_keyword","add_python_import","add_python_import","add_struct","add_struct","add_typedef","add_typedef","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","fmt","fmt","from","from","generate_hash","generate_hash","get_dclass","get_dclass","get_dclass_by_id","get_dclass_by_id","get_dclass_by_name","get_dclass_by_name","get_hash","get_hash","get_keyword","get_keyword","get_next_dclass_id","get_next_dclass_id","get_num_dclasses","get_num_dclasses","get_num_imports","get_num_imports","get_num_keywords","get_num_keywords","get_num_structs","get_num_structs","get_pretty_hash","get_pretty_hash","get_python_import","get_python_import","get_struct","get_struct","has_keyword","has_keyword","into","into","new","new","python_module","symbols","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","ByName","ByStruct","DCKeyword","DCKeywordInterface","DCKeywordList","DCKeywordListInterface","HistoricalFlag","IdentifyKeyword","KeywordName2Keyword","_get_keyword_list","_get_keyword_list","_get_keywords_by_name_map","_get_keywords_by_name_map","add_keyword","add_keyword","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clear_historical_flag","clear_historical_flag","clear_keywords","clear_keywords","compare_with","compare_with","copy_keywords","copy_keywords","default","eq","fmt","fmt","from","from","from","generate_hash","generate_hash","generate_hash","generate_hash","get_historical_flag","get_historical_flag","get_keyword","get_keyword","get_keyword_by_name","get_keyword_by_name","get_name","get_name","get_num_keywords","get_num_keywords","has_keyword","has_keyword","into","into","into","new","new","new","new","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","DClass","DClassInterface","FieldId2Field","FieldName2Field","borrow","borrow_mut","fmt","from","generate_hash","generate_hash","get_constructor","get_constructor","get_dclass_id","get_dclass_id","get_name","get_name","get_num_parents","get_num_parents","get_parent","get_parent","has_constructor","has_constructor","into","new","new","set_dclass_id","set_dclass_id","set_parent","set_parent","try_from","try_into","type_id","BinaryLiteral","Blob32T","BlobT","Break","Case","CharT","CharacterLiteral","CloseBraces","CloseBrackets","CloseParenthesis","Colon","Comma","Comment","DCKeyword","DCToken","DClass","DecimalLiteral","Default","Equals","EscapeCharacter","Float32T","Float64T","FloatLiteral","ForwardSlash","From","HexLiteral","Hyphen","Identifier","Import","Int16ArrayT","Int16T","Int32ArrayT","Int32T","Int64T","Int8ArrayT","Int8T","Keyword","Lexer","Newline","OctalLiteral","OpenBraces","OpenBrackets","OpenParenthesis","Percent","Period","Plus","Semicolon","Span","Star","StringLiteral","StringT","Struct","Switch","Typedef","UInt16ArrayT","UInt16T","UInt32ArrayT","UInt32T","UInt32UInt8ArrayT","UInt64T","UInt8ArrayT","UInt8T","ViewSuffix","Whitespace","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","eq","eq","fmt","fmt","from","from","from","into","into","into","into_iter","line","max","min","new","next","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","DCMolecularField","borrow","borrow_mut","fmt","from","into","try_from","try_into","type_id","DCNumericRange","DCNumericType","DCNumericTypeInterface","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","contains","from","from","generate_hash","generate_hash","get_divisor","get_divisor","get_modulus","get_modulus","get_range","get_range","has_modulus","has_modulus","has_range","has_range","into","into","is_empty","max","min","new","new","new","new_floating_point_range","new_integer_range","new_unsigned_integer_range","set_divisor","set_divisor","set_modulus","set_modulus","set_range","set_range","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","within_range","within_range","DCParameter","borrow","borrow_mut","fmt","from","into","try_from","try_into","type_id","parse","DCStruct","borrow","borrow_mut","default","eq","fmt","from","into","new","try_from","try_into","type_id","DCNumber","DCNumberType","DCNumberValueUnion","DCTypeDefinition","DCTypeDefinitionInterface","DCTypeEnum","Float","Int","None","TArray","TBlob","TBlob32","TChar","TFloat32","TFloat64","TInt16","TInt32","TInt64","TInt8","TInvalid","TMethod","TString","TStruct","TUInt16","TUInt32","TUInt64","TUInt8","TVarArray","TVarBlob","TVarBlob32","TVarString","UInt","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","data_type","default","eq","eq","eq","floating_point","fmt","fmt","from","from","from","from","from","generate_hash","generate_hash","get_alias","get_alias","get_dc_type","get_dc_type","get_size","get_size","has_alias","has_alias","integer","into","into","into","into","into","is_float","is_int","is_none","is_u_int","is_variable_length","is_variable_length","new","new","new","new_floating_point","new_integer","new_unsigned_integer","number_type","set_alias","set_alias","size","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","unsigned_integer","value","BCHAN_CLIENTS","BCHAN_DBSERVERS","BCHAN_STATESERVERS","CAAddInterest","CAAddInterestMultiple","CAAddPostRemove","CAAddSessionObject","CAClearPostRemoves","CACloseChannel","CADeclareObject","CADrop","CAEject","CAGetNetworkAddress","CAGetNetworkAddressResp","CAOpenChannel","CARemoveInterest","CARemoveSessionObject","CASendDatagram","CASetClientID","CASetFieldsSendable","CASetState","CAUndeclareObject","CHANNEL_MAX","CONTROL_CHANNEL","Channel","ClientAddInterest","ClientAddInterestMultiple","ClientDisconnect","ClientDoneInterestResp","ClientEject","ClientEnterObjectRequired","ClientEnterObjectRequiredOther","ClientEnterObjectRequiredOwner","ClientEnterObjectRequiredOwnerOther","ClientHeartbeat","ClientHello","ClientHelloResp","ClientObjectLeaving","ClientObjectLeavingOwner","ClientObjectLocation","ClientObjectSetField","ClientObjectSetFields","ClientRemoveInterest","DBCreateObject","DBCreateObjectResp","DBObjectDelete","DBObjectDeleteField","DBObjectDeleteFields","DBObjectGetAll","DBObjectGetAllResp","DBObjectGetField","DBObjectGetFieldResp","DBObjectGetFields","DBObjectGetFieldsResp","DBObjectSetField","DBObjectSetFieldIfEmpty","DBObjectSetFieldIfEmptyResp","DBObjectSetFieldIfEquals","DBObjectSetFieldIfEqualsResp","DBObjectSetFields","DBObjectSetFieldsIfEquals","DBObjectSetFieldsIfEqualsResp","DBSSObjectActivateWithDefaults","DBSSObjectActivateWithDefaultsOther","DBSSObjectDeleteDisk","DBSSObjectDeleteFieldDisk","DBSSObjectDeleteFieldsDisk","DBSSObjectGetActivated","DBSSObjectGetActivatedResp","DCFileHash","DCReadError","DCReadResult","DC_MULTIPLE_INHERITANCE","DC_SORT_INHERITANCE_BY_FILE","DC_VIEW_SUFFIXES","DC_VIRTUAL_INHERITANCE","DClassId","DG_SIZE_MAX","DOID_MAX","DatagramIteratorEOF","DatagramOverflow","DgBufferResult","DgError","DgResult","DgSizeTag","DoId","Err","Err","Err","FieldId","FileError","HISTORICAL_DC_KEYWORDS","INVALID_CHANNEL","INVALID_DOID","MAX_PRIME_NUMBERS","MDAddChannel","MDAddPostRemove","MDAddRange","MDClearPostRemoves","MDRemoveChannel","MDRemoveRange","MsgType","Ok","Ok","Ok","ParseError","ParseError","Protocol","ProtocolIter","SSCreateObjectWithRequired","SSCreateObjectWithRequiredOther","SSDeleteAIObjects","SSObjectChangingAI","SSObjectChangingLocation","SSObjectChangingOwner","SSObjectDeleteChildren","SSObjectDeleteFieldRAM","SSObjectDeleteFieldsRAM","SSObjectDeleteRAM","SSObjectDeleteZone","SSObjectDeleteZones","SSObjectEnterAIWithRequired","SSObjectEnterAIWithRequiredOther","SSObjectEnterLocationWithRequired","SSObjectEnterLocationWithRequiredOther","SSObjectEnterOwnerWithRequired","SSObjectEnterOwnerWithRequiredOther","SSObjectGetAI","SSObjectGetAIResp","SSObjectGetAll","SSObjectGetAllResp","SSObjectGetChildCount","SSObjectGetChildCountResp","SSObjectGetChildren","SSObjectGetField","SSObjectGetFieldResp","SSObjectGetFields","SSObjectGetFieldsResp","SSObjectGetLocation","SSObjectGetLocationResp","SSObjectGetOwner","SSObjectGetOwnerResp","SSObjectGetZoneCount","SSObjectGetZoneCountResp","SSObjectGetZoneObjects","SSObjectGetZonesCount","SSObjectGetZonesCountResp","SSObjectGetZonesObjects","SSObjectSetAI","SSObjectSetField","SSObjectSetFields","SSObjectSetLocation","SSObjectSetOwner","ZONE_BITS","ZONE_MAX","Zone","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","eq","eq","fmt","fmt","fmt","fmt","from","from","from","from","into","into","into","into","into_iter","iter","len","msg_type","next","next_back","nth","size_hint","to_owned","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id"],"q":[[0,"libdonet"],[17,"libdonet::byte_order"],[20,"libdonet::datagram"],[87,"libdonet::dcarray"],[108,"libdonet::dcatomic"],[128,"libdonet::dcfield"],[207,"libdonet::dcfile"],[275,"libdonet::dckeyword"],[343,"libdonet::dclass"],[375,"libdonet::dclexer"],[476,"libdonet::dcmolecular"],[485,"libdonet::dcnumeric"],[535,"libdonet::dcparameter"],[544,"libdonet::dcparser"],[545,"libdonet::dcstruct"],[557,"libdonet::dctype"],[676,"libdonet::globals"],[880,"alloc::string"],[881,"alloc::vec"],[882,"core::result"],[883,"core::any"],[884,"core::option"],[885,"core::fmt"],[886,"core::fmt"],[887,"alloc::sync"],[888,"core::iter::traits::iterator"]],"d":["Utils for swapping little-endian bytes to the compiling …","Provides structures to write network datagrams and tools …","Data model of the DC Array element, which is a parameter …","Data model for a DC Atomic Field, which represents a remote","Base data model for DC Field elements. Alone, it represents","Root structure that stores the collection of DC elements …","Representation of arbitrary and historical keywords as …","Data model for Distributed Class definitions in the DC …","Definition of the Lexer machine to process raw DC file …","Data model for a DC Molecular field, which represents a …","Structure representing data types supported in the DC …","Data model that represents a single parameter of an atomic …","Definition of the DC language context free grammar for the …","Data model representing a DC Struct element.","Represents all data types supported by the DC language and …","Includes definitions of type aliases for Donet concepts, …","Easy to use interface for the DC file parser. Handles …","Swaps 2 bytes in little endian byte order to big endian. …","Swaps 4 bytes in little endian byte order to big endian. …","Swaps 8 bytes in little endian byte order to big endian. …","","Utility for iterating value by value of a datagram message.","Adds a dclass blob value (binary data) to the end of the …","Adds an unsigned 8-bit integer to the datagram that is …","Reserves an amount of bytes in the datagram buffer.","Adds a 64-bit channel ID to the end of the datagram.","Appends a control header, which is very similar to a …","Adds raw bytes to the datagram via an unsigned 8-bit …","Appends another datagram’s binary data to this datagram.","Adds a 32-bit Distributed Object ID to the end of the …","32-bit IEEE 754 floating point. same bitwise operations.","64-bit IEEE 754 floating point. same bitwise operations.","","","","","Added for convenience, but also better performance than …","Appends a generic header for messages that are to be …","Adds a Datagram / Field length tag to the end of the …","Adds a dclass string value to the end of the datagram. A …","","","","Adds an unsigned 8-bit integer value to the datagram.","Adds a 32-bit zone ID to the end of the datagram.","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the number of unread bytes left in the datagram","Calls U::from(self).","Calls U::from(self).","","","","","Reads the next number of bytes in the datagram.","","32-bit IEEE 754 floating point in native endianness.","64-bit IEEE 754 floating point in native endianness.","","","","","Returns the datagram’s message type. Does not advance …","Get the recipient count in a datagram message. Does not …","","","","","","","Manually sets the buffer_offset position.","","Increments the buffer_offset by bytes length. Returns …","Returns the value of self.index in bytes.","","","","","","","","","","","Returns the argument unchanged.","","","","","","","","","","","Calls U::from(self).","","","","","","Represents an atomic field of a Distributed Class. This …","","","","","","","Returns the argument unchanged.","","","","","","","Calls U::from(self).","","","","","","","Enumerator representing the 3 types of fields that inherit …","A field of a Distributed Class. The DCField struct is a …","","","","","","A different enumerator representing DC Field types used …","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Data model that provides a high level representation of a …","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Accumulates the elements of the DC file into the hash.","","","","","","","","Returns a 32-bit hash index associated with this file. …","","","","","","","","","","","","","","Returns a string with the hash as a pretty format …","","","","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","This is a flag bitmask for historical keywords. Panda uses …","Represents the two types of inputs that …","A map of key/value pairs mapping keyword names to …","","Returns a clone of this object’s keyword array.","","Returns a clone of this object’s keyword name map.","","","","","","","","","","","","Clears the DCKeywords array, keyword name map, and …","","Compares this Keyword List with another DCKeywordList …","","Overwrites the DCKeywords of this list with the target’s …","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","","","","","","","","","","","","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","Numeric Range structs are used to represent a range of …","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Generates the hash for this DC Type element.","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns true if the enum is DCNumberType::Float otherwise …","Returns true if the enum is DCNumberType::Int otherwise …","Returns true if the enum is DCNumberType::None otherwise …","Returns true if the enum is DCNumberType::UInt otherwise …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Sent by the client when it’s closing the connection. …","","","","","","","The client should send this message on a regular interval. …","","This is sent by the Client Agent to the client when the …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Contains the error value","Contains the error value","Contains the error value","","","","","","","","","","","","","","Contains the success value","Contains the success value","Contains the success value","","","Enumerator for every message type in the Donet network …","An iterator over the variants of Protocol","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","Utility for converting protocol enumerator to u16 (MsgType)","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,24,7,24,24,7,7,24,7,24,7,24,7,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,7,24,24,7,24,7,24,7,24,0,0,29,29,29,68,29,68,29,68,29,68,29,68,29,29,68,29,29,29,29,0,0,69,34,34,34,34,34,69,34,69,34,69,34,34,69,34,34,34,34,42,0,0,0,42,43,42,43,0,41,42,43,41,42,43,41,42,43,41,42,43,70,41,70,41,70,41,70,41,41,42,43,70,41,70,41,70,41,70,41,70,41,70,41,70,41,70,41,70,41,70,41,70,41,70,41,70,41,70,41,70,41,70,41,70,41,70,41,41,42,43,41,42,43,41,42,43,70,41,0,0,0,71,46,71,46,71,46,71,46,71,46,71,46,48,46,48,46,48,48,48,46,48,46,71,46,71,46,71,46,71,46,71,46,71,46,71,46,71,46,71,46,71,46,71,46,71,46,71,46,71,46,71,46,48,46,48,46,48,48,48,48,46,48,46,48,46,54,54,0,0,0,0,0,0,0,72,51,72,51,72,51,54,47,51,54,47,51,73,47,72,51,72,51,72,51,51,47,47,51,54,47,51,73,72,47,51,73,47,72,51,72,51,73,47,72,51,72,51,54,47,51,73,72,47,51,54,47,51,54,47,51,54,47,51,0,0,0,0,40,40,40,40,74,40,74,40,74,40,74,40,74,40,74,40,74,40,40,74,40,74,40,74,40,40,40,40,55,55,55,55,55,55,55,55,55,55,55,55,55,55,0,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,0,55,55,55,55,55,55,55,55,55,0,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,57,55,56,57,55,56,55,56,55,56,55,56,55,56,57,55,56,57,55,56,57,56,56,56,57,57,55,56,57,55,56,57,55,56,57,55,56,0,58,58,58,58,58,58,58,58,0,0,0,60,32,60,32,32,32,32,60,32,75,60,75,60,75,60,75,60,75,60,75,60,60,32,32,32,32,75,60,32,32,32,32,75,60,75,60,75,60,32,60,32,60,32,60,32,75,60,0,33,33,33,33,33,33,33,33,0,0,45,45,45,45,45,45,45,45,45,45,45,0,0,0,0,0,0,64,64,64,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,64,61,30,63,59,64,61,30,63,59,64,61,30,63,59,64,61,30,63,59,64,30,59,61,59,64,63,61,30,61,30,63,59,64,76,30,76,30,76,30,76,30,76,30,63,61,30,63,59,64,64,64,64,64,76,30,76,30,59,59,59,59,59,76,30,30,61,30,63,59,64,61,30,63,59,64,61,30,63,59,64,61,30,63,59,64,63,59,0,0,0,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,0,0,0,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,0,0,0,0,0,0,0,0,0,0,66,66,0,0,0,0,0,3,9,12,0,67,0,0,0,0,25,25,25,25,25,25,0,3,9,12,0,67,0,0,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,0,0,0,67,66,25,65,67,66,25,65,25,65,25,65,66,25,67,66,25,65,67,66,25,65,67,66,25,65,65,25,65,0,65,65,65,65,25,65,67,66,25,65,67,66,25,65,67,66,25,65],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[[2,[1]]],3],[4,4],[5,5],[6,6],0,0,[[7,[2,[8]]],9],[[7,10],9],[[7,11],12],[[7,13],9],[[7,14],9],[[7,[2,[8]]],9],[[7,7],9],[[7,15],9],[[7,16],9],[[7,17],9],[[7,18],9],[[7,19],9],[[7,20],9],[[7,21],9],[[7,15,22],9],[[7,[2,[13]],13,14],9],[[7,11],9],[[7,23],9],[[7,4],9],[[7,5],9],[[7,6],9],[[7,8],9],[[7,22],9],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[24,11],9],[[],7],[-1,-1,[]],[-1,-1,[]],[7,[[2,[8]]]],[24,11],[-1,-2,[],[]],[-1,-2,[],[]],[[],7],[7,24],[24,10],[24,13],[[24,11],[[2,[8]]]],[24,15],[24,16],[24,17],[24,18],[24,19],[24,20],[24,21],[24,25],[24,8],[24,11],[24,4],[24,5],[24,6],[24,8],[24,22],[[24,11],26],[7,11],[[24,11],9],[24,11],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,28,[]],[-1,28,[]],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-1,[]],0,0,[-1,4,[]],[29,4],[-1,[[31,[30]]],[]],[29,[[31,[30]]]],[-1,[[31,[32]]],[]],[29,[[31,[32]]]],[-1,10,[]],[29,10],[-1,-2,[],[]],[[[31,[30]],[31,[32]]],-1,[]],[[[31,[30]],[31,[32]]],29],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,28,[]],0,0,[[-1,33],26,[]],[[34,33],26],[-1,-2,[],[]],[-1,-2,[],[]],[[34,35],36],[-1,-1,[]],0,0,[[-1,37],[[31,[[39,[[38,[33]]]]]]],[]],[[34,37],[[31,[[39,[[38,[33]]]]]]]],[-1,37,[]],[34,37],[-1,-2,[],[]],[[23,[39,[[38,[40]]]],10],-1,[]],[[23,[39,[[38,[40]]]],10],34],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,28,[]],0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[41,35],36],[[42,35],36],[[43,35],36],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],0,0,[-1,[[39,[[38,[40]]]]],[]],[41,[[39,[[38,[40]]]]]],[-1,44,[]],[41,44],[-1,10,[]],[41,10],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,10,[]],[41,10],[-1,10,[]],[41,10],[-1,10,[]],[41,10],[-1,10,[]],[41,10],[-1,10,[]],[41,10],[-1,10,[]],[41,10],[-1,10,[]],[41,10],[-1,10,[]],[41,10],[-1,10,[]],[41,10],[-1,10,[]],[41,10],[[23,30],-1,[]],[[23,30],41],[[-1,10],26,[]],[[41,10],26],[[-1,[2,[8]]],26,[]],[[41,[2,[8]]],26],[[-1,44],26,[]],[[41,44],26],[[-1,1],26,[]],[[41,1],26],[[-1,30],26,[]],[[41,30],26],[[-1,[39,[[38,[40]]]]],26,[]],[[41,[39,[[38,[40]]]]],26],[[-1,[39,[[38,[45]]]]],26,[]],[[41,[39,[[38,[45]]]]],26],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,28,[]],[-1,28,[]],[-1,28,[]],[[-1,7],10,[]],[[41,7],10],0,0,0,[[-1,40],26,[]],[[46,40],26],[[-1,41],26,[]],[[46,41],26],[[-1,47],26,[]],[[46,47],26],[[-1,48],26,[]],[[46,48],26],[[-1,45],26,[]],[[46,45],26],[[-1,1],[[27,[26,26]]],[]],[[46,1],[[27,[26,26]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[48,48],[[-1,-2],26,[],[]],[[48,35],36],[[46,35],36],[-1,-1,[]],[-1,-1,[]],0,0,[[-1,37],[[39,[[38,[40]]]]],[]],[[46,37],[[39,[[38,[40]]]]]],[[-1,49],[[39,[[38,[40]]]]],[]],[[46,49],[[39,[[38,[40]]]]]],[[-1,23],[[39,[[38,[40]]]]],[]],[[46,23],[[39,[[38,[40]]]]]],[-1,50,[]],[46,50],[[-1,37],[[39,[47]]],[]],[[46,37],[[39,[47]]]],[-1,49,[]],[46,49],[-1,37,[]],[46,37],[-1,37,[]],[46,37],[-1,37,[]],[46,37],[-1,37,[]],[46,37],[-1,1,[]],[46,1],[[-1,37],48,[]],[[46,37],48],[[-1,37],[[39,[[38,[45]]]]],[]],[[46,37],[[39,[[38,[45]]]]]],[[-1,1],10,[]],[[46,1],10],[-1,-2,[],[]],[-1,-2,[],[]],[[1,[2,[1]]],48],[[],46],0,0,[-1,-2,[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,28,[]],[-1,28,[]],0,0,0,0,0,0,0,0,0,[-1,[[2,[[39,[[38,[47]]]]]]],[]],[51,[[2,[[39,[[38,[47]]]]]]]],[-1,52,[]],[51,52],[[-1,47],[[27,[26,26]]],[]],[[51,47],[[27,[26,26]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,26,[]],[47,26],[-1,26,[]],[51,26],[[-1,51],10,[]],[[51,51],10],[[-1,51],26,[]],[[51,51],26],[[],51],[[47,47],10],[[47,35],36],[[51,35],36],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],0,0,0,0,[-1,53,[]],[47,53],[[-1,37],[[31,[[39,[[38,[47]]]]]]],[]],[[51,37],[[31,[[39,[[38,[47]]]]]]]],[[-1,1],[[31,[[39,[[38,[47]]]]]]],[]],[[51,1],[[31,[[39,[[38,[47]]]]]]]],[-1,1,[]],[47,1],[-1,37,[]],[51,37],[[-1,54],10,[]],[[51,54],10],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[1,[31,[53]]],-1,[]],[[],-1,[]],[[1,[31,[53]]],47],[[],51],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,28,[]],[-1,28,[]],[-1,28,[]],0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[[40,35],36],[-1,-1,[]],0,0,[-1,[[31,[[39,[[38,[34]]]]]]],[]],[40,[[31,[[39,[[38,[34]]]]]]]],[-1,49,[]],[40,49],[-1,1,[]],[40,1],[-1,37,[]],[40,37],[[-1,37],[[31,[[39,[[38,[40]]]]]]],[]],[[40,37],[[31,[[39,[[38,[40]]]]]]]],[-1,10,[]],[40,10],[-1,-2,[],[]],[23,-1,[]],[23,40],[[-1,49],26,[]],[[40,49],26],[[-1,[39,[[38,[40]]]]],26,[]],[[40,[39,[[38,[40]]]]],26],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,28,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[55,55],[56,56],[[-1,-2],26,[],[]],[[-1,-2],26,[],[]],[[55,55],10],[[56,56],10],[[55,35],36],[[56,35],36],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,[23,57],[57,[[31,[[26,[55,56]]]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,28,[]],[-1,28,[]],[-1,28,[]],0,[-1,-2,[],[]],[-1,-2,[],[]],[[58,35],36],[-1,-1,[]],[-1,-2,[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,28,[]],0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[32,32],[[-1,-2],26,[],[]],[[32,59],10],[-1,-1,[]],[-1,-1,[]],0,0,[-1,4,[]],[60,4],[-1,17,[]],[60,17],[-1,32,[]],[60,32],[-1,10,[]],[60,10],[-1,10,[]],[60,10],[-1,-2,[],[]],[-1,-2,[],[]],[32,10],0,0,[61,-1,[]],[61,60],[[],32],[[17,17],32],[[20,20],32],[[6,6],32],[[-1,4],[[27,[26,26]]],[]],[[60,4],[[27,[26,26]]]],[[-1,17],[[27,[26,26]]],[]],[[60,17],[[27,[26,26]]]],[[-1,32],[[27,[26,26]]],[]],[[60,32],[[27,[26,26]]]],[-1,-2,[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,28,[]],[-1,28,[]],[[-1,[2,[8]],6],[[27,[26,26]]],[]],[[60,[2,[8]],6],[[27,[26,26]]]],0,[-1,-2,[],[]],[-1,-2,[],[]],[[33,35],36],[-1,-1,[]],[-1,-2,[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,28,[]],[-1,[[27,[46,[26,[[31,[[26,[55,56]]]],23]]]]],62],0,[-1,-2,[],[]],[-1,-2,[],[]],[[],45],[[45,45],10],[[45,35],36],[-1,-1,[]],[-1,-2,[],[]],[[],45],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,28,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[61,61],[30,30],[63,63],[59,59],[64,64],[[-1,-2],26,[],[]],[[-1,-2],26,[],[]],[[-1,-2],26,[],[]],[[-1,-2],26,[],[]],[[-1,-2],26,[],[]],0,[[],59],[[61,61],10],[[59,59],10],[[64,64],10],0,[[61,35],36],[[30,35],36],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],0,0,[-1,[[27,[1,26]]],[]],[30,[[27,[1,26]]]],[-1,61,[]],[30,61],[-1,11,[]],[30,11],[-1,10,[]],[30,10],0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[64,10],[64,10],[64,10],[64,10],[-1,10,[]],[30,10],[[],-1,[]],[[],30],[[],59],[17,59],[20,59],[6,59],0,[[-1,1],26,[]],[[30,1],26],0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,28,[]],[-1,28,[]],[-1,28,[]],[-1,28,[]],[-1,28,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[25,25],[65,65],[[-1,-2],26,[],[]],[[-1,-2],26,[],[]],[[66,66],10],[[25,25],10],[[67,35],36],[[66,35],36],[[25,35],36],[[65,35],36],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[],65],[65,37],[25,14],[65,31],[65,31],[[65,37],31],[65,[[26,[37,[31,[37]]]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,[[27,[-2]]],[],[]],[-1,28,[]],[-1,28,[]],[-1,28,[]],[-1,28,[]]],"c":[],"p":[[3,"String",880],[3,"Vec",881],[6,"DCReadResult",676],[15,"u16"],[15,"u32"],[15,"u64"],[3,"Datagram",20],[15,"u8"],[6,"DgResult",676],[15,"bool"],[6,"DgSizeTag",676],[6,"DgBufferResult",676],[6,"Channel",676],[6,"MsgType",676],[6,"DoId",676],[15,"f32"],[15,"f64"],[15,"i16"],[15,"i32"],[15,"i64"],[15,"i8"],[6,"Zone",676],[15,"str"],[3,"DatagramIterator",20],[4,"Protocol",676],[15,"tuple"],[4,"Result",882],[3,"TypeId",883],[3,"DCArrayType",87],[3,"DCTypeDefinition",557],[4,"Option",884],[3,"DCNumericRange",485],[3,"DCParameter",535],[3,"DCAtomicField",108],[3,"Formatter",885],[6,"Result",885],[15,"usize"],[3,"Mutex",886],[3,"Arc",887],[3,"DClass",343],[3,"DCField",128],[4,"ClassField",128],[4,"StructField",128],[6,"FieldId",676],[3,"DCStruct",545],[3,"DCFile",207],[3,"DCKeyword",275],[3,"DCImport",207],[6,"DClassId",676],[6,"DCFileHash",676],[3,"DCKeywordList",275],[6,"KeywordName2Keyword",275],[6,"HistoricalFlag",275],[4,"IdentifyKeyword",275],[4,"DCToken",375],[3,"Span",375],[3,"Lexer",375],[3,"DCMolecularField",476],[3,"DCNumber",557],[3,"DCNumericType",485],[4,"DCTypeEnum",557],[8,"Iterator",888],[19,"DCNumberValueUnion",557],[4,"DCNumberType",557],[3,"ProtocolIter",676],[4,"DgError",676],[4,"DCReadError",676],[8,"DCArrayTypeInterface",87],[8,"DCAtomicFieldInterface",108],[8,"DCFieldInterface",128],[8,"DCFileInterface",207],[8,"DCKeywordListInterface",275],[8,"DCKeywordInterface",275],[8,"DClassInterface",343],[8,"DCNumericTypeInterface",485],[8,"DCTypeDefinitionInterface",557]],"b":[]}\ }'); if (typeof window !== 'undefined' && window.initSearch) {window.initSearch(searchIndex)}; if (typeof exports !== 'undefined') {exports.searchIndex = searchIndex}; diff --git a/docs/src-files.js b/docs/src-files.js index 21d5f15..ed8c650 100644 --- a/docs/src-files.js +++ b/docs/src-files.js @@ -1,4 +1,4 @@ var srcIndex = JSON.parse('{\ -"libdonet":["",[],["byte_order.rs","datagram.rs","dcarray.rs","dcfield.rs","dcfile.rs","dckeyword.rs","dclass.rs","dclexer.rs","dcnumeric.rs","dcparser.rs","dcstruct.rs","dctype.rs","globals.rs","hashgen.rs","lib.rs"]]\ +"libdonet":["",[],["byte_order.rs","datagram.rs","dcarray.rs","dcatomic.rs","dcfield.rs","dcfile.rs","dckeyword.rs","dclass.rs","dclexer.rs","dcmolecular.rs","dcnumeric.rs","dcparameter.rs","dcparser.rs","dcstruct.rs","dctype.rs","globals.rs","hashgen.rs","lib.rs"]]\ }'); createSrcSidebar(); diff --git a/docs/src/libdonet/datagram.rs.html b/docs/src/libdonet/datagram.rs.html index ffa7f56..0ae5302 100644 --- a/docs/src/libdonet/datagram.rs.html +++ b/docs/src/libdonet/datagram.rs.html @@ -758,6 +758,9 @@ 756 757 758 +759 +760 +761
    // DONET SOFTWARE
     // Copyright (c) 2024, Donet Authors.
     //
    @@ -775,6 +778,9 @@
     // along with this program; if not, write to the Free Software Foundation,
     // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
     
    +//! Provides structures to write network datagrams and tools
    +//! for iterating over datagram data.
    +
     use crate::byte_order as endianness;
     use crate::globals;
     use std::mem;
    @@ -800,7 +806,7 @@
             }
         }
     
    -    // Checks if we can add `length` number of bytes to the datagram.
    +    /// Checks if we can add `length` number of bytes to the datagram.
         fn check_add_length(&mut self, length: globals::DgSizeTag) -> globals::DgResult {
             let new_index: usize = self.index + usize::from(length);
     
    @@ -811,8 +817,8 @@
             Ok(())
         }
     
    -    // Adds an unsigned 8-bit integer to the datagram that is
    -    // guaranteed to be one of the values 0x00 (false) or 0x01 (true).
    +    /// Adds an unsigned 8-bit integer to the datagram that is
    +    /// guaranteed to be one of the values 0x00 (false) or 0x01 (true).
         pub fn add_bool(&mut self, v: bool) -> globals::DgResult {
             self.check_add_length(1)?;
             if v {
    @@ -823,7 +829,7 @@
             Ok(())
         }
     
    -    // Adds an unsigned 8-bit integer value to the datagram.
    +    /// Adds an unsigned 8-bit integer value to the datagram.
         pub fn add_u8(&mut self, v: u8) -> globals::DgResult {
             self.check_add_length(1)?;
             self.buffer.push(v);
    @@ -886,45 +892,45 @@
             self.add_u64(v as u64)
         }
     
    -    // 32-bit IEEE 754 floating point. same bitwise operations.
    +    /// 32-bit IEEE 754 floating point. same bitwise operations.
         pub fn add_f32(&mut self, v: f32) -> globals::DgResult {
             self.add_u32(v as u32)
         }
     
    -    // 64-bit IEEE 754 floating point. same bitwise operations.
    +    /// 64-bit IEEE 754 floating point. same bitwise operations.
         pub fn add_f64(&mut self, v: f64) -> globals::DgResult {
             self.add_u64(v as u64)
         }
     
    -    // Adds a Datagram / Field length tag to the end of the datagram.
    +    /// Adds a Datagram / Field length tag to the end of the datagram.
         pub fn add_size(&mut self, v: globals::DgSizeTag) -> globals::DgResult {
             self.add_u16(v)
         }
     
    -    // Adds a 64-bit channel ID to the end of the datagram.
    +    /// Adds a 64-bit channel ID to the end of the datagram.
         pub fn add_channel(&mut self, v: globals::Channel) -> globals::DgResult {
             self.add_u64(v)
         }
     
    -    // Adds a 32-bit Distributed Object ID to the end of the datagram.
    +    /// Adds a 32-bit Distributed Object ID to the end of the datagram.
         pub fn add_doid(&mut self, v: globals::DoId) -> globals::DgResult {
             self.add_u32(v)
         }
     
    -    // Adds a 32-bit zone ID to the end of the datagram.
    +    /// Adds a 32-bit zone ID to the end of the datagram.
         pub fn add_zone(&mut self, v: globals::Zone) -> globals::DgResult {
             self.add_u32(v)
         }
     
    -    // Added for convenience, but also better performance
    -    // than adding the parent and the zone separately.
    +    /// Added for convenience, but also better performance
    +    /// than adding the parent and the zone separately.
         pub fn add_location(&mut self, parent: globals::DoId, zone: globals::Zone) -> globals::DgResult {
             self.add_u32(parent)?;
             self.add_u32(zone)
         }
     
    -    // Adds raw bytes to the datagram via an unsigned 8-bit integer vector.
    -    // NOTE: not to be confused with add_blob(), which adds a dclass blob to the datagram.
    +    /// Adds raw bytes to the datagram via an unsigned 8-bit integer vector.
    +    /// NOTE: not to be confused with add_blob(), which adds a dclass blob to the datagram.
         pub fn add_data(&mut self, mut v: Vec<u8>) -> globals::DgResult {
             if v.len() > globals::DG_SIZE_MAX.into() {
                 // check input to avoid panic at .try_into() below
    @@ -936,7 +942,7 @@
             Ok(())
         }
     
    -    // Appends another datagram's binary data to this datagram.
    +    /// Appends another datagram's binary data to this datagram.
         pub fn add_datagram(&mut self, dg: &mut Datagram) -> globals::DgResult {
             let dg_buffer: Vec<u8> = dg.get_data();
     
    @@ -949,8 +955,8 @@
             self.add_data(dg_buffer)
         }
     
    -    // Adds a dclass string value to the end of the datagram.
    -    // A 16-bit length tag prefix with the string's size in bytes is added.
    +    /// Adds a dclass string value to the end of the datagram.
    +    /// A 16-bit length tag prefix with the string's size in bytes is added.
         pub fn add_string(&mut self, v: &str) -> globals::DgResult {
             if v.len() > globals::DG_SIZE_MAX.into() {
                 // The string is too big to be described with a 16-bit length tag.
    @@ -969,8 +975,8 @@
             Ok(())
         }
     
    -    // Adds a dclass blob value (binary data) to the end of the datagram.
    -    // A 16-bit length tag prefix with the blob's size in bytes is added.
    +    /// Adds a dclass blob value (binary data) to the end of the datagram.
    +    /// A 16-bit length tag prefix with the blob's size in bytes is added.
         pub fn add_blob(&mut self, mut v: Vec<u8>) -> globals::DgResult {
             // add blob size in bytes
             self.add_size(v.len().try_into().unwrap())?;
    @@ -981,7 +987,7 @@
             Ok(())
         }
     
    -    // Reserves an amount of bytes in the datagram buffer.
    +    /// Reserves an amount of bytes in the datagram buffer.
         pub fn add_buffer(&mut self, bytes: globals::DgSizeTag) -> globals::DgBufferResult {
             self.check_add_length(bytes)?;
             // get start length (before push)
    @@ -993,13 +999,13 @@
             Ok(start)
         }
     
    -    // Appends a generic header for messages that are to be routed to
    -    // one or more role instances within the server cluster.
    -    // Use this method to avoid repetitive code for every internal message.
    -    //
    -    // The header is formatted as shown below:
    -    //     (recipients: u8, recipients: Vec<Channel>, sender: Channel, message_type: u16)
    -    //
    +    /// Appends a generic header for messages that are to be routed to
    +    /// one or more role instances within the server cluster.
    +    /// Use this method to avoid repetitive code for every internal message.
    +    ///
    +    /// The header is formatted as shown below:
    +    ///     (recipients: u8, recipients: Vec<Channel>, sender: Channel, message_type: u16)
    +    ///
         pub fn add_server_header(
             &mut self,
             to: Vec<globals::Channel>,
    @@ -1018,9 +1024,9 @@
             Ok(())
         }
     
    -    // Appends a control header, which is very similar to a server header,
    -    // but it always has only one recipient, which is the control channel,
    -    // and does not require a sender (or 'from') channel to be provided.
    +    /// Appends a control header, which is very similar to a server header,
    +    /// but it always has only one recipient, which is the control channel,
    +    /// and does not require a sender (or 'from') channel to be provided.
         pub fn add_control_header(&mut self, msg_type: globals::MsgType) -> globals::DgResult {
             self.add_u8(1)?;
             self.add_channel(globals::CONTROL_CHANNEL)?;
    @@ -1044,7 +1050,7 @@
         }
     }
     
    -// Utility for iterating value by value of a datagram message.
    +/// Utility for iterating value by value of a datagram message.
     pub struct DatagramIterator {
         datagram: Datagram,
         index: usize,
    @@ -1068,30 +1074,30 @@
             Ok(())
         }
     
    -    // Returns the value of `self.index` in bytes.
    +    /// Returns the value of `self.index` in bytes.
         pub fn tell(&mut self) -> globals::DgSizeTag {
             self.index as globals::DgSizeTag
         }
     
    -    // Manually sets the buffer_offset position.
    +    /// Manually sets the buffer_offset position.
         pub fn seek(&mut self, to: globals::DgSizeTag) {
             self.index = to as usize;
         }
     
    -    // Increments the buffer_offset by `bytes` length.
    -    // Returns DgError.DatagramIteratorEOF if it's past the end of the buffer.
    +    /// Increments the buffer_offset by `bytes` length.
    +    /// Returns DgError.DatagramIteratorEOF if it's past the end of the buffer.
         pub fn skip(&mut self, bytes: globals::DgSizeTag) -> globals::DgResult {
             self.check_read_length(bytes)?;
             self.index += bytes as usize;
             Ok(())
         }
     
    -    // Returns the number of unread bytes left in the datagram
    +    /// Returns the number of unread bytes left in the datagram
         pub fn get_remaining(&mut self) -> globals::DgSizeTag {
             self.datagram.size() - self.index as globals::DgSizeTag
         }
     
    -    // Reads the next number of bytes in the datagram.
    +    /// Reads the next number of bytes in the datagram.
         pub fn read_data(&mut self, bytes: globals::DgSizeTag) -> Vec<u8> {
             let data: Vec<u8> = self.datagram.get_data();
     
    @@ -1193,12 +1199,12 @@
             self.read_u64() as i64
         }
     
    -    // 32-bit IEEE 754 floating point in native endianness.
    +    /// 32-bit IEEE 754 floating point in native endianness.
         pub fn read_f32(&mut self) -> f32 {
             self.read_u32() as f32
         }
     
    -    // 64-bit IEEE 754 floating point in native endianness.
    +    /// 64-bit IEEE 754 floating point in native endianness.
         pub fn read_f64(&mut self) -> f64 {
             self.read_u64() as f64
         }
    @@ -1224,8 +1230,8 @@
             self.read_u32() as globals::Zone
         }
     
    -    // Get the recipient count in a datagram message.
    -    // Does not advance the DatagramIterator index.
    +    /// Get the recipient count in a datagram message.
    +    /// Does not advance the DatagramIterator index.
         pub fn read_recipient_count(&mut self) -> u8 {
             if self.datagram.size() == 0 {
                 // FIXME: error!("Cannot read from an empty datagram!");
    @@ -1238,9 +1244,9 @@
             value
         }
     
    -    // Returns the datagram's message type. Does not advance the index.
    -    // Useful for if index needs to be saved or if next field isn't msg type.
    -    // If iterating through a fresh datagram, use read_u16.
    +    /// Returns the datagram's message type. Does not advance the index.
    +    /// Useful for if index needs to be saved or if next field isn't msg type.
    +    /// If iterating through a fresh datagram, use read_u16.
         pub fn read_msg_type(&mut self) -> globals::Protocol {
             let start_index: usize = self.index;
     
    diff --git a/docs/src/libdonet/dcarray.rs.html b/docs/src/libdonet/dcarray.rs.html
    index 985ce99..07fb383 100644
    --- a/docs/src/libdonet/dcarray.rs.html
    +++ b/docs/src/libdonet/dcarray.rs.html
    @@ -59,6 +59,80 @@
     57
     58
     59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +94
    +95
    +96
    +97
    +98
    +99
    +100
    +101
    +102
    +103
    +104
    +105
    +106
    +107
    +108
    +109
    +110
    +111
    +112
    +113
    +114
    +115
    +116
    +117
    +118
    +119
    +120
    +121
    +122
    +123
    +124
    +125
    +126
    +127
    +128
    +129
    +130
    +131
    +132
    +133
     
    // DONET SOFTWARE
     // Copyright (c) 2024, Donet Authors.
     //
    @@ -76,46 +150,120 @@
     // along with this program; if not, write to the Free Software Foundation,
     // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
     
    +//! Data model of the DC Array element, which is a parameter
    +//! type that stores a list of values of the same data type.
    +
     use crate::dcnumeric::DCNumericRange;
    -use crate::dctype::{DCTypeDefinition, DCTypeEnum};
    +use crate::dctype::{DCTypeDefinition, DCTypeDefinitionInterface, DCTypeEnum};
     use crate::hashgen::DCHashGenerator;
     
     pub struct DCArrayType {
    -    parent: DCTypeDefinition,
    -    element_type: DCTypeDefinition,
    -    size: usize,
    -    range: DCNumericRange,
    +    base_type: DCTypeDefinition,
    +    element_type: Option<DCTypeDefinition>,
    +    array_size: u16,
    +    array_range: Option<DCNumericRange>,
     }
     
     pub trait DCArrayTypeInterface {
    -    fn new(element_type: DCTypeEnum, range: Option<DCNumericRange>) -> DCArrayType;
    +    fn new(element_type: Option<DCTypeDefinition>, range: Option<DCNumericRange>) -> Self;
         fn generate_hash(&self, hashgen: &mut DCHashGenerator);
     
         fn has_range(&self) -> bool;
     
    -    fn get_range(&self) -> DCNumericRange;
    -    fn get_element_type(&self) -> DCTypeDefinition;
    -    fn get_array_size(&self) -> usize;
    +    fn get_range(&self) -> Option<DCNumericRange>;
    +    fn get_element_type(&self) -> Option<DCTypeDefinition>;
    +    fn get_array_size(&self) -> u16;
     }
     
     impl DCArrayTypeInterface for DCArrayType {
    -    fn new(element_type: DCTypeEnum, range: Option<DCNumericRange>) -> DCArrayType {
    -        todo!();
    +    fn new(element_type: Option<DCTypeDefinition>, size: Option<DCNumericRange>) -> Self {
    +        let mut new_array_type: Self = Self {
    +            base_type: DCTypeDefinition::new(),
    +            element_type: element_type,
    +            array_size: 0_u16,
    +            array_range: size,
    +        };
    +
    +        if new_array_type.array_range.is_none() {
    +            new_array_type.array_range = Some(DCNumericRange::new());
    +            let range: &mut DCNumericRange = new_array_type.array_range.as_mut().unwrap();
    +            range.min.value.unsigned_integer = 0_u64;
    +            range.max.value.unsigned_integer = u64::MAX;
    +        } else {
    +            let range: &mut DCNumericRange = new_array_type.array_range.as_mut().unwrap();
    +
    +            if range.min == range.max {
    +                // unsafe block required due to access of union data type
    +                unsafe {
    +                    new_array_type.array_size = range.min.value.unsigned_integer.try_into().unwrap();
    +                }
    +            }
    +        }
    +
    +        if new_array_type.element_type.is_some() {
    +            let e_type: DCTypeDefinition = new_array_type.element_type.clone().unwrap();
    +
    +            if !e_type.is_variable_length() && new_array_type.base_type.size > 0 {
    +                new_array_type.base_type.data_type = DCTypeEnum::TArray;
    +                new_array_type.base_type.size = new_array_type.array_size * e_type.get_size();
    +            } else {
    +                new_array_type.base_type.data_type = DCTypeEnum::TVarArray;
    +                new_array_type.base_type.size = 0_u16;
    +            }
    +
    +            match e_type.get_dc_type() {
    +                DCTypeEnum::TChar => {
    +                    if new_array_type.base_type.data_type == DCTypeEnum::TArray {
    +                        new_array_type.base_type.data_type = DCTypeEnum::TString;
    +                    } else {
    +                        new_array_type.base_type.data_type = DCTypeEnum::TVarString;
    +                    }
    +                }
    +                DCTypeEnum::TUInt8 => {
    +                    if new_array_type.base_type.data_type == DCTypeEnum::TArray {
    +                        new_array_type.base_type.data_type = DCTypeEnum::TBlob;
    +                    } else {
    +                        new_array_type.base_type.data_type = DCTypeEnum::TVarBlob;
    +                    }
    +                }
    +                _ => {}
    +            }
    +        }
    +        new_array_type
         }
    +
         fn generate_hash(&self, hashgen: &mut DCHashGenerator) {
    -        todo!();
    +        self.base_type.generate_hash(hashgen);
    +
    +        if let Some(element_type) = self.element_type.clone() {
    +            element_type.generate_hash(hashgen);
    +        } else {
    +            // Since we don't have an element type (representing
    +            // an 'invalid' element type, if comparing to Astron src)
    +            // we just make a new empty DCTypeDefinition, since that
    +            // is what Astron's DistributedType::invalid equals to.
    +            let empty_dc_type: DCTypeDefinition = DCTypeDefinition::new();
    +            empty_dc_type.generate_hash(hashgen);
    +        }
    +        if self.has_range() {
    +            // TODO!
    +            //hashgen.add_int(self.array_range.unwrap().min.value.integer)
    +        } else {
    +            hashgen.add_int(i32::from(self.array_size))
    +        }
         }
    -    fn get_array_size(&self) -> usize {
    -        self.size.clone()
    +
    +    fn get_array_size(&self) -> u16 {
    +        self.base_type.size
         }
    -    fn get_element_type(&self) -> DCTypeDefinition {
    +    fn get_element_type(&self) -> Option<DCTypeDefinition> {
             self.element_type.clone()
         }
    -    fn get_range(&self) -> DCNumericRange {
    -        self.range.clone()
    +    fn get_range(&self) -> Option<DCNumericRange> {
    +        self.array_range.clone()
         }
         fn has_range(&self) -> bool {
    -        todo!();
    +        self.array_range.is_some()
         }
     }
     
    \ No newline at end of file diff --git a/docs/src/libdonet/dcatomic.rs.html b/docs/src/libdonet/dcatomic.rs.html new file mode 100644 index 0000000..fc1352b --- /dev/null +++ b/docs/src/libdonet/dcatomic.rs.html @@ -0,0 +1,161 @@ +dcatomic.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +
    // DONET SOFTWARE
    +// Copyright (c) 2024, Donet Authors.
    +//
    +// This program is free software; you can redistribute it and/or modify
    +// it under the terms of the GNU Affero General Public License version 3.
    +// You should have received a copy of this license along
    +// with this source code in a file named "LICENSE."
    +//
    +// This program is distributed in the hope that it will be useful,
    +// but WITHOUT ANY WARRANTY; without even the implied warranty of
    +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    +// GNU General Public License for more details.
    +//
    +// You should have received a copy of the GNU Affero General Public License
    +// along with this program; if not, write to the Free Software Foundation,
    +// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
    +
    +//! Data model for a DC Atomic Field, which represents a remote
    +//! procedure call method of a Distributed Class.
    +
    +use crate::dcfield::{DCField, DCFieldInterface};
    +use crate::dclass::DClass;
    +use crate::dcparameter::DCParameter;
    +use crate::dctype::{DCTypeDefinition, DCTypeDefinitionInterface};
    +use crate::hashgen::DCHashGenerator;
    +use std::sync::{Arc, Mutex};
    +
    +/// Represents an atomic field of a Distributed Class.
    +/// This defines the interface to a DClass object, and is
    +/// always implemented as a remote procedure call (RPC).
    +#[derive(Debug)]
    +pub struct DCAtomicField {
    +    base_field: DCField,
    +    elements: Vec<Arc<Mutex<DCParameter>>>,
    +}
    +
    +pub trait DCAtomicFieldInterface {
    +    fn new(name: &str, dclass: Arc<Mutex<DClass>>, bogus_field: bool) -> Self;
    +    fn generate_hash(&self, hashgen: &mut DCHashGenerator);
    +
    +    fn get_num_elements(&self) -> usize;
    +    fn get_element(&self, index: usize) -> Option<Arc<Mutex<DCParameter>>>;
    +
    +    fn add_element(&mut self, element: DCParameter);
    +}
    +
    +impl DCAtomicFieldInterface for DCAtomicField {
    +    fn new(name: &str, dclass: Arc<Mutex<DClass>>, bogus_field: bool) -> Self {
    +        Self {
    +            base_field: {
    +                let mut new_dcfield = DCField::new(name, DCTypeDefinition::new());
    +                new_dcfield.set_parent_dclass(dclass);
    +                new_dcfield.set_bogus_field(bogus_field);
    +                new_dcfield
    +            },
    +            elements: vec![],
    +        }
    +    }
    +
    +    fn generate_hash(&self, hashgen: &mut DCHashGenerator) {
    +        self.base_field.generate_hash(hashgen);
    +        // TODO!
    +    }
    +
    +    fn get_num_elements(&self) -> usize {
    +        self.elements.len()
    +    }
    +
    +    fn get_element(&self, index: usize) -> Option<Arc<Mutex<DCParameter>>> {
    +        match self.elements.get(index) {
    +            Some(pointer) => Some(pointer.clone()), // make a new rc pointer
    +            None => None,
    +        }
    +    }
    +
    +    fn add_element(&mut self, element: DCParameter) {
    +        self.elements.push(Arc::new(Mutex::new(element)));
    +    }
    +}
    +
    \ No newline at end of file diff --git a/docs/src/libdonet/dcfield.rs.html b/docs/src/libdonet/dcfield.rs.html index 12ca797..a07d388 100644 --- a/docs/src/libdonet/dcfield.rs.html +++ b/docs/src/libdonet/dcfield.rs.html @@ -64,6 +64,207 @@ 62 63 64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265

    // DONET SOFTWARE
     // Copyright (c) 2024, Donet Authors.
     //
    @@ -81,17 +282,31 @@
     // along with this program; if not, write to the Free Software Foundation,
     // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
     
    -use crate::dclass::DClass;
    +//! Base data model for DC Field elements. Alone, it represents
    +//! an attribute of a structure or Distributed Class.
    +
    +use crate::datagram::Datagram;
    +use crate::dcatomic::DCAtomicField;
    +use crate::dckeyword::{DCKeywordList, DCKeywordListInterface, IdentifyKeyword};
    +use crate::dclass::DClass;
    +use crate::dcmolecular::DCMolecularField;
     use crate::dcstruct::DCStruct;
    +use crate::dctype::{DCTypeDefinition, DCTypeDefinitionInterface};
     use crate::globals;
    -use std::sync::{Arc, Mutex}; // thread safe
    +use crate::hashgen::DCHashGenerator;
    +use std::sync::{Arc, Mutex};
     
    +/// A field of a Distributed Class. The DCField struct is a base for
    +/// struct and dclass fields. In the DC language, there are three types
    +/// of field declarations, which are: plain fields, atomic, and molecular.
     #[derive(Debug)]
     pub struct DCField {
    -    class: Option<Arc<Mutex<DClass>>>,
    -    _struct: Option<Arc<Mutex<DCStruct>>>,
    -    field_name: String,
    +    keyword_list: DCKeywordList,
    +    dclass: Option<Arc<Mutex<DClass>>>,
    +    _struct: Option<Arc<Mutex<DCStruct>>>, // needs '_' due to reserved keyword
    +    field_name: String,
         field_id: globals::FieldId,
    +    field_type: DCTypeDefinition,
         parent_is_dclass: bool,
         default_value_stale: bool,
         has_default_value: bool,
    @@ -99,33 +314,220 @@
         bogus_field: bool,
     }
     
    +/// Enumerator representing the 3 types of fields that inherit DC Field,
    +/// which can legally be declared within a Distributed Class.
    +///
    +/// Plain DC Fields represent a property, or member, of a structure
    +/// or class. DC fields have a data type assigned to them.
    +///
    +/// DC Atomic Fields represent a method of a Distributed Class, which
    +/// is always implemented as a remote procedure call (RPC). Unlike
    +/// attribute fields, atomic fields cannot be declared within structs.
    +///
    +/// DC Molecular Fields represent a collection of DC Attribute or
    +/// DC Atomic Fields as one field under one identifier. The parameters
    +/// of a molecular field are the parameters of all the fields it
    +/// represents, joined together in the order in which they were declared
    +/// when the molecular field was declared.
    +#[derive(Debug)]
    +pub enum ClassField {
    +    Field(DCField),
    +    Atomic(DCAtomicField),
    +    Molecular(DCMolecularField),
    +}
    +
    +/// A different enumerator representing DC Field types used
    +/// for DC Structs, since they cannot contain DC Atomic Fields.
    +#[derive(Debug)]
    +pub enum StructField {
    +    Field(DCField),
    +    Molecular(DCMolecularField),
    +}
    +
     pub trait DCFieldInterface {
    -    fn new(name: &str, id: globals::FieldId) -> Self;
    -    fn generate_hash(&mut self);
    +    fn new(name: &str, dtype: DCTypeDefinition) -> Self;
    +    fn generate_hash(&self, hashgen: &mut DCHashGenerator);
    +
    +    fn get_field_id(&self) -> globals::FieldId;
    +    fn get_dclass(&self) -> Arc<Mutex<DClass>>;
    +
         fn set_field_id(&mut self, id: globals::FieldId);
         fn set_field_name(&mut self, name: String);
    +    fn set_field_type(&mut self, dtype: DCTypeDefinition);
    +    fn set_default_value(&mut self, value: Vec<u8>);
    +    fn set_bogus_field(&mut self, is_bogus: bool);
    +
         fn set_parent_struct(&mut self, parent: Arc<Mutex<DCStruct>>);
         fn set_parent_dclass(&mut self, parent: Arc<Mutex<DClass>>);
    +
    +    fn has_default_value(&self) -> bool;
    +    fn validate_ranges(&self, packed_data: &Datagram) -> bool;
    +    fn is_bogus_field(&self) -> bool;
    +
    +    // Inline functions for Panda historical keywords
    +    fn is_required(&self) -> bool;
    +    fn is_broadcast(&self) -> bool;
    +    fn is_ram(&self) -> bool;
    +    fn is_db(&self) -> bool;
    +    fn is_clsend(&self) -> bool;
    +    fn is_clrecv(&self) -> bool;
    +    fn is_ownsend(&self) -> bool;
    +    fn is_ownrecv(&self) -> bool;
    +    fn is_airecv(&self) -> bool;
    +}
    +
    +impl DCField {
    +    fn refresh_default_value(&self) {
    +        todo!()
    +    }
    +}
    +
    +/// Macro for Panda historical keywords inline functions.
    +macro_rules! has_keyword {
    +    ($self:ident, $i:literal) => {
    +        $self
    +            .keyword_list
    +            .has_keyword(IdentifyKeyword::ByName($i.to_owned()))
    +    };
     }
     
     impl DCFieldInterface for DCField {
    -    fn new(name: &str, id: globals::FieldId) -> Self {
    -        todo!();
    +    fn new(name: &str, dtype: DCTypeDefinition) -> Self {
    +        Self {
    +            keyword_list: DCKeywordList::new(),
    +            dclass: None,
    +            _struct: None,
    +            field_name: name.to_owned(),
    +            field_id: 0_u16,
    +            field_type: dtype,
    +            parent_is_dclass: false,
    +            default_value_stale: false,
    +            has_default_value: false,
    +            default_value: vec![],
    +            bogus_field: false,
    +        }
    +    }
    +
    +    fn generate_hash(&self, hashgen: &mut DCHashGenerator) {
    +        self.keyword_list.generate_hash(hashgen);
    +        self.field_type.generate_hash(hashgen);
    +
    +        // It shouldn't be necessary to explicitly add the field ID
    +        // to the hash--this is computed based on the relative
    +        // position of this field with the other fields, so
    +        // adding it explicitly will be redundant.  However,
    +        // the field name is significant.
    +        hashgen.add_string(self.field_name.clone());
    +
    +        // The field ID is added to the hash here, since we need to ensure
    +        // the hash code comes out different in the DC_MULTIPLE_INHERITANCE case.
    +        if globals::DC_MULTIPLE_INHERITANCE {
    +            hashgen.add_int(i32::from(self.field_id));
    +        }
    +    }
    +
    +    #[inline(always)]
    +    fn get_field_id(&self) -> globals::FieldId {
    +        self.field_id
         }
    -    fn generate_hash(&mut self) {
    -        todo!();
    +
    +    fn get_dclass(&self) -> Arc<Mutex<DClass>> {
    +        assert!(self.parent_is_dclass);
    +        // clone option to unwrap w/o move, and clone Arc to return
    +        self.dclass.clone().unwrap().clone()
         }
    +
         fn set_field_id(&mut self, id: globals::FieldId) {
    -        todo!();
    +        self.field_id = id
         }
    +
         fn set_field_name(&mut self, name: String) {
    -        todo!();
    +        self.field_name = name
    +    }
    +
    +    fn set_field_type(&mut self, dtype: DCTypeDefinition) {
    +        self.field_type = dtype;
    +        self.has_default_value = false;
    +        self.default_value = vec![];
    +    }
    +
    +    fn set_default_value(&mut self, value: Vec<u8>) {
    +        self.default_value = value;
    +        self.has_default_value = true;
    +        self.default_value_stale = false;
    +    }
    +
    +    fn set_bogus_field(&mut self, is_bogus: bool) {
    +        self.bogus_field = is_bogus
         }
    +
         fn set_parent_struct(&mut self, parent: Arc<Mutex<DCStruct>>) {
    -        todo!();
    +        assert!(self.dclass.is_none());
    +        self._struct = Some(parent);
         }
    +
         fn set_parent_dclass(&mut self, parent: Arc<Mutex<DClass>>) {
    -        todo!();
    +        assert!(self._struct.is_none());
    +        self.dclass = Some(parent);
    +    }
    +
    +    #[inline(always)]
    +    fn has_default_value(&self) -> bool {
    +        self.has_default_value
    +    }
    +
    +    fn validate_ranges(&self, packed_data: &Datagram) -> bool {
    +        todo!()
    +    }
    +
    +    #[inline(always)]
    +    fn is_bogus_field(&self) -> bool {
    +        self.bogus_field
    +    }
    +
    +    #[inline(always)]
    +    fn is_required(&self) -> bool {
    +        has_keyword!(self, "required")
    +    }
    +
    +    #[inline(always)]
    +    fn is_broadcast(&self) -> bool {
    +        has_keyword!(self, "broadcast")
    +    }
    +
    +    #[inline(always)]
    +    fn is_ram(&self) -> bool {
    +        has_keyword!(self, "ram")
    +    }
    +
    +    #[inline(always)]
    +    fn is_db(&self) -> bool {
    +        has_keyword!(self, "db")
    +    }
    +
    +    #[inline(always)]
    +    fn is_clsend(&self) -> bool {
    +        has_keyword!(self, "clsend")
    +    }
    +
    +    #[inline(always)]
    +    fn is_clrecv(&self) -> bool {
    +        has_keyword!(self, "clrecv")
    +    }
    +
    +    #[inline(always)]
    +    fn is_ownsend(&self) -> bool {
    +        has_keyword!(self, "ownsend")
    +    }
    +
    +    #[inline(always)]
    +    fn is_ownrecv(&self) -> bool {
    +        has_keyword!(self, "ownrecv")
    +    }
    +
    +    #[inline(always)]
    +    fn is_airecv(&self) -> bool {
    +        has_keyword!(self, "airecv")
         }
     }
     
    \ No newline at end of file diff --git a/docs/src/libdonet/dcfile.rs.html b/docs/src/libdonet/dcfile.rs.html index 8d880b7..62177d1 100644 --- a/docs/src/libdonet/dcfile.rs.html +++ b/docs/src/libdonet/dcfile.rs.html @@ -221,6 +221,11 @@ 219 220 221 +222 +223 +224 +225 +226

    // DONET SOFTWARE
     // Copyright (c) 2024, Donet Authors.
     //
    @@ -238,6 +243,9 @@
     // along with this program; if not, write to the Free Software Foundation,
     // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
     
    +//! Root structure that stores the collection of DC elements
    +//! in memory. Provides functions for manipulating the tree.
    +
     use crate::dckeyword::DCKeyword;
     use crate::dclass::DClass;
     use crate::dcstruct::DCStruct;
    @@ -261,7 +269,10 @@
         }
     }
     
    -#[derive(Debug)]
    +/// Data model that provides a high level representation of a single,
    +/// or collection, of DC files and their elements such as class imports,
    +/// type definitions, structures, and Distributed Classes.
    +#[derive(Debug)]
     pub struct DCFile {
         structs: Vec<Mutex<DCStruct>>,
         dclasses: Vec<Mutex<DClass>>,
    @@ -323,24 +334,23 @@
     }
     
     impl DCFileInterface for DCFile {
    -    /* Returns a 32-bit hash index associated with this file.  This number is
    -     * guaranteed to be consistent if the contents of the file have not changed,
    -     * and it is very likely to be different if the contents of the file do change.
    -     */
    +    /// Returns a 32-bit hash index associated with this file.  This number is
    +    /// guaranteed to be consistent if the contents of the file have not changed,
    +    /// and it is very likely to be different if the contents of the file do change.
         fn get_hash(&mut self) -> globals::DCFileHash {
             let mut hashgen: DCHashGenerator = DCHashGenerator::new();
             self.generate_hash(&mut hashgen);
             hashgen.get_hash()
         }
     
    -    // Accumulates the elements of the DC file into the hash.
    +    /// Accumulates the elements of the DC file into the hash.
         fn generate_hash(&mut self, hashgen: &mut DCHashGenerator) {
             if globals::DC_VIRTUAL_INHERITANCE {
                 // Just to change the hash output in this case.
                 if globals::DC_SORT_INHERITANCE_BY_FILE {
    -                hashgen.add_int(1_u32);
    +                hashgen.add_int(1_i32);
                 } else {
    -                hashgen.add_int(2_u32);
    +                hashgen.add_int(2_i32);
                 }
             }
             hashgen.add_int(self.get_num_dclasses().try_into().unwrap());
    @@ -351,7 +361,7 @@
             }
         }
     
    -    // Returns a string with the hash as a pretty format hexadecimal.
    +    /// Returns a string with the hash as a pretty format hexadecimal.
         fn get_pretty_hash(&mut self) -> String {
             format!("0x{:0width$x}", self.get_hash(), width = 8) // 2 hex / byte = 8 hex
         }
    diff --git a/docs/src/libdonet/dckeyword.rs.html b/docs/src/libdonet/dckeyword.rs.html
    index ae8168d..ad6ec43 100644
    --- a/docs/src/libdonet/dckeyword.rs.html
    +++ b/docs/src/libdonet/dckeyword.rs.html
    @@ -62,6 +62,193 @@
     60
     61
     62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +94
    +95
    +96
    +97
    +98
    +99
    +100
    +101
    +102
    +103
    +104
    +105
    +106
    +107
    +108
    +109
    +110
    +111
    +112
    +113
    +114
    +115
    +116
    +117
    +118
    +119
    +120
    +121
    +122
    +123
    +124
    +125
    +126
    +127
    +128
    +129
    +130
    +131
    +132
    +133
    +134
    +135
    +136
    +137
    +138
    +139
    +140
    +141
    +142
    +143
    +144
    +145
    +146
    +147
    +148
    +149
    +150
    +151
    +152
    +153
    +154
    +155
    +156
    +157
    +158
    +159
    +160
    +161
    +162
    +163
    +164
    +165
    +166
    +167
    +168
    +169
    +170
    +171
    +172
    +173
    +174
    +175
    +176
    +177
    +178
    +179
    +180
    +181
    +182
    +183
    +184
    +185
    +186
    +187
    +188
    +189
    +190
    +191
    +192
    +193
    +194
    +195
    +196
    +197
    +198
    +199
    +200
    +201
    +202
    +203
    +204
    +205
    +206
    +207
    +208
    +209
    +210
    +211
    +212
    +213
    +214
    +215
    +216
    +217
    +218
    +219
    +220
    +221
    +222
    +223
    +224
    +225
    +226
    +227
    +228
    +229
    +230
    +231
    +232
    +233
    +234
    +235
    +236
    +237
    +238
    +239
    +240
    +241
    +242
    +243
    +244
    +245
    +246
    +247
    +248
    +249
     
    // DONET SOFTWARE
     // Copyright (c) 2024, Donet Authors.
     //
    @@ -79,39 +266,55 @@
     // along with this program; if not, write to the Free Software Foundation,
     // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
     
    -pub type HistoricalFlag = u16;
    +//! Representation of arbitrary and historical
    +//! keywords as defined in the DC file.
     
    -#[derive(Debug)]
    +use crate::hashgen::DCHashGenerator;
    +use multimap::MultiMap;
    +use std::ops::Deref;
    +use std::sync::{Arc, Mutex, MutexGuard};
    +
    +/// This is a flag bitmask for historical keywords.
    +/// Panda uses a C/C++ 'int' for this, which is stored
    +/// as 4 bytes in modern 32-bit and 64-bit C/C++ compilers.
    +pub type HistoricalFlag = i32;
    +
    +#[derive(Debug, PartialEq, Eq)]
     pub struct DCKeyword {
         name: String,
    -    /* This flag is only kept for historical reasons, so we can
    -     * preserve the DC file's hash code if no new flags are in use.
    -     */
    +    // This flag is only kept for historical reasons, so we can
    +    // preserve the DC file's hash code if no new flags are in use.
         historical_flag: HistoricalFlag,
     }
     
     pub trait DCKeywordInterface {
    -    fn new(name: String, historical_flag: Option<HistoricalFlag>) -> DCKeyword;
    +    fn new(name: String, historical_flag: Option<HistoricalFlag>) -> Self;
    +    fn generate_hash(&self, hashgen: &mut DCHashGenerator);
    +
         fn get_name(&self) -> String;
         fn get_historical_flag(&self) -> HistoricalFlag;
         fn clear_historical_flag(&mut self);
     }
     
     impl DCKeywordInterface for DCKeyword {
    -    fn new(name: String, historical_flag: Option<HistoricalFlag>) -> DCKeyword {
    +    fn new(name: String, historical_flag: Option<HistoricalFlag>) -> Self {
             if let Some(h_flag) = historical_flag {
    -            DCKeyword {
    +            Self {
                     name: name,
                     historical_flag: h_flag,
                 }
             } else {
    -            DCKeyword {
    +            Self {
                     name: name,
                     historical_flag: !0, // bitwise complement
                 }
             }
         }
     
    +    fn generate_hash(&self, hashgen: &mut DCHashGenerator) {
    +        hashgen.add_string(self.name.clone());
    +    }
    +
         fn get_name(&self) -> String {
             self.name.clone()
         }
    @@ -124,4 +327,175 @@
             self.historical_flag = !0;
         }
     }
    +
    +/// A map of key/value pairs mapping keyword names to DCKeyword struct pointers.
    +pub type KeywordName2Keyword = MultiMap<String, Arc<Mutex<DCKeyword>>>;
    +
    +/// Represents the two types of inputs that `DCKeywordList.has_keyword``
    +/// accepts for looking up a Keyword. In Panda and Astron, the
    +/// `has_keyword` method is overloaded instead.
    +pub enum IdentifyKeyword {
    +    ByStruct(DCKeyword),
    +    ByName(String),
    +}
    +
    +#[derive(Debug)]
    +pub struct DCKeywordList {
    +    keywords: Vec<Arc<Mutex<DCKeyword>>>,
    +    kw_name_2_keyword: KeywordName2Keyword,
    +    flags: HistoricalFlag,
    +}
    +
    +pub trait DCKeywordListInterface {
    +    fn new() -> Self;
    +    fn generate_hash(&self, hashgen: &mut DCHashGenerator);
    +
    +    fn add_keyword(&mut self, keyword: DCKeyword) -> Result<(), ()>;
    +    fn get_num_keywords(&self) -> usize;
    +
    +    fn has_keyword(&self, kw: IdentifyKeyword) -> bool;
    +
    +    fn get_keyword(&self, index: usize) -> Option<Arc<Mutex<DCKeyword>>>;
    +    fn get_keyword_by_name(&self, name: String) -> Option<Arc<Mutex<DCKeyword>>>;
    +    fn _get_keyword_list(&self) -> Vec<Arc<Mutex<DCKeyword>>>;
    +    fn _get_keywords_by_name_map(&self) -> KeywordName2Keyword;
    +
    +    fn compare_with(&self, target: &DCKeywordList) -> bool;
    +    fn copy_keywords(&mut self, target: &DCKeywordList);
    +    fn clear_keywords(&mut self);
    +}
    +
    +impl Default for DCKeywordList {
    +    fn default() -> Self {
    +        Self {
    +            keywords: vec![],
    +            kw_name_2_keyword: MultiMap::new(),
    +            flags: 0_i32,
    +        }
    +    }
    +}
    +
    +impl DCKeywordListInterface for DCKeywordList {
    +    fn new() -> Self {
    +        Self::default()
    +    }
    +
    +    fn generate_hash(&self, hashgen: &mut DCHashGenerator) {
    +        if self.flags != !0 {
    +            // All of the flags are historical flags only, so add just the flags
    +            // bitmask to keep the hash code the same as it has historically been.
    +            hashgen.add_int(self.flags);
    +        } else {
    +            hashgen.add_int(self.keywords.len().try_into().unwrap());
    +
    +            for kw_ptr in &self.keywords {
    +                // We sort of need to unravel our DCKeyword structures
    +                // from their Arc pointer and Mutex wrapper before comparing...
    +                let new_ptr: Arc<Mutex<DCKeyword>> = kw_ptr.clone();
    +                let mutex_ref: &Mutex<DCKeyword> = new_ptr.deref();
    +                let keyword: MutexGuard<'_, DCKeyword> = mutex_ref.lock().unwrap();
    +
    +                keyword.generate_hash(hashgen);
    +            }
    +        }
    +    }
    +
    +    fn add_keyword(&mut self, keyword: DCKeyword) -> Result<(), ()> {
    +        let kw_name: String = keyword.name.clone(); // avoid moving 'name'
    +
    +        if self.kw_name_2_keyword.get(&kw_name).is_some() {
    +            return Err(()); // keyword is already in our list!
    +        }
    +
    +        // Mixes the bitmask of this keyword into our KW list flags bitmask.
    +        self.flags |= keyword.get_historical_flag();
    +
    +        self.keywords.push(Arc::new(Mutex::new(keyword)));
    +        self.kw_name_2_keyword
    +            .insert(kw_name, self.keywords.last().unwrap().clone());
    +        Ok(())
    +    }
    +
    +    fn get_num_keywords(&self) -> usize {
    +        self.keywords.len()
    +    }
    +
    +    fn has_keyword(&self, kw: IdentifyKeyword) -> bool {
    +        match kw {
    +            IdentifyKeyword::ByName(kw_id) => self.get_keyword_by_name(kw_id).is_some(),
    +            IdentifyKeyword::ByStruct(kw_obj) => {
    +                for kw_ptr in &self.keywords {
    +                    let new_ptr: Arc<Mutex<DCKeyword>> = kw_ptr.clone();
    +                    let mutex_ref: &Mutex<DCKeyword> = new_ptr.deref();
    +                    let keyword: MutexGuard<'_, DCKeyword> = mutex_ref.lock().unwrap();
    +
    +                    if *keyword == kw_obj {
    +                        return true;
    +                    }
    +                }
    +                false // no match found :(
    +            }
    +        }
    +    }
    +
    +    fn get_keyword(&self, index: usize) -> Option<Arc<Mutex<DCKeyword>>> {
    +        match self.keywords.get(index) {
    +            Some(pointer) => Some(pointer.clone()), // make a new rc pointer
    +            None => None,
    +        }
    +    }
    +
    +    fn get_keyword_by_name(&self, name: String) -> Option<Arc<Mutex<DCKeyword>>> {
    +        match self.kw_name_2_keyword.get(&name) {
    +            Some(pointer) => Some(pointer.clone()),
    +            None => None,
    +        }
    +    }
    +
    +    /// Returns a clone of this object's keyword array.
    +    fn _get_keyword_list(&self) -> Vec<Arc<Mutex<DCKeyword>>> {
    +        self.keywords.clone()
    +    }
    +
    +    /// Returns a clone of this object's keyword name map.
    +    fn _get_keywords_by_name_map(&self) -> KeywordName2Keyword {
    +        self.kw_name_2_keyword.clone()
    +    }
    +
    +    /// Compares this Keyword List with another DCKeywordList object.
    +    fn compare_with(&self, target: &DCKeywordList) -> bool {
    +        let target_kw_map: KeywordName2Keyword = target._get_keywords_by_name_map();
    +
    +        // If our maps are different sizes, they are already not the same.
    +        if self.kw_name_2_keyword.len() != target_kw_map.len() {
    +            return false;
    +        }
    +
    +        // Since MultiMap does not implement the Eq trait,
    +        // we have to iterate through both maps and compare.
    +        for key in self.kw_name_2_keyword.keys() {
    +            if !target_kw_map.contains_key(key) {
    +                return false;
    +            }
    +        }
    +        true // no differences found
    +    }
    +
    +    /// Overwrites the DCKeywords of this list with the target's DCKeywords.
    +    fn copy_keywords(&mut self, target: &DCKeywordList) {
    +        let target_kw_array: Vec<Arc<Mutex<DCKeyword>>> = target._get_keyword_list();
    +        let target_kw_map: KeywordName2Keyword = target._get_keywords_by_name_map();
    +
    +        self.keywords = target_kw_array; // old vec will be dropped from memory
    +        self.kw_name_2_keyword = target_kw_map;
    +    }
    +
    +    /// Clears the DCKeywords array, keyword name map, and
    +    /// historical flags bitmask from this DCKeywordList struct.
    +    fn clear_keywords(&mut self) {
    +        self.keywords.clear();
    +        self.kw_name_2_keyword.clear();
    +        self.flags = 0_i32;
    +    }
    +}
     
    \ No newline at end of file diff --git a/docs/src/libdonet/dclass.rs.html b/docs/src/libdonet/dclass.rs.html index efa6401..8622f4f 100644 --- a/docs/src/libdonet/dclass.rs.html +++ b/docs/src/libdonet/dclass.rs.html @@ -109,6 +109,39 @@ 107 108 109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142

    // DONET SOFTWARE
     // Copyright (c) 2024, Donet Authors.
     //
    @@ -126,14 +159,19 @@
     // along with this program; if not, write to the Free Software Foundation,
     // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
     
    -use crate::dcfield::DCField;
    +//! Data model for Distributed Class definitions in the DC file.
    +//! Stores DC Fields and tracks class hierarchy.
    +
    +use crate::dcatomic::{DCAtomicField, DCAtomicFieldInterface};
    +use crate::dcfield::{ClassField, DCFieldInterface};
     use crate::globals;
     use crate::hashgen::DCHashGenerator;
     use multimap::MultiMap;
    -use std::sync::{Arc, Mutex};
    +use std::ops::Deref;
    +use std::sync::{Arc, Mutex, MutexGuard};
     
    -pub type FieldName2Field = MultiMap<String, Arc<Mutex<DCField>>>;
    -pub type FieldId2Field = MultiMap<globals::FieldId, Arc<Mutex<DCField>>>;
    +pub type FieldName2Field = MultiMap<String, Arc<Mutex<ClassField>>>;
    +pub type FieldId2Field = MultiMap<globals::FieldId, Arc<Mutex<ClassField>>>;
     
     #[derive(Debug)]
     pub struct DClass {
    @@ -141,11 +179,10 @@
         class_id: globals::DClassId,
         is_struct: bool,
         is_bogus_class: bool,
    -
         class_parents: Vec<Arc<Mutex<DClass>>>,
    -    constructor: Option<Arc<Mutex<DCField>>>,
    -    fields: Vec<Arc<Mutex<DCField>>>,
    -    inherited_fields: Vec<Arc<Mutex<DCField>>>,
    +    constructor: Option<Arc<Mutex<DCAtomicField>>>,
    +    fields: Vec<Arc<Mutex<ClassField>>>,
    +    inherited_fields: Vec<Arc<Mutex<ClassField>>>,
         field_name_2_field: FieldName2Field,
         field_id_2_field: FieldId2Field,
     }
    @@ -157,12 +194,12 @@
         fn set_parent(&mut self, parent: Arc<Mutex<DClass>>);
     
         fn get_name(&mut self) -> String;
    -    fn get_class_id(&mut self) -> globals::DClassId;
    -    fn set_class_id(&mut self, id: globals::DClassId);
    +    fn get_dclass_id(&mut self) -> globals::DClassId;
    +    fn set_dclass_id(&mut self, id: globals::DClassId);
         fn get_num_parents(&mut self) -> usize;
         fn get_parent(&mut self, index: usize) -> Option<Arc<Mutex<DClass>>>;
         fn has_constructor(&mut self) -> bool;
    -    fn get_constructor(&mut self) -> Option<Arc<Mutex<DCField>>>;
    +    fn get_constructor(&mut self) -> Option<Arc<Mutex<DCAtomicField>>>;
     }
     
     impl DClassInterface for DClass {
    @@ -182,8 +219,37 @@
         }
     
         fn generate_hash(&mut self, hashgen: &mut DCHashGenerator) {
    -        () // TODO: Implement once hash gen is written
    -    }
    +        hashgen.add_string(self.get_name());
    +        hashgen.add_int(self.get_num_parents().try_into().unwrap());
    +
    +        for parent_ptr in &self.class_parents {
    +            {
    +                let new_ptr: Arc<Mutex<DClass>> = parent_ptr.clone();
    +                let mut parent: MutexGuard<'_, DClass> = new_ptr.deref().lock().unwrap();
    +
    +                hashgen.add_int(i32::from(parent.get_dclass_id()));
    +            }
    +
    +            if let Some(constructor_ptr) = &self.constructor {
    +                let new_ptr: Arc<Mutex<DCAtomicField>> = constructor_ptr.clone();
    +                let atomic: MutexGuard<'_, DCAtomicField> = new_ptr.deref().lock().unwrap();
    +
    +                atomic.generate_hash(hashgen);
    +            }
    +        }
    +        hashgen.add_int(self.fields.len().try_into().unwrap());
    +
    +        for field_ptr in &self.fields {
    +            let new_ptr: Arc<Mutex<ClassField>> = field_ptr.clone();
    +            let field: MutexGuard<'_, ClassField> = new_ptr.deref().lock().unwrap();
    +
    +            match &field.deref() {
    +                ClassField::Field(field) => field.generate_hash(hashgen),
    +                ClassField::Atomic(atomic) => atomic.generate_hash(hashgen),
    +                ClassField::Molecular(_) => todo!(),
    +            }
    +        }
    +    }
     
         fn set_parent(&mut self, parent: Arc<Mutex<DClass>>) {
             self.class_parents.push(parent);
    @@ -193,11 +259,11 @@
             self.class_name.clone()
         }
     
    -    fn get_class_id(&mut self) -> globals::DClassId {
    +    fn get_dclass_id(&mut self) -> globals::DClassId {
             self.class_id
         }
     
    -    fn set_class_id(&mut self, id: globals::DClassId) {
    +    fn set_dclass_id(&mut self, id: globals::DClassId) {
             self.class_id = id;
         }
     
    @@ -214,7 +280,7 @@
             self.constructor.is_some()
         }
     
    -    fn get_constructor(&mut self) -> Option<Arc<Mutex<DCField>>> {
    +    fn get_constructor(&mut self) -> Option<Arc<Mutex<DCAtomicField>>> {
             self.constructor.clone()
         }
     }
    diff --git a/docs/src/libdonet/dclexer.rs.html b/docs/src/libdonet/dclexer.rs.html
    index b8719e5..c4497c0 100644
    --- a/docs/src/libdonet/dclexer.rs.html
    +++ b/docs/src/libdonet/dclexer.rs.html
    @@ -514,6 +514,10 @@
     512
     513
     514
    +515
    +516
    +517
    +518
     
    // DONET SOFTWARE
     // Copyright (c) 2024, Donet Authors.
     //
    @@ -531,6 +535,9 @@
     // along with this program; if not, write to the Free Software Foundation,
     // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
     
    +//! Definition of the Lexer machine to process raw DC file
    +//! string data into a stream of lexical tokens for the DC parser.
    +
     use crate::globals::{DC_VIEW_SUFFIXES, HISTORICAL_DC_KEYWORDS};
     use plex::lexer;
     
    @@ -658,7 +665,8 @@
         // Rust doesn't support lookahead/lookbehind regex, so for character literals
         // we match the entire ''x'' and extract the second (nth(1)) character.
         r#"'.'"# => (DCToken::CharacterLiteral(text.chars().nth(1).unwrap()), text),
    -    r#"\"[^\"]+\""# => (DCToken::StringLiteral(text.to_owned().replace('\"', "")), text),
    +    // Note that there is no need to escape double quotes in rust regex.
    +    r#""[^"]*""# => (DCToken::StringLiteral(text.to_owned().replace('\"', "")), text),
     
         // Signed/unsigned integer data types *could* be a single token,
         // but parsing is easier if they are all individual lexical tokens.
    @@ -725,7 +733,7 @@
         r#"\="# => (DCToken::Equals, text),
         r#"\:"# => (DCToken::Colon, text),
         r#"."# => {
    -        panic!("dclexer: Found an unexpected character: {}", text);
    +        panic!("dclexer: Found an unexpected character: '{}'", text);
         }
     }
     
    diff --git a/docs/src/libdonet/dcmolecular.rs.html b/docs/src/libdonet/dcmolecular.rs.html
    new file mode 100644
    index 0000000..0b5dfd5
    --- /dev/null
    +++ b/docs/src/libdonet/dcmolecular.rs.html
    @@ -0,0 +1,55 @@
    +dcmolecular.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +
    // DONET SOFTWARE
    +// Copyright (c) 2024, Donet Authors.
    +//
    +// This program is free software; you can redistribute it and/or modify
    +// it under the terms of the GNU Affero General Public License version 3.
    +// You should have received a copy of this license along
    +// with this source code in a file named "LICENSE."
    +//
    +// This program is distributed in the hope that it will be useful,
    +// but WITHOUT ANY WARRANTY; without even the implied warranty of
    +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    +// GNU General Public License for more details.
    +//
    +// You should have received a copy of the GNU Affero General Public License
    +// along with this program; if not, write to the Free Software Foundation,
    +// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
    +
    +//! Data model for a DC Molecular field, which represents
    +//! a form of a field 'alias' for a collection of fields.
    +
    +use crate::dcfield::DCField;
    +
    +#[derive(Debug)]
    +pub struct DCMolecularField {
    +    base_field: DCField,
    +}
    +
    \ No newline at end of file diff --git a/docs/src/libdonet/dcnumeric.rs.html b/docs/src/libdonet/dcnumeric.rs.html index 5a4a92d..7eed486 100644 --- a/docs/src/libdonet/dcnumeric.rs.html +++ b/docs/src/libdonet/dcnumeric.rs.html @@ -263,17 +263,6 @@ 261 262 263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274
    // DONET SOFTWARE
     // Copyright (c) 2024, Donet Authors.
     //
    @@ -291,24 +280,26 @@
     // along with this program; if not, write to the Free Software Foundation,
     // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
     
    +//! Structure representing data types supported in the DC
    +//! language and enforcing numeric limits through constraints.
    +
     use crate::datagram::{Datagram, DatagramIterator};
     use crate::dctype::*;
     use crate::hashgen::DCHashGenerator;
     use std::mem::size_of;
     
    -/* Numeric Range structs are used to represent a range of signed/unsigned
    - * integers or floating point numbers. Used for enforcing numeric limits
    - * withing constraints of array, string, or blob sized types.
    - */
    +/// Numeric Range structs are used to represent a range of signed/unsigned
    +/// integers or floating point numbers. Used for enforcing numeric limits
    +/// within constraints of array, string, or blob sized types.
     #[derive(Clone)]
     pub struct DCNumericRange {
         range_type: DCNumberType,
    -    min: DCNumber,
    -    max: DCNumber,
    +    pub min: DCNumber,
    +    pub max: DCNumber,
     }
     
     impl DCNumericRange {
    -    fn new() -> Self {
    +    pub fn new() -> Self {
             let mut default_min: DCNumber = DCNumber::new_floating_point(f64::NEG_INFINITY);
             let mut default_max: DCNumber = DCNumber::new_floating_point(f64::INFINITY);
     
    @@ -322,7 +313,7 @@
             }
         }
     
    -    fn new_integer_range(min: i64, max: i64) -> Self {
    +    pub fn new_integer_range(min: i64, max: i64) -> Self {
             Self {
                 range_type: DCNumberType::Int,
                 min: DCNumber::new_integer(min),
    @@ -330,7 +321,7 @@
             }
         }
     
    -    fn new_unsigned_integer_range(min: u64, max: u64) -> Self {
    +    pub fn new_unsigned_integer_range(min: u64, max: u64) -> Self {
             Self {
                 range_type: DCNumberType::UInt,
                 min: DCNumber::new_unsigned_integer(min),
    @@ -338,7 +329,7 @@
             }
         }
     
    -    fn new_floating_point_range(min: f64, max: f64) -> Self {
    +    pub fn new_floating_point_range(min: f64, max: f64) -> Self {
             Self {
                 range_type: DCNumberType::Float,
                 min: DCNumber::new_floating_point(min),
    @@ -346,7 +337,7 @@
             }
         }
     
    -    fn contains(&self, num: DCNumber) -> bool {
    +    pub fn contains(&self, num: DCNumber) -> bool {
             match self.min.number_type {
                 DCNumberType::None => true,
                 DCNumberType::Int => unsafe {
    @@ -368,7 +359,7 @@
             }
         }
     
    -    fn is_empty(&self) -> bool {
    +    pub fn is_empty(&self) -> bool {
             self.range_type.is_none() // using strum macro
         }
     }
    @@ -376,7 +367,7 @@
     // ---------- Numeric Type ---------- //
     
     pub struct DCNumericType {
    -    parent: DCTypeDefinition,
    +    base_type: DCTypeDefinition,
         divisor: u16,
         // These are the original range and modulus values from the file, unscaled by the divisor.
         orig_modulus: f64,
    @@ -387,7 +378,7 @@
     }
     
     pub trait DCNumericTypeInterface {
    -    fn new(base_type: DCTypeEnum) -> DCNumericType;
    +    fn new(base_type: DCTypeEnum) -> Self;
         fn generate_hash(&self, hashgen: &mut DCHashGenerator);
     
         fn has_modulus(&self) -> bool;
    @@ -408,7 +399,7 @@
         fn data_to_number(&self, data: Vec<u8>) -> (bool, DCNumber) {
             // NOTE: See 'Deref' trait implementation for 'DCNumericType' below
             // on how we're using self.parent.size as self.size.
    -        if self.size != data.len().try_into().unwrap() {
    +        if self.base_type.size != data.len().try_into().unwrap() {
                 return (false, DCNumber::new_integer(0_i64));
             }
     
    @@ -416,7 +407,7 @@
             let _ = dg.add_data(data);
             let mut dgi = DatagramIterator::new(dg);
     
    -        match self.data_type {
    +        match self.base_type.data_type {
                 DCTypeEnum::TInt8 => (true, DCNumber::new_integer(i64::from(dgi.read_i8()))),
                 DCTypeEnum::TInt16 => (true, DCNumber::new_integer(i64::from(dgi.read_i16()))),
                 DCTypeEnum::TInt32 => (true, DCNumber::new_integer(i64::from(dgi.read_i32()))),
    @@ -435,9 +426,9 @@
     }
     
     impl DCNumericTypeInterface for DCNumericType {
    -    fn new(base_type: DCTypeEnum) -> DCNumericType {
    -        DCNumericType {
    -            parent: {
    +    fn new(base_type: DCTypeEnum) -> Self {
    +        Self {
    +            base_type: {
                     let mut parent_struct = DCTypeDefinition::new();
                     parent_struct.data_type = base_type;
     
    @@ -478,8 +469,8 @@
         }
     
         fn generate_hash(&self, hashgen: &mut DCHashGenerator) {
    -        self.parent.generate_hash(hashgen);
    -        hashgen.add_int(u32::from(self.divisor));
    +        self.base_type.generate_hash(hashgen);
    +        hashgen.add_int(i32::from(self.divisor));
     
             if self.has_modulus() {
                 // unsafe block required for accessing unions
    @@ -502,10 +493,10 @@
             self.orig_range.is_empty()
         }
         fn get_divisor(&self) -> u16 {
    -        self.divisor.clone()
    +        self.divisor
         }
         fn get_modulus(&self) -> f64 {
    -        self.orig_modulus.clone()
    +        self.orig_modulus
         }
         fn get_range(&self) -> DCNumericRange {
             self.orig_range.clone()
    @@ -520,7 +511,7 @@
                 self.set_range(self.orig_range.clone())?;
             }
             if self.has_modulus() {
    -            self.set_modulus(self.orig_modulus.clone())?;
    +            self.set_modulus(self.orig_modulus)?;
             }
             Ok(())
         }
    @@ -535,17 +526,4 @@
             todo!();
         }
     }
    -
    -/* By manually implementing/overriding the standard
    - * library's 'Deref' trait of our 'child' struct, we
    - * can implicitly cast pointers to the parent struct,
    - * as pointers to the child struct, which gives us a
    - * nice 'cheat' for the feel of inheritance.
    - */
    -impl std::ops::Deref for DCNumericType {
    -    type Target = DCTypeDefinition;
    -    fn deref(&self) -> &Self::Target {
    -        &self.parent
    -    }
    -}
     
    \ No newline at end of file diff --git a/docs/src/libdonet/dcparameter.rs.html b/docs/src/libdonet/dcparameter.rs.html new file mode 100644 index 0000000..e4eceb3 --- /dev/null +++ b/docs/src/libdonet/dcparameter.rs.html @@ -0,0 +1,47 @@ +dcparameter.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +
    // DONET SOFTWARE
    +// Copyright (c) 2024, Donet Authors.
    +//
    +// This program is free software; you can redistribute it and/or modify
    +// it under the terms of the GNU Affero General Public License version 3.
    +// You should have received a copy of this license along
    +// with this source code in a file named "LICENSE."
    +//
    +// This program is distributed in the hope that it will be useful,
    +// but WITHOUT ANY WARRANTY; without even the implied warranty of
    +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    +// GNU General Public License for more details.
    +//
    +// You should have received a copy of the GNU Affero General Public License
    +// along with this program; if not, write to the Free Software Foundation,
    +// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
    +
    +//! Data model that represents a single parameter of an atomic
    +//! field, which together form a RPC method signature.
    +
    +#[derive(Debug)]
    +pub struct DCParameter {}
    +
    \ No newline at end of file diff --git a/docs/src/libdonet/dcparser.rs.html b/docs/src/libdonet/dcparser.rs.html index 047fa85..8a932e6 100644 --- a/docs/src/libdonet/dcparser.rs.html +++ b/docs/src/libdonet/dcparser.rs.html @@ -881,6 +881,16 @@ 879 880 881 +882 +883 +884 +885 +886 +887 +888 +889 +890 +891

    // DONET SOFTWARE
     // Copyright (c) 2024, Donet Authors.
     //
    @@ -898,12 +908,21 @@
     // along with this program; if not, write to the Free Software Foundation,
     // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
     
    -/* The following suppress linting warnings, which are okay to ignore
    +//! Definition of the DC language context free grammar for the
    +//! LALR(1) parser processing the stream of lexical tokens.
    +
    +/* The following suppress linting warnings, which are okay to ignore
      * as they go off in the parser grammar definitions, which we are writing
      * just as the plex crate readme says we should, so everything is okay.
      */
    -#![allow(clippy::type_complexity, clippy::redundant_field_names, clippy::ptr_arg)]
    -#![allow(clippy::redundant_closure_call, clippy::enum_variant_names)]
    +#![allow(
    +    clippy::type_complexity,
    +    clippy::redundant_field_names,
    +    clippy::ptr_arg,
    +    clippy::redundant_closure_call,
    +    clippy::enum_variant_names,
    +    clippy::let_unit_value
    +)]
     
     use crate::dcfile::{DCFile, DCFileInterface, DCImport};
     use crate::dckeyword;
    @@ -974,7 +993,7 @@
                             use dclass::DClassInterface;
     
                             let next_class_id: usize = dc_file.get_num_dclasses();
    -                        dclass.set_class_id(next_class_id.try_into().unwrap());
    +                        dclass.set_dclass_id(next_class_id.try_into().unwrap());
     
                             dc_file.add_dclass(dclass);
                         },
    @@ -1036,7 +1055,7 @@
     
                 // Handles e.g. "from module/AI/OV/UD import DistributedThing/AI/OV/UD"
                 if mvs_opt.is_some() {
    -                let mut c_symbol: String = class_symbols.get(0).unwrap().clone();
    +                let mut c_symbol: String = class_symbols.first().unwrap().clone();
     
                     result_vec.push(DCImport::new(m.clone(), vec![c_symbol]));
     
    @@ -1427,6 +1446,7 @@
         type_value: () {
             DecimalLiteral(_) => {},
             CharacterLiteral(_) => {},
    +        StringLiteral(_) => {},
             HexLiteral(_) => {},
             signed_integer[_] => {},
             array_value => {},
    diff --git a/docs/src/libdonet/dcstruct.rs.html b/docs/src/libdonet/dcstruct.rs.html
    index 8d8f426..ec3ef71 100644
    --- a/docs/src/libdonet/dcstruct.rs.html
    +++ b/docs/src/libdonet/dcstruct.rs.html
    @@ -25,6 +25,8 @@
     23
     24
     25
    +26
    +27
     
    // DONET SOFTWARE
     // Copyright (c) 2024, Donet Authors.
     //
    @@ -42,12 +44,14 @@
     // along with this program; if not, write to the Free Software Foundation,
     // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
     
    -#[derive(Debug, PartialEq)]
    +//! Data model representing a DC Struct element.
    +
    +#[derive(Debug, Default, PartialEq)]
     pub struct DCStruct {}
     
     impl DCStruct {
    -    pub fn new() -> DCStruct {
    -        DCStruct {}
    +    pub fn new() -> Self {
    +        Self::default()
         }
     }
     
    \ No newline at end of file diff --git a/docs/src/libdonet/dctype.rs.html b/docs/src/libdonet/dctype.rs.html index 11efe22..b8ec4d1 100644 --- a/docs/src/libdonet/dctype.rs.html +++ b/docs/src/libdonet/dctype.rs.html @@ -160,6 +160,28 @@ 158 159 160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182

    // DONET SOFTWARE
     // Copyright (c) 2024, Donet Authors.
     //
    @@ -177,6 +199,9 @@
     // along with this program; if not, write to the Free Software Foundation,
     // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
     
    +//! Represents all data types supported by the DC language
    +//! and developer-defined type alias definitions.
    +
     use crate::globals::DgSizeTag;
     use crate::hashgen::DCHashGenerator;
     use strum_macros::EnumIs;
    @@ -185,7 +210,7 @@
      * to keep compatibility with Astron's DC hash inputs.
      */
     #[repr(u8)] // 8-bit alignment, unsigned
    -#[derive(Clone)]
    +#[derive(Debug, Clone, PartialEq)]
     #[rustfmt::skip]
     pub enum DCTypeEnum {
         // Numeric Types
    @@ -205,7 +230,7 @@
         TInvalid = 21,
     }
     
    -#[derive(Clone)]
    +#[derive(Debug, Clone)]
     pub struct DCTypeDefinition {
         alias: Option<String>,
         pub data_type: DCTypeEnum,
    @@ -213,7 +238,7 @@
     }
     
     pub trait DCTypeDefinitionInterface {
    -    fn new() -> DCTypeDefinition;
    +    fn new() -> Self;
         fn generate_hash(&self, hashgen: &mut DCHashGenerator);
     
         fn get_dc_type(&self) -> DCTypeEnum;
    @@ -226,16 +251,18 @@
     }
     
     impl DCTypeDefinitionInterface for DCTypeDefinition {
    -    fn new() -> DCTypeDefinition {
    -        DCTypeDefinition {
    +    fn new() -> Self {
    +        Self {
                 alias: None,
                 data_type: DCTypeEnum::TInvalid,
                 size: 0_u16,
             }
         }
     
    -    fn generate_hash(&self, hashgen: &mut DCHashGenerator) {
    -        hashgen.add_int(u32::from(self.data_type.clone() as u8));
    +    /// Generates the hash for this DC Type element.
    +    fn generate_hash(&self, hashgen: &mut DCHashGenerator) {
    +        hashgen.add_int(i32::from(self.data_type.clone() as u8));
    +
             if self.alias.is_some() {
                 hashgen.add_string(self.alias.clone().unwrap())
             }
    @@ -245,15 +272,18 @@
             self.data_type.clone()
         }
     
    -    fn is_variable_length(&self) -> bool {
    +    #[inline(always)]
    +    fn is_variable_length(&self) -> bool {
             self.size == 0_u16
         }
     
    -    fn get_size(&self) -> DgSizeTag {
    -        self.size.clone()
    +    #[inline(always)]
    +    fn get_size(&self) -> DgSizeTag {
    +        self.size
         }
     
    -    fn has_alias(&self) -> bool {
    +    #[inline(always)]
    +    fn has_alias(&self) -> bool {
             self.alias.is_some()
         }
     
    @@ -273,7 +303,7 @@
     // ---------- DC Number ---------- //
     
     #[rustfmt::skip]
    -#[derive(Clone, EnumIs)]
    +#[derive(Clone, PartialEq, EnumIs)]
     pub enum DCNumberType {
         None = 0, Int, UInt, Float,
     }
    @@ -292,13 +322,27 @@
         pub value: DCNumberValueUnion,
     }
     
    -impl DCNumber {
    -    pub fn new() -> Self {
    +// We have to manually implement the 'PartialEq' trait
    +// due to the usage of a union data type.
    +impl PartialEq for DCNumber {
    +    fn eq(&self, rhs: &Self) -> bool {
    +        self.number_type == rhs.number_type
    +    }
    +}
    +
    +impl Default for DCNumber {
    +    fn default() -> Self {
             Self {
                 number_type: DCNumberType::None,
                 value: DCNumberValueUnion { integer: 0_i64 },
             }
         }
    +}
    +
    +impl DCNumber {
    +    pub fn new() -> Self {
    +        Self::default()
    +    }
         pub fn new_integer(num: i64) -> Self {
             Self {
                 number_type: DCNumberType::Int,
    diff --git a/docs/src/libdonet/globals.rs.html b/docs/src/libdonet/globals.rs.html
    index 2cb0789..26fc211 100644
    --- a/docs/src/libdonet/globals.rs.html
    +++ b/docs/src/libdonet/globals.rs.html
    @@ -435,7 +435,7 @@
             pub static DC_MULTIPLE_INHERITANCE: bool = true;
             pub static DC_VIRTUAL_INHERITANCE: bool = true;
             pub static DC_SORT_INHERITANCE_BY_FILE: bool = false;
    -        pub static MAX_PRIME_NUMBERS: u16 = 1000;
    +        pub static MAX_PRIME_NUMBERS: u16 = 10000;
     
             // DC Parser Return Types
             pub type ParseError = (Option<(DCToken, Span)>, &'static str);
    diff --git a/docs/src/libdonet/hashgen.rs.html b/docs/src/libdonet/hashgen.rs.html
    index 1db5308..4fb3e97 100644
    --- a/docs/src/libdonet/hashgen.rs.html
    +++ b/docs/src/libdonet/hashgen.rs.html
    @@ -119,6 +119,12 @@
     117
     118
     119
    +120
    +121
    +122
    +123
    +124
    +125
     
    // DONET SOFTWARE
     // Copyright (c) 2024, Donet Authors.
     //
    @@ -143,7 +149,7 @@
     }
     
     pub struct DCHashGenerator {
    -    hash: DCFileHash,
    +    hash: i32,
         index: u16,
         primes: PrimeNumberGenerator,
     }
    @@ -182,36 +188,42 @@
         }
     }
     
    -impl DCHashGenerator {
    -    pub fn new() -> DCHashGenerator {
    -        DCHashGenerator {
    -            hash: 0_u32,
    +impl Default for DCHashGenerator {
    +    fn default() -> Self {
    +        Self {
    +            hash: 0_i32,
                 index: 0_u16,
                 primes: PrimeNumberGenerator::new(),
             }
         }
    -    // Adds another integer to the hash so far.
    -    pub fn add_int(&mut self, number: u32) {
    +}
    +
    +impl DCHashGenerator {
    +    pub fn new() -> Self {
    +        Self::default()
    +    }
    +    /// Adds another integer to the hash so far.
    +    pub fn add_int(&mut self, number: i32) {
             assert!(self.index < MAX_PRIME_NUMBERS);
    -        self.hash += u32::from(self.primes.get_prime(self.index)) * number;
    +        self.hash += i32::from(self.primes.get_prime(self.index)) * number;
             self.index = (self.index + 1) % MAX_PRIME_NUMBERS;
         }
     
    -    // Adds a blob to the hash, by breaking it down into a sequence of integers.
    +    /// Adds a blob to the hash, by breaking it down into a sequence of integers.
         pub fn add_blob(&mut self, blob: Vec<u8>) {
             self.add_int(blob.len().try_into().unwrap());
             for byte in blob.into_iter() {
    -            self.add_int(u32::from(byte));
    +            self.add_int(i32::from(byte));
             }
         }
    -    // Adds a string to the hash, by breaking it down into a sequence of integers.
    +    /// Adds a string to the hash, by breaking it down into a sequence of integers.
         pub fn add_string(&mut self, string: String) {
             self.add_blob(string.into_bytes());
         }
     
         pub const fn get_hash(&self) -> DCFileHash {
    -        self.hash & 0xffffffff
    -    }
    +        self.hash as u32
    +    }
     }
     
     #[cfg(test)]
    @@ -220,7 +232,7 @@
     
         #[test]
         fn prime_number_generator_integrity() {
    -        let mut pmg: PrimeNumberGenerator = PrimeNumberGenerator::new();
    +        let mut png: PrimeNumberGenerator = PrimeNumberGenerator::new();
     
             let prime_numbers: Vec<u16> = vec![
                 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97,
    @@ -234,7 +246,7 @@
             ];
     
             for (i, target_prime) in prime_numbers.into_iter().enumerate() {
    -            assert_eq!(target_prime, pmg.get_prime(i.try_into().unwrap()));
    +            assert_eq!(target_prime, png.get_prime(i.try_into().unwrap()));
             }
         }
     }
    diff --git a/docs/src/libdonet/lib.rs.html b/docs/src/libdonet/lib.rs.html
    index f6ce235..054d2e1 100644
    --- a/docs/src/libdonet/lib.rs.html
    +++ b/docs/src/libdonet/lib.rs.html
    @@ -168,6 +168,9 @@
     166
     167
     168
    +169
    +170
    +171
     
    //! DONET SOFTWARE
     //!
     //! Copyright (c) 2024, Donet Authors.
    @@ -229,12 +232,15 @@
     cfg_if! {
         if #[cfg(feature = "dcfile")] {
             pub mod dcarray;
    +        pub mod dcatomic;
             pub mod dcfield;
             pub mod dcfile;
             pub mod dckeyword;
             pub mod dclass;
             pub mod dclexer;
    +        pub mod dcmolecular;
             pub mod dcnumeric;
    +        pub mod dcparameter;
             pub mod dcparser;
             pub mod dcstruct;
             pub mod dctype;
    @@ -317,9 +323,9 @@
         for io_result in file_results {
             if let Ok(mut dcf) = io_result {
                 let res: std::io::Result<usize> = dcf.read_to_string(&mut lexer_input);
    -            if res.is_err() {
    +            if let Err(res_err) = res {
                     // DC file content may not be in proper UTF-8 encoding.
    -                return Err(globals::DCReadError::FileError(res.unwrap_err()));
    +                return Err(globals::DCReadError::FileError(res_err));
                 }
             } else {
                 // Failed to open one of the DC files. (most likely permission error)
    diff --git a/docs/trait.impl/core/clone/trait.Clone.js b/docs/trait.impl/core/clone/trait.Clone.js
    index 15cabb5..429b341 100644
    --- a/docs/trait.impl/core/clone/trait.Clone.js
    +++ b/docs/trait.impl/core/clone/trait.Clone.js
    @@ -1,3 +1,3 @@
     (function() {var implementors = {
    -"libdonet":[["impl Clone for DCToken"],["impl Clone for DCNumber"],["impl Clone for DCTypeDefinition"],["impl Clone for Protocol"],["impl Clone for DCNumberType"],["impl Clone for DCNumberValueUnion"],["impl Clone for DCNumericRange"],["impl Clone for ProtocolIter"],["impl Clone for Span"],["impl Clone for DCImport"],["impl Clone for DCTypeEnum"]]
    +"libdonet":[["impl Clone for DCNumericRange"],["impl Clone for DCNumberType"],["impl Clone for DCToken"],["impl Clone for Protocol"],["impl Clone for DCTypeEnum"],["impl Clone for ProtocolIter"],["impl Clone for DCNumberValueUnion"],["impl Clone for Span"],["impl Clone for DCImport"],["impl Clone for DCNumber"],["impl Clone for DCTypeDefinition"]]
     };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
    \ No newline at end of file
    diff --git a/docs/trait.impl/core/cmp/trait.Eq.js b/docs/trait.impl/core/cmp/trait.Eq.js
    new file mode 100644
    index 0000000..ccc4b7b
    --- /dev/null
    +++ b/docs/trait.impl/core/cmp/trait.Eq.js
    @@ -0,0 +1,3 @@
    +(function() {var implementors = {
    +"libdonet":[["impl Eq for DCKeyword"]]
    +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
    \ No newline at end of file
    diff --git a/docs/trait.impl/core/cmp/trait.PartialEq.js b/docs/trait.impl/core/cmp/trait.PartialEq.js
    index 8e1cff4..35df03a 100644
    --- a/docs/trait.impl/core/cmp/trait.PartialEq.js
    +++ b/docs/trait.impl/core/cmp/trait.PartialEq.js
    @@ -1,3 +1,3 @@
     (function() {var implementors = {
    -"libdonet":[["impl PartialEq for DCStruct"],["impl PartialEq for Protocol"],["impl PartialEq for DgError"],["impl PartialEq for DCToken"],["impl PartialEq for Span"]]
    +"libdonet":[["impl PartialEq for DCKeyword"],["impl PartialEq for Protocol"],["impl PartialEq for DCTypeEnum"],["impl PartialEq for DCNumberType"],["impl PartialEq for DgError"],["impl PartialEq for DCNumber"],["impl PartialEq for DCStruct"],["impl PartialEq for DCToken"],["impl PartialEq for Span"]]
     };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
    \ No newline at end of file
    diff --git a/docs/trait.impl/core/default/trait.Default.js b/docs/trait.impl/core/default/trait.Default.js
    index b39deac..d623bcc 100644
    --- a/docs/trait.impl/core/default/trait.Default.js
    +++ b/docs/trait.impl/core/default/trait.Default.js
    @@ -1,3 +1,3 @@
     (function() {var implementors = {
    -"libdonet":[["impl Default for Datagram"]]
    +"libdonet":[["impl Default for DCKeywordList"],["impl Default for DCStruct"],["impl Default for Datagram"],["impl Default for DCNumber"]]
     };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
    \ No newline at end of file
    diff --git a/docs/trait.impl/core/fmt/trait.Debug.js b/docs/trait.impl/core/fmt/trait.Debug.js
    index 58bde16..fc761b3 100644
    --- a/docs/trait.impl/core/fmt/trait.Debug.js
    +++ b/docs/trait.impl/core/fmt/trait.Debug.js
    @@ -1,3 +1,3 @@
     (function() {var implementors = {
    -"libdonet":[["impl Debug for DCStruct"],["impl Debug for DCFile"],["impl Debug for DCToken"],["impl Debug for DCImport"],["impl Debug for DClass"],["impl Debug for DCKeyword"],["impl Debug for DCReadError"],["impl Debug for Protocol"],["impl Debug for ProtocolIter"],["impl Debug for Span"],["impl Debug for DCField"],["impl Debug for DgError"]]
    +"libdonet":[["impl Debug for DCKeywordList"],["impl Debug for DCStruct"],["impl Debug for StructField"],["impl Debug for DCFile"],["impl Debug for DCToken"],["impl Debug for DCMolecularField"],["impl Debug for DCImport"],["impl Debug for DCTypeEnum"],["impl Debug for DCTypeDefinition"],["impl Debug for DClass"],["impl Debug for DCParameter"],["impl Debug for DCReadError"],["impl Debug for DCKeyword"],["impl Debug for Protocol"],["impl Debug for DCField"],["impl Debug for ProtocolIter"],["impl Debug for DCAtomicField"],["impl Debug for ClassField"],["impl Debug for Span"],["impl Debug for DgError"]]
     };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
    \ No newline at end of file
    diff --git a/docs/trait.impl/core/marker/trait.Freeze.js b/docs/trait.impl/core/marker/trait.Freeze.js
    index 3fbdc73..beb408d 100644
    --- a/docs/trait.impl/core/marker/trait.Freeze.js
    +++ b/docs/trait.impl/core/marker/trait.Freeze.js
    @@ -1,3 +1,3 @@
     (function() {var implementors = {
    -"libdonet":[["impl Freeze for DCReadError",1,["libdonet::globals::DCReadError"]],["impl Freeze for DgError",1,["libdonet::globals::DgError"]],["impl Freeze for Protocol",1,["libdonet::globals::Protocol"]],["impl Freeze for ProtocolIter",1,["libdonet::globals::ProtocolIter"]],["impl Freeze for Datagram",1,["libdonet::datagram::Datagram"]],["impl Freeze for DatagramIterator",1,["libdonet::datagram::DatagramIterator"]],["impl Freeze for DCArrayType",1,["libdonet::dcarray::DCArrayType"]],["impl Freeze for DCField",1,["libdonet::dcfield::DCField"]],["impl Freeze for DCImport",1,["libdonet::dcfile::DCImport"]],["impl Freeze for DCFile",1,["libdonet::dcfile::DCFile"]],["impl Freeze for DCKeyword",1,["libdonet::dckeyword::DCKeyword"]],["impl Freeze for DClass",1,["libdonet::dclass::DClass"]],["impl Freeze for DCToken",1,["libdonet::dclexer::DCToken"]],["impl<'a> Freeze for Lexer<'a>",1,["libdonet::dclexer::Lexer"]],["impl Freeze for Span",1,["libdonet::dclexer::Span"]],["impl Freeze for DCNumericRange",1,["libdonet::dcnumeric::DCNumericRange"]],["impl Freeze for DCNumericType",1,["libdonet::dcnumeric::DCNumericType"]],["impl Freeze for DCStruct",1,["libdonet::dcstruct::DCStruct"]],["impl Freeze for DCTypeEnum",1,["libdonet::dctype::DCTypeEnum"]],["impl Freeze for DCTypeDefinition",1,["libdonet::dctype::DCTypeDefinition"]],["impl Freeze for DCNumberType",1,["libdonet::dctype::DCNumberType"]],["impl Freeze for DCNumberValueUnion",1,["libdonet::dctype::DCNumberValueUnion"]],["impl Freeze for DCNumber",1,["libdonet::dctype::DCNumber"]]]
    +"libdonet":[["impl Freeze for DCReadError",1,["libdonet::globals::DCReadError"]],["impl Freeze for DgError",1,["libdonet::globals::DgError"]],["impl Freeze for Protocol",1,["libdonet::globals::Protocol"]],["impl Freeze for ProtocolIter",1,["libdonet::globals::ProtocolIter"]],["impl Freeze for Datagram",1,["libdonet::datagram::Datagram"]],["impl Freeze for DatagramIterator",1,["libdonet::datagram::DatagramIterator"]],["impl Freeze for DCArrayType",1,["libdonet::dcarray::DCArrayType"]],["impl Freeze for DCAtomicField",1,["libdonet::dcatomic::DCAtomicField"]],["impl Freeze for DCField",1,["libdonet::dcfield::DCField"]],["impl Freeze for ClassField",1,["libdonet::dcfield::ClassField"]],["impl Freeze for StructField",1,["libdonet::dcfield::StructField"]],["impl Freeze for DCImport",1,["libdonet::dcfile::DCImport"]],["impl Freeze for DCFile",1,["libdonet::dcfile::DCFile"]],["impl Freeze for DCKeyword",1,["libdonet::dckeyword::DCKeyword"]],["impl Freeze for IdentifyKeyword",1,["libdonet::dckeyword::IdentifyKeyword"]],["impl Freeze for DCKeywordList",1,["libdonet::dckeyword::DCKeywordList"]],["impl Freeze for DClass",1,["libdonet::dclass::DClass"]],["impl Freeze for DCToken",1,["libdonet::dclexer::DCToken"]],["impl<'a> Freeze for Lexer<'a>",1,["libdonet::dclexer::Lexer"]],["impl Freeze for Span",1,["libdonet::dclexer::Span"]],["impl Freeze for DCMolecularField",1,["libdonet::dcmolecular::DCMolecularField"]],["impl Freeze for DCNumericRange",1,["libdonet::dcnumeric::DCNumericRange"]],["impl Freeze for DCNumericType",1,["libdonet::dcnumeric::DCNumericType"]],["impl Freeze for DCParameter",1,["libdonet::dcparameter::DCParameter"]],["impl Freeze for DCStruct",1,["libdonet::dcstruct::DCStruct"]],["impl Freeze for DCTypeEnum",1,["libdonet::dctype::DCTypeEnum"]],["impl Freeze for DCTypeDefinition",1,["libdonet::dctype::DCTypeDefinition"]],["impl Freeze for DCNumberType",1,["libdonet::dctype::DCNumberType"]],["impl Freeze for DCNumberValueUnion",1,["libdonet::dctype::DCNumberValueUnion"]],["impl Freeze for DCNumber",1,["libdonet::dctype::DCNumber"]]]
     };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
    \ No newline at end of file
    diff --git a/docs/trait.impl/core/marker/trait.Send.js b/docs/trait.impl/core/marker/trait.Send.js
    index 6531cbe..5d6486d 100644
    --- a/docs/trait.impl/core/marker/trait.Send.js
    +++ b/docs/trait.impl/core/marker/trait.Send.js
    @@ -1,3 +1,3 @@
     (function() {var implementors = {
    -"libdonet":[["impl Send for DCReadError",1,["libdonet::globals::DCReadError"]],["impl Send for DgError",1,["libdonet::globals::DgError"]],["impl Send for Protocol",1,["libdonet::globals::Protocol"]],["impl Send for ProtocolIter",1,["libdonet::globals::ProtocolIter"]],["impl Send for Datagram",1,["libdonet::datagram::Datagram"]],["impl Send for DatagramIterator",1,["libdonet::datagram::DatagramIterator"]],["impl Send for DCArrayType",1,["libdonet::dcarray::DCArrayType"]],["impl Send for DCField",1,["libdonet::dcfield::DCField"]],["impl Send for DCImport",1,["libdonet::dcfile::DCImport"]],["impl Send for DCFile",1,["libdonet::dcfile::DCFile"]],["impl Send for DCKeyword",1,["libdonet::dckeyword::DCKeyword"]],["impl Send for DClass",1,["libdonet::dclass::DClass"]],["impl Send for DCToken",1,["libdonet::dclexer::DCToken"]],["impl<'a> Send for Lexer<'a>",1,["libdonet::dclexer::Lexer"]],["impl Send for Span",1,["libdonet::dclexer::Span"]],["impl Send for DCNumericRange",1,["libdonet::dcnumeric::DCNumericRange"]],["impl Send for DCNumericType",1,["libdonet::dcnumeric::DCNumericType"]],["impl Send for DCStruct",1,["libdonet::dcstruct::DCStruct"]],["impl Send for DCTypeEnum",1,["libdonet::dctype::DCTypeEnum"]],["impl Send for DCTypeDefinition",1,["libdonet::dctype::DCTypeDefinition"]],["impl Send for DCNumberType",1,["libdonet::dctype::DCNumberType"]],["impl Send for DCNumberValueUnion",1,["libdonet::dctype::DCNumberValueUnion"]],["impl Send for DCNumber",1,["libdonet::dctype::DCNumber"]]]
    +"libdonet":[["impl Send for DCReadError",1,["libdonet::globals::DCReadError"]],["impl Send for DgError",1,["libdonet::globals::DgError"]],["impl Send for Protocol",1,["libdonet::globals::Protocol"]],["impl Send for ProtocolIter",1,["libdonet::globals::ProtocolIter"]],["impl Send for Datagram",1,["libdonet::datagram::Datagram"]],["impl Send for DatagramIterator",1,["libdonet::datagram::DatagramIterator"]],["impl Send for DCArrayType",1,["libdonet::dcarray::DCArrayType"]],["impl Send for DCAtomicField",1,["libdonet::dcatomic::DCAtomicField"]],["impl Send for DCField",1,["libdonet::dcfield::DCField"]],["impl Send for ClassField",1,["libdonet::dcfield::ClassField"]],["impl Send for StructField",1,["libdonet::dcfield::StructField"]],["impl Send for DCImport",1,["libdonet::dcfile::DCImport"]],["impl Send for DCFile",1,["libdonet::dcfile::DCFile"]],["impl Send for DCKeyword",1,["libdonet::dckeyword::DCKeyword"]],["impl Send for IdentifyKeyword",1,["libdonet::dckeyword::IdentifyKeyword"]],["impl Send for DCKeywordList",1,["libdonet::dckeyword::DCKeywordList"]],["impl Send for DClass",1,["libdonet::dclass::DClass"]],["impl Send for DCToken",1,["libdonet::dclexer::DCToken"]],["impl<'a> Send for Lexer<'a>",1,["libdonet::dclexer::Lexer"]],["impl Send for Span",1,["libdonet::dclexer::Span"]],["impl Send for DCMolecularField",1,["libdonet::dcmolecular::DCMolecularField"]],["impl Send for DCNumericRange",1,["libdonet::dcnumeric::DCNumericRange"]],["impl Send for DCNumericType",1,["libdonet::dcnumeric::DCNumericType"]],["impl Send for DCParameter",1,["libdonet::dcparameter::DCParameter"]],["impl Send for DCStruct",1,["libdonet::dcstruct::DCStruct"]],["impl Send for DCTypeEnum",1,["libdonet::dctype::DCTypeEnum"]],["impl Send for DCTypeDefinition",1,["libdonet::dctype::DCTypeDefinition"]],["impl Send for DCNumberType",1,["libdonet::dctype::DCNumberType"]],["impl Send for DCNumberValueUnion",1,["libdonet::dctype::DCNumberValueUnion"]],["impl Send for DCNumber",1,["libdonet::dctype::DCNumber"]]]
     };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
    \ No newline at end of file
    diff --git a/docs/trait.impl/core/marker/trait.StructuralEq.js b/docs/trait.impl/core/marker/trait.StructuralEq.js
    new file mode 100644
    index 0000000..30c0c6a
    --- /dev/null
    +++ b/docs/trait.impl/core/marker/trait.StructuralEq.js
    @@ -0,0 +1,3 @@
    +(function() {var implementors = {
    +"libdonet":[["impl StructuralEq for DCKeyword"]]
    +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
    \ No newline at end of file
    diff --git a/docs/trait.impl/core/marker/trait.StructuralPartialEq.js b/docs/trait.impl/core/marker/trait.StructuralPartialEq.js
    index 7c5b04e..be33dd5 100644
    --- a/docs/trait.impl/core/marker/trait.StructuralPartialEq.js
    +++ b/docs/trait.impl/core/marker/trait.StructuralPartialEq.js
    @@ -1,3 +1,3 @@
     (function() {var implementors = {
    -"libdonet":[["impl StructuralPartialEq for Span"],["impl StructuralPartialEq for Protocol"],["impl StructuralPartialEq for DCToken"],["impl StructuralPartialEq for DCStruct"],["impl StructuralPartialEq for DgError"]]
    +"libdonet":[["impl StructuralPartialEq for DCNumberType"],["impl StructuralPartialEq for DCStruct"],["impl StructuralPartialEq for DCTypeEnum"],["impl StructuralPartialEq for Span"],["impl StructuralPartialEq for DCKeyword"],["impl StructuralPartialEq for Protocol"],["impl StructuralPartialEq for DCToken"],["impl StructuralPartialEq for DgError"]]
     };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
    \ No newline at end of file
    diff --git a/docs/trait.impl/core/marker/trait.Sync.js b/docs/trait.impl/core/marker/trait.Sync.js
    index c389784..ff1318e 100644
    --- a/docs/trait.impl/core/marker/trait.Sync.js
    +++ b/docs/trait.impl/core/marker/trait.Sync.js
    @@ -1,3 +1,3 @@
     (function() {var implementors = {
    -"libdonet":[["impl Sync for DCReadError",1,["libdonet::globals::DCReadError"]],["impl Sync for DgError",1,["libdonet::globals::DgError"]],["impl Sync for Protocol",1,["libdonet::globals::Protocol"]],["impl Sync for ProtocolIter",1,["libdonet::globals::ProtocolIter"]],["impl Sync for Datagram",1,["libdonet::datagram::Datagram"]],["impl Sync for DatagramIterator",1,["libdonet::datagram::DatagramIterator"]],["impl Sync for DCArrayType",1,["libdonet::dcarray::DCArrayType"]],["impl Sync for DCField",1,["libdonet::dcfield::DCField"]],["impl Sync for DCImport",1,["libdonet::dcfile::DCImport"]],["impl Sync for DCFile",1,["libdonet::dcfile::DCFile"]],["impl Sync for DCKeyword",1,["libdonet::dckeyword::DCKeyword"]],["impl Sync for DClass",1,["libdonet::dclass::DClass"]],["impl Sync for DCToken",1,["libdonet::dclexer::DCToken"]],["impl<'a> Sync for Lexer<'a>",1,["libdonet::dclexer::Lexer"]],["impl Sync for Span",1,["libdonet::dclexer::Span"]],["impl Sync for DCNumericRange",1,["libdonet::dcnumeric::DCNumericRange"]],["impl Sync for DCNumericType",1,["libdonet::dcnumeric::DCNumericType"]],["impl Sync for DCStruct",1,["libdonet::dcstruct::DCStruct"]],["impl Sync for DCTypeEnum",1,["libdonet::dctype::DCTypeEnum"]],["impl Sync for DCTypeDefinition",1,["libdonet::dctype::DCTypeDefinition"]],["impl Sync for DCNumberType",1,["libdonet::dctype::DCNumberType"]],["impl Sync for DCNumberValueUnion",1,["libdonet::dctype::DCNumberValueUnion"]],["impl Sync for DCNumber",1,["libdonet::dctype::DCNumber"]]]
    +"libdonet":[["impl Sync for DCReadError",1,["libdonet::globals::DCReadError"]],["impl Sync for DgError",1,["libdonet::globals::DgError"]],["impl Sync for Protocol",1,["libdonet::globals::Protocol"]],["impl Sync for ProtocolIter",1,["libdonet::globals::ProtocolIter"]],["impl Sync for Datagram",1,["libdonet::datagram::Datagram"]],["impl Sync for DatagramIterator",1,["libdonet::datagram::DatagramIterator"]],["impl Sync for DCArrayType",1,["libdonet::dcarray::DCArrayType"]],["impl Sync for DCAtomicField",1,["libdonet::dcatomic::DCAtomicField"]],["impl Sync for DCField",1,["libdonet::dcfield::DCField"]],["impl Sync for ClassField",1,["libdonet::dcfield::ClassField"]],["impl Sync for StructField",1,["libdonet::dcfield::StructField"]],["impl Sync for DCImport",1,["libdonet::dcfile::DCImport"]],["impl Sync for DCFile",1,["libdonet::dcfile::DCFile"]],["impl Sync for DCKeyword",1,["libdonet::dckeyword::DCKeyword"]],["impl Sync for IdentifyKeyword",1,["libdonet::dckeyword::IdentifyKeyword"]],["impl Sync for DCKeywordList",1,["libdonet::dckeyword::DCKeywordList"]],["impl Sync for DClass",1,["libdonet::dclass::DClass"]],["impl Sync for DCToken",1,["libdonet::dclexer::DCToken"]],["impl<'a> Sync for Lexer<'a>",1,["libdonet::dclexer::Lexer"]],["impl Sync for Span",1,["libdonet::dclexer::Span"]],["impl Sync for DCMolecularField",1,["libdonet::dcmolecular::DCMolecularField"]],["impl Sync for DCNumericRange",1,["libdonet::dcnumeric::DCNumericRange"]],["impl Sync for DCNumericType",1,["libdonet::dcnumeric::DCNumericType"]],["impl Sync for DCParameter",1,["libdonet::dcparameter::DCParameter"]],["impl Sync for DCStruct",1,["libdonet::dcstruct::DCStruct"]],["impl Sync for DCTypeEnum",1,["libdonet::dctype::DCTypeEnum"]],["impl Sync for DCTypeDefinition",1,["libdonet::dctype::DCTypeDefinition"]],["impl Sync for DCNumberType",1,["libdonet::dctype::DCNumberType"]],["impl Sync for DCNumberValueUnion",1,["libdonet::dctype::DCNumberValueUnion"]],["impl Sync for DCNumber",1,["libdonet::dctype::DCNumber"]]]
     };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
    \ No newline at end of file
    diff --git a/docs/trait.impl/core/marker/trait.Unpin.js b/docs/trait.impl/core/marker/trait.Unpin.js
    index cefbbed..87a5134 100644
    --- a/docs/trait.impl/core/marker/trait.Unpin.js
    +++ b/docs/trait.impl/core/marker/trait.Unpin.js
    @@ -1,3 +1,3 @@
     (function() {var implementors = {
    -"libdonet":[["impl Unpin for DCReadError",1,["libdonet::globals::DCReadError"]],["impl Unpin for DgError",1,["libdonet::globals::DgError"]],["impl Unpin for Protocol",1,["libdonet::globals::Protocol"]],["impl Unpin for ProtocolIter",1,["libdonet::globals::ProtocolIter"]],["impl Unpin for Datagram",1,["libdonet::datagram::Datagram"]],["impl Unpin for DatagramIterator",1,["libdonet::datagram::DatagramIterator"]],["impl Unpin for DCArrayType",1,["libdonet::dcarray::DCArrayType"]],["impl Unpin for DCField",1,["libdonet::dcfield::DCField"]],["impl Unpin for DCImport",1,["libdonet::dcfile::DCImport"]],["impl Unpin for DCFile",1,["libdonet::dcfile::DCFile"]],["impl Unpin for DCKeyword",1,["libdonet::dckeyword::DCKeyword"]],["impl Unpin for DClass",1,["libdonet::dclass::DClass"]],["impl Unpin for DCToken",1,["libdonet::dclexer::DCToken"]],["impl<'a> Unpin for Lexer<'a>",1,["libdonet::dclexer::Lexer"]],["impl Unpin for Span",1,["libdonet::dclexer::Span"]],["impl Unpin for DCNumericRange",1,["libdonet::dcnumeric::DCNumericRange"]],["impl Unpin for DCNumericType",1,["libdonet::dcnumeric::DCNumericType"]],["impl Unpin for DCStruct",1,["libdonet::dcstruct::DCStruct"]],["impl Unpin for DCTypeEnum",1,["libdonet::dctype::DCTypeEnum"]],["impl Unpin for DCTypeDefinition",1,["libdonet::dctype::DCTypeDefinition"]],["impl Unpin for DCNumberType",1,["libdonet::dctype::DCNumberType"]],["impl Unpin for DCNumberValueUnion",1,["libdonet::dctype::DCNumberValueUnion"]],["impl Unpin for DCNumber",1,["libdonet::dctype::DCNumber"]]]
    +"libdonet":[["impl Unpin for DCReadError",1,["libdonet::globals::DCReadError"]],["impl Unpin for DgError",1,["libdonet::globals::DgError"]],["impl Unpin for Protocol",1,["libdonet::globals::Protocol"]],["impl Unpin for ProtocolIter",1,["libdonet::globals::ProtocolIter"]],["impl Unpin for Datagram",1,["libdonet::datagram::Datagram"]],["impl Unpin for DatagramIterator",1,["libdonet::datagram::DatagramIterator"]],["impl Unpin for DCArrayType",1,["libdonet::dcarray::DCArrayType"]],["impl Unpin for DCAtomicField",1,["libdonet::dcatomic::DCAtomicField"]],["impl Unpin for DCField",1,["libdonet::dcfield::DCField"]],["impl Unpin for ClassField",1,["libdonet::dcfield::ClassField"]],["impl Unpin for StructField",1,["libdonet::dcfield::StructField"]],["impl Unpin for DCImport",1,["libdonet::dcfile::DCImport"]],["impl Unpin for DCFile",1,["libdonet::dcfile::DCFile"]],["impl Unpin for DCKeyword",1,["libdonet::dckeyword::DCKeyword"]],["impl Unpin for IdentifyKeyword",1,["libdonet::dckeyword::IdentifyKeyword"]],["impl Unpin for DCKeywordList",1,["libdonet::dckeyword::DCKeywordList"]],["impl Unpin for DClass",1,["libdonet::dclass::DClass"]],["impl Unpin for DCToken",1,["libdonet::dclexer::DCToken"]],["impl<'a> Unpin for Lexer<'a>",1,["libdonet::dclexer::Lexer"]],["impl Unpin for Span",1,["libdonet::dclexer::Span"]],["impl Unpin for DCMolecularField",1,["libdonet::dcmolecular::DCMolecularField"]],["impl Unpin for DCNumericRange",1,["libdonet::dcnumeric::DCNumericRange"]],["impl Unpin for DCNumericType",1,["libdonet::dcnumeric::DCNumericType"]],["impl Unpin for DCParameter",1,["libdonet::dcparameter::DCParameter"]],["impl Unpin for DCStruct",1,["libdonet::dcstruct::DCStruct"]],["impl Unpin for DCTypeEnum",1,["libdonet::dctype::DCTypeEnum"]],["impl Unpin for DCTypeDefinition",1,["libdonet::dctype::DCTypeDefinition"]],["impl Unpin for DCNumberType",1,["libdonet::dctype::DCNumberType"]],["impl Unpin for DCNumberValueUnion",1,["libdonet::dctype::DCNumberValueUnion"]],["impl Unpin for DCNumber",1,["libdonet::dctype::DCNumber"]]]
     };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
    \ No newline at end of file
    diff --git a/docs/trait.impl/core/ops/deref/trait.Deref.js b/docs/trait.impl/core/ops/deref/trait.Deref.js
    deleted file mode 100644
    index 0d10cd6..0000000
    --- a/docs/trait.impl/core/ops/deref/trait.Deref.js
    +++ /dev/null
    @@ -1,3 +0,0 @@
    -(function() {var implementors = {
    -"libdonet":[["impl Deref for DCNumericType"]]
    -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
    \ No newline at end of file
    diff --git a/docs/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js b/docs/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js
    index dbf9a33..dee5ee1 100644
    --- a/docs/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js
    +++ b/docs/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js
    @@ -1,3 +1,3 @@
     (function() {var implementors = {
    -"libdonet":[["impl !RefUnwindSafe for DCReadError",1,["libdonet::globals::DCReadError"]],["impl RefUnwindSafe for DgError",1,["libdonet::globals::DgError"]],["impl RefUnwindSafe for Protocol",1,["libdonet::globals::Protocol"]],["impl RefUnwindSafe for ProtocolIter",1,["libdonet::globals::ProtocolIter"]],["impl RefUnwindSafe for Datagram",1,["libdonet::datagram::Datagram"]],["impl RefUnwindSafe for DatagramIterator",1,["libdonet::datagram::DatagramIterator"]],["impl RefUnwindSafe for DCArrayType",1,["libdonet::dcarray::DCArrayType"]],["impl RefUnwindSafe for DCField",1,["libdonet::dcfield::DCField"]],["impl RefUnwindSafe for DCImport",1,["libdonet::dcfile::DCImport"]],["impl RefUnwindSafe for DCFile",1,["libdonet::dcfile::DCFile"]],["impl RefUnwindSafe for DCKeyword",1,["libdonet::dckeyword::DCKeyword"]],["impl RefUnwindSafe for DClass",1,["libdonet::dclass::DClass"]],["impl RefUnwindSafe for DCToken",1,["libdonet::dclexer::DCToken"]],["impl<'a> RefUnwindSafe for Lexer<'a>",1,["libdonet::dclexer::Lexer"]],["impl RefUnwindSafe for Span",1,["libdonet::dclexer::Span"]],["impl RefUnwindSafe for DCNumericRange",1,["libdonet::dcnumeric::DCNumericRange"]],["impl RefUnwindSafe for DCNumericType",1,["libdonet::dcnumeric::DCNumericType"]],["impl RefUnwindSafe for DCStruct",1,["libdonet::dcstruct::DCStruct"]],["impl RefUnwindSafe for DCTypeEnum",1,["libdonet::dctype::DCTypeEnum"]],["impl RefUnwindSafe for DCTypeDefinition",1,["libdonet::dctype::DCTypeDefinition"]],["impl RefUnwindSafe for DCNumberType",1,["libdonet::dctype::DCNumberType"]],["impl RefUnwindSafe for DCNumberValueUnion",1,["libdonet::dctype::DCNumberValueUnion"]],["impl RefUnwindSafe for DCNumber",1,["libdonet::dctype::DCNumber"]]]
    +"libdonet":[["impl !RefUnwindSafe for DCReadError",1,["libdonet::globals::DCReadError"]],["impl RefUnwindSafe for DgError",1,["libdonet::globals::DgError"]],["impl RefUnwindSafe for Protocol",1,["libdonet::globals::Protocol"]],["impl RefUnwindSafe for ProtocolIter",1,["libdonet::globals::ProtocolIter"]],["impl RefUnwindSafe for Datagram",1,["libdonet::datagram::Datagram"]],["impl RefUnwindSafe for DatagramIterator",1,["libdonet::datagram::DatagramIterator"]],["impl RefUnwindSafe for DCArrayType",1,["libdonet::dcarray::DCArrayType"]],["impl RefUnwindSafe for DCAtomicField",1,["libdonet::dcatomic::DCAtomicField"]],["impl RefUnwindSafe for DCField",1,["libdonet::dcfield::DCField"]],["impl RefUnwindSafe for ClassField",1,["libdonet::dcfield::ClassField"]],["impl RefUnwindSafe for StructField",1,["libdonet::dcfield::StructField"]],["impl RefUnwindSafe for DCImport",1,["libdonet::dcfile::DCImport"]],["impl RefUnwindSafe for DCFile",1,["libdonet::dcfile::DCFile"]],["impl RefUnwindSafe for DCKeyword",1,["libdonet::dckeyword::DCKeyword"]],["impl RefUnwindSafe for IdentifyKeyword",1,["libdonet::dckeyword::IdentifyKeyword"]],["impl RefUnwindSafe for DCKeywordList",1,["libdonet::dckeyword::DCKeywordList"]],["impl RefUnwindSafe for DClass",1,["libdonet::dclass::DClass"]],["impl RefUnwindSafe for DCToken",1,["libdonet::dclexer::DCToken"]],["impl<'a> RefUnwindSafe for Lexer<'a>",1,["libdonet::dclexer::Lexer"]],["impl RefUnwindSafe for Span",1,["libdonet::dclexer::Span"]],["impl RefUnwindSafe for DCMolecularField",1,["libdonet::dcmolecular::DCMolecularField"]],["impl RefUnwindSafe for DCNumericRange",1,["libdonet::dcnumeric::DCNumericRange"]],["impl RefUnwindSafe for DCNumericType",1,["libdonet::dcnumeric::DCNumericType"]],["impl RefUnwindSafe for DCParameter",1,["libdonet::dcparameter::DCParameter"]],["impl RefUnwindSafe for DCStruct",1,["libdonet::dcstruct::DCStruct"]],["impl RefUnwindSafe for DCTypeEnum",1,["libdonet::dctype::DCTypeEnum"]],["impl RefUnwindSafe for DCTypeDefinition",1,["libdonet::dctype::DCTypeDefinition"]],["impl RefUnwindSafe for DCNumberType",1,["libdonet::dctype::DCNumberType"]],["impl RefUnwindSafe for DCNumberValueUnion",1,["libdonet::dctype::DCNumberValueUnion"]],["impl RefUnwindSafe for DCNumber",1,["libdonet::dctype::DCNumber"]]]
     };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
    \ No newline at end of file
    diff --git a/docs/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js b/docs/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js
    index bf0e648..c920425 100644
    --- a/docs/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js
    +++ b/docs/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js
    @@ -1,3 +1,3 @@
     (function() {var implementors = {
    -"libdonet":[["impl !UnwindSafe for DCReadError",1,["libdonet::globals::DCReadError"]],["impl UnwindSafe for DgError",1,["libdonet::globals::DgError"]],["impl UnwindSafe for Protocol",1,["libdonet::globals::Protocol"]],["impl UnwindSafe for ProtocolIter",1,["libdonet::globals::ProtocolIter"]],["impl UnwindSafe for Datagram",1,["libdonet::datagram::Datagram"]],["impl UnwindSafe for DatagramIterator",1,["libdonet::datagram::DatagramIterator"]],["impl UnwindSafe for DCArrayType",1,["libdonet::dcarray::DCArrayType"]],["impl UnwindSafe for DCField",1,["libdonet::dcfield::DCField"]],["impl UnwindSafe for DCImport",1,["libdonet::dcfile::DCImport"]],["impl UnwindSafe for DCFile",1,["libdonet::dcfile::DCFile"]],["impl UnwindSafe for DCKeyword",1,["libdonet::dckeyword::DCKeyword"]],["impl UnwindSafe for DClass",1,["libdonet::dclass::DClass"]],["impl UnwindSafe for DCToken",1,["libdonet::dclexer::DCToken"]],["impl<'a> UnwindSafe for Lexer<'a>",1,["libdonet::dclexer::Lexer"]],["impl UnwindSafe for Span",1,["libdonet::dclexer::Span"]],["impl UnwindSafe for DCNumericRange",1,["libdonet::dcnumeric::DCNumericRange"]],["impl UnwindSafe for DCNumericType",1,["libdonet::dcnumeric::DCNumericType"]],["impl UnwindSafe for DCStruct",1,["libdonet::dcstruct::DCStruct"]],["impl UnwindSafe for DCTypeEnum",1,["libdonet::dctype::DCTypeEnum"]],["impl UnwindSafe for DCTypeDefinition",1,["libdonet::dctype::DCTypeDefinition"]],["impl UnwindSafe for DCNumberType",1,["libdonet::dctype::DCNumberType"]],["impl UnwindSafe for DCNumberValueUnion",1,["libdonet::dctype::DCNumberValueUnion"]],["impl UnwindSafe for DCNumber",1,["libdonet::dctype::DCNumber"]]]
    +"libdonet":[["impl !UnwindSafe for DCReadError",1,["libdonet::globals::DCReadError"]],["impl UnwindSafe for DgError",1,["libdonet::globals::DgError"]],["impl UnwindSafe for Protocol",1,["libdonet::globals::Protocol"]],["impl UnwindSafe for ProtocolIter",1,["libdonet::globals::ProtocolIter"]],["impl UnwindSafe for Datagram",1,["libdonet::datagram::Datagram"]],["impl UnwindSafe for DatagramIterator",1,["libdonet::datagram::DatagramIterator"]],["impl UnwindSafe for DCArrayType",1,["libdonet::dcarray::DCArrayType"]],["impl UnwindSafe for DCAtomicField",1,["libdonet::dcatomic::DCAtomicField"]],["impl UnwindSafe for DCField",1,["libdonet::dcfield::DCField"]],["impl UnwindSafe for ClassField",1,["libdonet::dcfield::ClassField"]],["impl UnwindSafe for StructField",1,["libdonet::dcfield::StructField"]],["impl UnwindSafe for DCImport",1,["libdonet::dcfile::DCImport"]],["impl UnwindSafe for DCFile",1,["libdonet::dcfile::DCFile"]],["impl UnwindSafe for DCKeyword",1,["libdonet::dckeyword::DCKeyword"]],["impl UnwindSafe for IdentifyKeyword",1,["libdonet::dckeyword::IdentifyKeyword"]],["impl UnwindSafe for DCKeywordList",1,["libdonet::dckeyword::DCKeywordList"]],["impl UnwindSafe for DClass",1,["libdonet::dclass::DClass"]],["impl UnwindSafe for DCToken",1,["libdonet::dclexer::DCToken"]],["impl<'a> UnwindSafe for Lexer<'a>",1,["libdonet::dclexer::Lexer"]],["impl UnwindSafe for Span",1,["libdonet::dclexer::Span"]],["impl UnwindSafe for DCMolecularField",1,["libdonet::dcmolecular::DCMolecularField"]],["impl UnwindSafe for DCNumericRange",1,["libdonet::dcnumeric::DCNumericRange"]],["impl UnwindSafe for DCNumericType",1,["libdonet::dcnumeric::DCNumericType"]],["impl UnwindSafe for DCParameter",1,["libdonet::dcparameter::DCParameter"]],["impl UnwindSafe for DCStruct",1,["libdonet::dcstruct::DCStruct"]],["impl UnwindSafe for DCTypeEnum",1,["libdonet::dctype::DCTypeEnum"]],["impl UnwindSafe for DCTypeDefinition",1,["libdonet::dctype::DCTypeDefinition"]],["impl UnwindSafe for DCNumberType",1,["libdonet::dctype::DCNumberType"]],["impl UnwindSafe for DCNumberValueUnion",1,["libdonet::dctype::DCNumberValueUnion"]],["impl UnwindSafe for DCNumber",1,["libdonet::dctype::DCNumber"]]]
     };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
    \ No newline at end of file
    diff --git a/docs/trait.impl/libdonet/dcatomic/trait.DCAtomicFieldInterface.js b/docs/trait.impl/libdonet/dcatomic/trait.DCAtomicFieldInterface.js
    new file mode 100644
    index 0000000..45e99b1
    --- /dev/null
    +++ b/docs/trait.impl/libdonet/dcatomic/trait.DCAtomicFieldInterface.js
    @@ -0,0 +1,3 @@
    +(function() {var implementors = {
    +"libdonet":[]
    +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
    \ No newline at end of file
    diff --git a/docs/trait.impl/libdonet/dckeyword/trait.DCKeywordListInterface.js b/docs/trait.impl/libdonet/dckeyword/trait.DCKeywordListInterface.js
    new file mode 100644
    index 0000000..45e99b1
    --- /dev/null
    +++ b/docs/trait.impl/libdonet/dckeyword/trait.DCKeywordListInterface.js
    @@ -0,0 +1,3 @@
    +(function() {var implementors = {
    +"libdonet":[]
    +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
    \ No newline at end of file
    diff --git a/docs/type.impl/multimap/struct.MultiMap.js b/docs/type.impl/multimap/struct.MultiMap.js
    index e618e25..105d468 100644
    --- a/docs/type.impl/multimap/struct.MultiMap.js
    +++ b/docs/type.impl/multimap/struct.MultiMap.js
    @@ -1,3 +1,3 @@
     (function() {var type_impls = {
    -"libdonet":[["
    §

    impl<K, V> MultiMap<K, V>where\n K: Eq + Hash,

    pub fn new() -> MultiMap<K, V>

    Creates an empty MultiMap

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map: MultiMap<&str, isize> = MultiMap::new();
    \n

    pub fn with_capacity(capacity: usize) -> MultiMap<K, V>

    Creates an empty multimap with the given initial capacity.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map: MultiMap<&str, isize> = MultiMap::with_capacity(20);
    \n
    ",0,"libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<K, V, S> MultiMap<K, V, S>where\n K: Eq + Hash,\n S: BuildHasher,

    pub fn with_hasher(hash_builder: S) -> MultiMap<K, V, S>

    Creates an empty MultiMap which will use the given hash builder to hash keys.

    \n
    Examples
    \n
    use multimap::MultiMap;\nuse std::collections::hash_map::RandomState;\n\nlet s = RandomState::new();\nlet mut map: MultiMap<&str, isize> = MultiMap::with_hasher(s);
    \n

    pub fn with_capacity_and_hasher(\n capacity: usize,\n hash_builder: S\n) -> MultiMap<K, V, S>

    Creates an empty MultiMap with the given intial capacity and hash builder.

    \n
    Examples
    \n
    use multimap::MultiMap;\nuse std::collections::hash_map::RandomState;\n\nlet s = RandomState::new();\nlet mut map: MultiMap<&str, isize> = MultiMap::with_capacity_and_hasher(20, s);
    \n

    pub fn insert(&mut self, k: K, v: V)

    Inserts a key-value pair into the multimap. If the key does exist in\nthe map then the value is pushed to that key’s vector. If the key doesn’t\nexist in the map a new vector with the given value is inserted.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert("key", 42);
    \n

    pub fn insert_many<I>(&mut self, k: K, v: I)where\n I: IntoIterator<Item = V>,

    Inserts multiple key-value pairs into the multimap. If the key does exist in\nthe map then the values are extended into that key’s vector. If the key\ndoesn’t exist in the map a new vector collected from the given values is inserted.

    \n

    This may be more efficient than inserting values independently.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::<&str, &usize>::new();\nmap.insert_many("key", &[42, 43]);
    \n

    pub fn insert_many_from_slice(&mut self, k: K, v: &[V])where\n V: Clone,

    Inserts multiple key-value pairs into the multimap. If the key does exist in\nthe map then the values are extended into that key’s vector. If the key\ndoesn’t exist in the map a new vector collected from the given values is inserted.

    \n

    This may be more efficient than inserting values independently.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::<&str, usize>::new();\nmap.insert_many_from_slice("key", &[42, 43]);
    \n

    pub fn contains_key<Q>(&self, k: &Q) -> boolwhere\n K: Borrow<Q>,\n Q: Eq + Hash + ?Sized,

    Returns true if the map contains a value for the specified key.

    \n

    The key may be any borrowed form of the map’s key type, but Hash and Eq\non the borrowed form must match those for the key type.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1, 42);\nassert_eq!(map.contains_key(&1), true);\nassert_eq!(map.contains_key(&2), false);
    \n

    pub fn len(&self) -> usize

    Returns the number of elements in the map.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1, 42);\nmap.insert(2, 1337);\nassert_eq!(map.len(), 2);
    \n

    pub fn remove<Q>(&mut self, k: &Q) -> Option<Vec<V>>where\n K: Borrow<Q>,\n Q: Eq + Hash + ?Sized,

    Removes a key from the map, returning the vector of values at\nthe key if the key was previously in the map.

    \n

    The key may be any borrowed form of the map’s key type, but Hash and Eq\non the borrowed form must match those for the key type.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1, 42);\nmap.insert(1, 1337);\nassert_eq!(map.remove(&1), Some(vec![42, 1337]));\nassert_eq!(map.remove(&1), None);
    \n

    pub fn get<Q>(&self, k: &Q) -> Option<&V>where\n K: Borrow<Q>,\n Q: Eq + Hash + ?Sized,

    Returns a reference to the first item in the vector corresponding to\nthe key.

    \n

    The key may be any borrowed form of the map’s key type, but Hash and Eq\non the borrowed form must match those for the key type.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1, 42);\nmap.insert(1, 1337);\nassert_eq!(map.get(&1), Some(&42));
    \n

    pub fn get_mut<Q>(&mut self, k: &Q) -> Option<&mut V>where\n K: Borrow<Q>,\n Q: Eq + Hash + ?Sized,

    Returns a mutable reference to the first item in the vector corresponding to\nthe key.

    \n

    The key may be any borrowed form of the map’s key type, but Hash and Eq\non the borrowed form must match those for the key type.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1, 42);\nmap.insert(1, 1337);\nif let Some(v) = map.get_mut(&1) {\n    *v = 99;\n}\nassert_eq!(map[&1], 99);
    \n

    pub fn get_vec<Q>(&self, k: &Q) -> Option<&Vec<V>>where\n K: Borrow<Q>,\n Q: Eq + Hash + ?Sized,

    Returns a reference to the vector corresponding to the key.

    \n

    The key may be any borrowed form of the map’s key type, but Hash and Eq\non the borrowed form must match those for the key type.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1, 42);\nmap.insert(1, 1337);\nassert_eq!(map.get_vec(&1), Some(&vec![42, 1337]));
    \n

    pub fn get_vec_mut<Q>(&mut self, k: &Q) -> Option<&mut Vec<V>>where\n K: Borrow<Q>,\n Q: Eq + Hash + ?Sized,

    Returns a mutable reference to the vector corresponding to the key.

    \n

    The key may be any borrowed form of the map’s key type, but Hash and Eq\non the borrowed form must match those for the key type.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1, 42);\nmap.insert(1, 1337);\nif let Some(v) = map.get_vec_mut(&1) {\n    (*v)[0] = 1991;\n    (*v)[1] = 2332;\n}\nassert_eq!(map.get_vec(&1), Some(&vec![1991, 2332]));
    \n

    pub fn is_vec<Q>(&self, k: &Q) -> boolwhere\n K: Borrow<Q>,\n Q: Eq + Hash + ?Sized,

    Returns true if the key is multi-valued.

    \n

    The key may be any borrowed form of the map’s key type, but Hash and Eq\non the borrowed form must match those for the key type.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1, 42);\nmap.insert(1, 1337);\nmap.insert(2, 2332);\n\nassert_eq!(map.is_vec(&1), true);   // key is multi-valued\nassert_eq!(map.is_vec(&2), false);  // key is single-valued\nassert_eq!(map.is_vec(&3), false);  // key not in map
    \n

    pub fn capacity(&self) -> usize

    Returns the number of elements the map can hold without reallocating.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet map: MultiMap<usize, usize> = MultiMap::new();\nassert!(map.capacity() >= 0);
    \n

    pub fn is_empty(&self) -> bool

    Returns true if the map contains no elements.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nassert!(map.is_empty());\nmap.insert(1,42);\nassert!(!map.is_empty());
    \n

    pub fn clear(&mut self)

    Clears the map, removing all key-value pairs.\nKeeps the allocated memory for reuse.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1,42);\nmap.clear();\nassert!(map.is_empty());
    \n

    pub fn keys(&self) -> Keys<'_, K, Vec<V>>

    An iterator visiting all keys in arbitrary order.\nIterator element type is &’a K.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1,42);\nmap.insert(1,1337);\nmap.insert(2,1337);\nmap.insert(4,1991);\n\nlet mut keys: Vec<_> = map.keys().collect();\nkeys.sort();\nassert_eq!(keys, [&1, &2, &4]);
    \n

    pub fn iter(&self) -> Iter<'_, K, V>

    An iterator visiting all key-value pairs in arbitrary order. The iterator returns\na reference to the key and the first element in the corresponding key’s vector.\nIterator element type is (&’a K, &’a V).

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1,42);\nmap.insert(1,1337);\nmap.insert(3,2332);\nmap.insert(4,1991);\n\nlet mut pairs: Vec<_> = map.iter().collect();\npairs.sort_by_key(|p| p.0);\nassert_eq!(pairs, [(&1, &42), (&3, &2332), (&4, &1991)]);
    \n

    pub fn iter_mut(&mut self) -> IterMut<'_, K, V>

    An iterator visiting all key-value pairs in arbitrary order. The iterator returns\na reference to the key and a mutable reference to the first element in the\ncorresponding key’s vector. Iterator element type is (&’a K, &’a mut V).

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1,42);\nmap.insert(1,1337);\nmap.insert(3,2332);\nmap.insert(4,1991);\n\nfor (_, value) in map.iter_mut() {\n    *value *= *value;\n}\n\nlet mut pairs: Vec<_> = map.iter_mut().collect();\npairs.sort_by_key(|p| p.0);\nassert_eq!(pairs, [(&1, &mut 1764), (&3, &mut 5438224), (&4, &mut 3964081)]);
    \n

    pub fn iter_all(&self) -> Iter<'_, K, Vec<V>>

    An iterator visiting all key-value pairs in arbitrary order. The iterator returns\na reference to the key and the corresponding key’s vector.\nIterator element type is (&’a K, &’a V).

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1,42);\nmap.insert(1,1337);\nmap.insert(3,2332);\nmap.insert(4,1991);\n\nlet mut pairs: Vec<_> = map.iter_all().collect();\npairs.sort_by_key(|p| p.0);\nassert_eq!(pairs, [(&1, &vec![42, 1337]), (&3, &vec![2332]), (&4, &vec![1991])]);
    \n

    pub fn iter_all_mut(&mut self) -> IterMut<'_, K, Vec<V>>

    An iterator visiting all key-value pairs in arbitrary order. The iterator returns\na reference to the key and the corresponding key’s vector.\nIterator element type is (&’a K, &’a V).

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1,42);\nmap.insert(1,1337);\nmap.insert(3,2332);\nmap.insert(4,1991);\n\nfor (key, values) in map.iter_all_mut() {\n    for value in values.iter_mut() {\n        *value = 99;\n    }\n}\n\nlet mut pairs: Vec<_> = map.iter_all_mut().collect();\npairs.sort_by_key(|p| p.0);\nassert_eq!(pairs, [(&1, &mut vec![99, 99]), (&3, &mut vec![99]), (&4, &mut vec![99])]);
    \n

    pub fn flat_iter(&self) -> impl Iterator<Item = (&K, &V)>

    An iterator visiting all key-value pairs in arbitrary order. The iterator returns\na reference to the key and the first element in the corresponding key’s vector.\nIterator element type is (&’a K, &’a V).

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1,42);\nmap.insert(1,1337);\nmap.insert(3,2332);\nmap.insert(4,1991);\n\nfor (key, value) in map.flat_iter() {\n    println!("key: {:?}, val: {:?}", key, value);\n}
    \n

    pub fn flat_iter_mut(&mut self) -> impl Iterator<Item = (&K, &mut V)>

    An iterator visiting all key-value pairs in arbitrary order. The iterator returns\na reference to the key and the first element in the corresponding key’s vector.\nIterator element type is (&’a K, &’a V).

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1,42);\nmap.insert(1,1337);\nmap.insert(3,2332);\nmap.insert(4,1991);\n\nfor (key, value) in map.flat_iter_mut() {\n    println!("key: {:?}, val: {:?}", key, value);\n}
    \n

    pub fn entry(&mut self, k: K) -> Entry<'_, K, V>

    Gets the specified key’s corresponding entry in the map for in-place manipulation.\nIt’s possible to both manipulate the vector and the ‘value’ (the first value in the\nvector).

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut m = MultiMap::new();\nm.insert(1, 42);\n\n{\n    let mut v = m.entry(1).or_insert(43);\n    assert_eq!(v, &42);\n    *v = 44;\n}\nassert_eq!(m.entry(2).or_insert(666), &666);\n\n{\n    let mut v = m.entry(1).or_insert_vec(vec![43]);\n    assert_eq!(v, &vec![44]);\n    v.push(50);\n}\nassert_eq!(m.entry(2).or_insert_vec(vec![667]), &vec![666]);\n\nassert_eq!(m.get_vec(&1), Some(&vec![44, 50]));
    \n

    pub fn retain<F>(&mut self, f: F)where\n F: FnMut(&K, &V) -> bool,

    Retains only the elements specified by the predicate.

    \n

    In other words, remove all pairs (k, v) such that f(&k,&mut v) returns false.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut m = MultiMap::new();\nm.insert(1, 42);\nm.insert(1, 99);\nm.insert(2, 42);\nm.retain(|&k, &v| { k == 1 && v == 42 });\nassert_eq!(1, m.len());\nassert_eq!(Some(&42), m.get(&1));
    \n
    ",0,"libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<K, V, S> FromIterator<(K, V)> for MultiMap<K, V, S>where\n K: Eq + Hash,\n S: BuildHasher + Default,

    §

    fn from_iter<T>(iterable: T) -> MultiMap<K, V, S>where\n T: IntoIterator<Item = (K, V)>,

    Creates a value from an iterator. Read more
    ","FromIterator<(K, V)>","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<K, V, S> Debug for MultiMap<K, V, S>where\n K: Eq + Hash + Debug,\n V: Debug,\n S: BuildHasher,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<K, V, BS> Serialize for MultiMap<K, V, BS>where\n K: Serialize + Eq + Hash,\n V: Serialize,\n BS: BuildHasher,

    §

    fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where\n S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    ","Serialize","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<K, V, S> Clone for MultiMap<K, V, S>where\n K: Clone,\n V: Clone,\n S: Clone,

    §

    fn clone(&self) -> MultiMap<K, V, S>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    ","Clone","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<K, V, S> Default for MultiMap<K, V, S>where\n K: Eq + Hash,\n S: BuildHasher + Default,

    §

    fn default() -> MultiMap<K, V, S>

    Returns the “default value” for a type. Read more
    ","Default","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<K, V, S> Eq for MultiMap<K, V, S>where\n K: Eq + Hash,\n V: Eq,\n S: BuildHasher,

    ","Eq","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<K, V, S> PartialEq for MultiMap<K, V, S>where\n K: Eq + Hash,\n V: PartialEq,\n S: BuildHasher,

    §

    fn eq(&self, other: &MultiMap<K, V, S>) -> bool

    This method tests for self and other values to be equal, and is used\nby ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
    ","PartialEq","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<'a, K, V, S, Q> Index<&'a Q> for MultiMap<K, V, S>where\n K: Eq + Hash + Borrow<Q>,\n Q: Eq + Hash + ?Sized,\n S: BuildHasher,

    §

    type Output = V

    The returned type after indexing.
    §

    fn index(&self, index: &Q) -> &V

    Performs the indexing (container[index]) operation. Read more
    ","Index<&'a Q>","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<K, V, S> Extend<(K, Vec<V>)> for MultiMap<K, V, S>where\n K: Eq + Hash,\n S: BuildHasher,

    §

    fn extend<T>(&mut self, iter: T)where\n T: IntoIterator<Item = (K, Vec<V>)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, item: A)

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(K, Vec)>","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<K, V, S> Extend<(K, V)> for MultiMap<K, V, S>where\n K: Eq + Hash,\n S: BuildHasher,

    §

    fn extend<T>(&mut self, iter: T)where\n T: IntoIterator<Item = (K, V)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, item: A)

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(K, V)>","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<'a, K, V, S> Extend<(&'a K, &'a Vec<V>)> for MultiMap<K, V, S>where\n K: Eq + Hash + Copy,\n V: Copy,\n S: BuildHasher,

    §

    fn extend<T>(&mut self, iter: T)where\n T: IntoIterator<Item = (&'a K, &'a Vec<V>)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, item: A)

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(&'a K, &'a Vec)>","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<'a, K, V, S> Extend<(&'a K, &'a V)> for MultiMap<K, V, S>where\n K: Eq + Hash + Copy,\n V: Copy,\n S: BuildHasher,

    §

    fn extend<T>(&mut self, iter: T)where\n T: IntoIterator<Item = (&'a K, &'a V)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, item: A)

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(&'a K, &'a V)>","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<'a, K, V, S> Deserialize<'a> for MultiMap<K, V, S>where\n K: Deserialize<'a> + Eq + Hash,\n V: Deserialize<'a>,\n S: BuildHasher + Default,

    §

    fn deserialize<D>(\n deserializer: D\n) -> Result<MultiMap<K, V, S>, <D as Deserializer<'a>>::Error>where\n D: Deserializer<'a>,

    Deserialize this value from the given Serde deserializer. Read more
    ","Deserialize<'a>","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<K, V, S> IntoIterator for MultiMap<K, V, S>where\n K: Eq + Hash,\n S: BuildHasher,

    §

    type Item = (K, Vec<V>)

    The type of the elements being iterated over.
    §

    type IntoIter = IntoIter<K, Vec<V>>

    Which kind of iterator are we turning this into?
    §

    fn into_iter(self) -> IntoIter<K, Vec<V>>

    Creates an iterator from a value. Read more
    ","IntoIterator","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"]] +"libdonet":[["
    §

    impl<K, V> MultiMap<K, V>where\n K: Eq + Hash,

    pub fn new() -> MultiMap<K, V>

    Creates an empty MultiMap

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map: MultiMap<&str, isize> = MultiMap::new();
    \n

    pub fn with_capacity(capacity: usize) -> MultiMap<K, V>

    Creates an empty multimap with the given initial capacity.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map: MultiMap<&str, isize> = MultiMap::with_capacity(20);
    \n
    ",0,"libdonet::dckeyword::KeywordName2Keyword","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<K, V, S> MultiMap<K, V, S>where\n K: Eq + Hash,\n S: BuildHasher,

    pub fn with_hasher(hash_builder: S) -> MultiMap<K, V, S>

    Creates an empty MultiMap which will use the given hash builder to hash keys.

    \n
    Examples
    \n
    use multimap::MultiMap;\nuse std::collections::hash_map::RandomState;\n\nlet s = RandomState::new();\nlet mut map: MultiMap<&str, isize> = MultiMap::with_hasher(s);
    \n

    pub fn with_capacity_and_hasher(\n capacity: usize,\n hash_builder: S\n) -> MultiMap<K, V, S>

    Creates an empty MultiMap with the given intial capacity and hash builder.

    \n
    Examples
    \n
    use multimap::MultiMap;\nuse std::collections::hash_map::RandomState;\n\nlet s = RandomState::new();\nlet mut map: MultiMap<&str, isize> = MultiMap::with_capacity_and_hasher(20, s);
    \n

    pub fn insert(&mut self, k: K, v: V)

    Inserts a key-value pair into the multimap. If the key does exist in\nthe map then the value is pushed to that key’s vector. If the key doesn’t\nexist in the map a new vector with the given value is inserted.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert("key", 42);
    \n

    pub fn insert_many<I>(&mut self, k: K, v: I)where\n I: IntoIterator<Item = V>,

    Inserts multiple key-value pairs into the multimap. If the key does exist in\nthe map then the values are extended into that key’s vector. If the key\ndoesn’t exist in the map a new vector collected from the given values is inserted.

    \n

    This may be more efficient than inserting values independently.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::<&str, &usize>::new();\nmap.insert_many("key", &[42, 43]);
    \n

    pub fn insert_many_from_slice(&mut self, k: K, v: &[V])where\n V: Clone,

    Inserts multiple key-value pairs into the multimap. If the key does exist in\nthe map then the values are extended into that key’s vector. If the key\ndoesn’t exist in the map a new vector collected from the given values is inserted.

    \n

    This may be more efficient than inserting values independently.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::<&str, usize>::new();\nmap.insert_many_from_slice("key", &[42, 43]);
    \n

    pub fn contains_key<Q>(&self, k: &Q) -> boolwhere\n K: Borrow<Q>,\n Q: Eq + Hash + ?Sized,

    Returns true if the map contains a value for the specified key.

    \n

    The key may be any borrowed form of the map’s key type, but Hash and Eq\non the borrowed form must match those for the key type.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1, 42);\nassert_eq!(map.contains_key(&1), true);\nassert_eq!(map.contains_key(&2), false);
    \n

    pub fn len(&self) -> usize

    Returns the number of elements in the map.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1, 42);\nmap.insert(2, 1337);\nassert_eq!(map.len(), 2);
    \n

    pub fn remove<Q>(&mut self, k: &Q) -> Option<Vec<V>>where\n K: Borrow<Q>,\n Q: Eq + Hash + ?Sized,

    Removes a key from the map, returning the vector of values at\nthe key if the key was previously in the map.

    \n

    The key may be any borrowed form of the map’s key type, but Hash and Eq\non the borrowed form must match those for the key type.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1, 42);\nmap.insert(1, 1337);\nassert_eq!(map.remove(&1), Some(vec![42, 1337]));\nassert_eq!(map.remove(&1), None);
    \n

    pub fn get<Q>(&self, k: &Q) -> Option<&V>where\n K: Borrow<Q>,\n Q: Eq + Hash + ?Sized,

    Returns a reference to the first item in the vector corresponding to\nthe key.

    \n

    The key may be any borrowed form of the map’s key type, but Hash and Eq\non the borrowed form must match those for the key type.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1, 42);\nmap.insert(1, 1337);\nassert_eq!(map.get(&1), Some(&42));
    \n

    pub fn get_mut<Q>(&mut self, k: &Q) -> Option<&mut V>where\n K: Borrow<Q>,\n Q: Eq + Hash + ?Sized,

    Returns a mutable reference to the first item in the vector corresponding to\nthe key.

    \n

    The key may be any borrowed form of the map’s key type, but Hash and Eq\non the borrowed form must match those for the key type.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1, 42);\nmap.insert(1, 1337);\nif let Some(v) = map.get_mut(&1) {\n    *v = 99;\n}\nassert_eq!(map[&1], 99);
    \n

    pub fn get_vec<Q>(&self, k: &Q) -> Option<&Vec<V>>where\n K: Borrow<Q>,\n Q: Eq + Hash + ?Sized,

    Returns a reference to the vector corresponding to the key.

    \n

    The key may be any borrowed form of the map’s key type, but Hash and Eq\non the borrowed form must match those for the key type.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1, 42);\nmap.insert(1, 1337);\nassert_eq!(map.get_vec(&1), Some(&vec![42, 1337]));
    \n

    pub fn get_vec_mut<Q>(&mut self, k: &Q) -> Option<&mut Vec<V>>where\n K: Borrow<Q>,\n Q: Eq + Hash + ?Sized,

    Returns a mutable reference to the vector corresponding to the key.

    \n

    The key may be any borrowed form of the map’s key type, but Hash and Eq\non the borrowed form must match those for the key type.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1, 42);\nmap.insert(1, 1337);\nif let Some(v) = map.get_vec_mut(&1) {\n    (*v)[0] = 1991;\n    (*v)[1] = 2332;\n}\nassert_eq!(map.get_vec(&1), Some(&vec![1991, 2332]));
    \n

    pub fn is_vec<Q>(&self, k: &Q) -> boolwhere\n K: Borrow<Q>,\n Q: Eq + Hash + ?Sized,

    Returns true if the key is multi-valued.

    \n

    The key may be any borrowed form of the map’s key type, but Hash and Eq\non the borrowed form must match those for the key type.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1, 42);\nmap.insert(1, 1337);\nmap.insert(2, 2332);\n\nassert_eq!(map.is_vec(&1), true);   // key is multi-valued\nassert_eq!(map.is_vec(&2), false);  // key is single-valued\nassert_eq!(map.is_vec(&3), false);  // key not in map
    \n

    pub fn capacity(&self) -> usize

    Returns the number of elements the map can hold without reallocating.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet map: MultiMap<usize, usize> = MultiMap::new();\nassert!(map.capacity() >= 0);
    \n

    pub fn is_empty(&self) -> bool

    Returns true if the map contains no elements.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nassert!(map.is_empty());\nmap.insert(1,42);\nassert!(!map.is_empty());
    \n

    pub fn clear(&mut self)

    Clears the map, removing all key-value pairs.\nKeeps the allocated memory for reuse.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1,42);\nmap.clear();\nassert!(map.is_empty());
    \n

    pub fn keys(&self) -> Keys<'_, K, Vec<V>>

    An iterator visiting all keys in arbitrary order.\nIterator element type is &’a K.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1,42);\nmap.insert(1,1337);\nmap.insert(2,1337);\nmap.insert(4,1991);\n\nlet mut keys: Vec<_> = map.keys().collect();\nkeys.sort();\nassert_eq!(keys, [&1, &2, &4]);
    \n

    pub fn iter(&self) -> Iter<'_, K, V>

    An iterator visiting all key-value pairs in arbitrary order. The iterator returns\na reference to the key and the first element in the corresponding key’s vector.\nIterator element type is (&’a K, &’a V).

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1,42);\nmap.insert(1,1337);\nmap.insert(3,2332);\nmap.insert(4,1991);\n\nlet mut pairs: Vec<_> = map.iter().collect();\npairs.sort_by_key(|p| p.0);\nassert_eq!(pairs, [(&1, &42), (&3, &2332), (&4, &1991)]);
    \n

    pub fn iter_mut(&mut self) -> IterMut<'_, K, V>

    An iterator visiting all key-value pairs in arbitrary order. The iterator returns\na reference to the key and a mutable reference to the first element in the\ncorresponding key’s vector. Iterator element type is (&’a K, &’a mut V).

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1,42);\nmap.insert(1,1337);\nmap.insert(3,2332);\nmap.insert(4,1991);\n\nfor (_, value) in map.iter_mut() {\n    *value *= *value;\n}\n\nlet mut pairs: Vec<_> = map.iter_mut().collect();\npairs.sort_by_key(|p| p.0);\nassert_eq!(pairs, [(&1, &mut 1764), (&3, &mut 5438224), (&4, &mut 3964081)]);
    \n

    pub fn iter_all(&self) -> Iter<'_, K, Vec<V>>

    An iterator visiting all key-value pairs in arbitrary order. The iterator returns\na reference to the key and the corresponding key’s vector.\nIterator element type is (&’a K, &’a V).

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1,42);\nmap.insert(1,1337);\nmap.insert(3,2332);\nmap.insert(4,1991);\n\nlet mut pairs: Vec<_> = map.iter_all().collect();\npairs.sort_by_key(|p| p.0);\nassert_eq!(pairs, [(&1, &vec![42, 1337]), (&3, &vec![2332]), (&4, &vec![1991])]);
    \n

    pub fn iter_all_mut(&mut self) -> IterMut<'_, K, Vec<V>>

    An iterator visiting all key-value pairs in arbitrary order. The iterator returns\na reference to the key and the corresponding key’s vector.\nIterator element type is (&’a K, &’a V).

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1,42);\nmap.insert(1,1337);\nmap.insert(3,2332);\nmap.insert(4,1991);\n\nfor (key, values) in map.iter_all_mut() {\n    for value in values.iter_mut() {\n        *value = 99;\n    }\n}\n\nlet mut pairs: Vec<_> = map.iter_all_mut().collect();\npairs.sort_by_key(|p| p.0);\nassert_eq!(pairs, [(&1, &mut vec![99, 99]), (&3, &mut vec![99]), (&4, &mut vec![99])]);
    \n

    pub fn flat_iter(&self) -> impl Iterator<Item = (&K, &V)>

    An iterator visiting all key-value pairs in arbitrary order. The iterator returns\na reference to the key and the first element in the corresponding key’s vector.\nIterator element type is (&’a K, &’a V).

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1,42);\nmap.insert(1,1337);\nmap.insert(3,2332);\nmap.insert(4,1991);\n\nfor (key, value) in map.flat_iter() {\n    println!("key: {:?}, val: {:?}", key, value);\n}
    \n

    pub fn flat_iter_mut(&mut self) -> impl Iterator<Item = (&K, &mut V)>

    An iterator visiting all key-value pairs in arbitrary order. The iterator returns\na reference to the key and the first element in the corresponding key’s vector.\nIterator element type is (&’a K, &’a V).

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut map = MultiMap::new();\nmap.insert(1,42);\nmap.insert(1,1337);\nmap.insert(3,2332);\nmap.insert(4,1991);\n\nfor (key, value) in map.flat_iter_mut() {\n    println!("key: {:?}, val: {:?}", key, value);\n}
    \n

    pub fn entry(&mut self, k: K) -> Entry<'_, K, V>

    Gets the specified key’s corresponding entry in the map for in-place manipulation.\nIt’s possible to both manipulate the vector and the ‘value’ (the first value in the\nvector).

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut m = MultiMap::new();\nm.insert(1, 42);\n\n{\n    let mut v = m.entry(1).or_insert(43);\n    assert_eq!(v, &42);\n    *v = 44;\n}\nassert_eq!(m.entry(2).or_insert(666), &666);\n\n{\n    let mut v = m.entry(1).or_insert_vec(vec![43]);\n    assert_eq!(v, &vec![44]);\n    v.push(50);\n}\nassert_eq!(m.entry(2).or_insert_vec(vec![667]), &vec![666]);\n\nassert_eq!(m.get_vec(&1), Some(&vec![44, 50]));
    \n

    pub fn retain<F>(&mut self, f: F)where\n F: FnMut(&K, &V) -> bool,

    Retains only the elements specified by the predicate.

    \n

    In other words, remove all pairs (k, v) such that f(&k,&mut v) returns false.

    \n
    Examples
    \n
    use multimap::MultiMap;\n\nlet mut m = MultiMap::new();\nm.insert(1, 42);\nm.insert(1, 99);\nm.insert(2, 42);\nm.retain(|&k, &v| { k == 1 && v == 42 });\nassert_eq!(1, m.len());\nassert_eq!(Some(&42), m.get(&1));
    \n
    ",0,"libdonet::dckeyword::KeywordName2Keyword","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<K, V, S> FromIterator<(K, V)> for MultiMap<K, V, S>where\n K: Eq + Hash,\n S: BuildHasher + Default,

    §

    fn from_iter<T>(iterable: T) -> MultiMap<K, V, S>where\n T: IntoIterator<Item = (K, V)>,

    Creates a value from an iterator. Read more
    ","FromIterator<(K, V)>","libdonet::dckeyword::KeywordName2Keyword","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<K, V, S> Debug for MultiMap<K, V, S>where\n K: Eq + Hash + Debug,\n V: Debug,\n S: BuildHasher,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","libdonet::dckeyword::KeywordName2Keyword","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<K, V, BS> Serialize for MultiMap<K, V, BS>where\n K: Serialize + Eq + Hash,\n V: Serialize,\n BS: BuildHasher,

    §

    fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where\n S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    ","Serialize","libdonet::dckeyword::KeywordName2Keyword","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<K, V, S> Clone for MultiMap<K, V, S>where\n K: Clone,\n V: Clone,\n S: Clone,

    §

    fn clone(&self) -> MultiMap<K, V, S>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    ","Clone","libdonet::dckeyword::KeywordName2Keyword","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<K, V, S> Default for MultiMap<K, V, S>where\n K: Eq + Hash,\n S: BuildHasher + Default,

    §

    fn default() -> MultiMap<K, V, S>

    Returns the “default value” for a type. Read more
    ","Default","libdonet::dckeyword::KeywordName2Keyword","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<K, V, S> Eq for MultiMap<K, V, S>where\n K: Eq + Hash,\n V: Eq,\n S: BuildHasher,

    ","Eq","libdonet::dckeyword::KeywordName2Keyword","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<K, V, S> PartialEq for MultiMap<K, V, S>where\n K: Eq + Hash,\n V: PartialEq,\n S: BuildHasher,

    §

    fn eq(&self, other: &MultiMap<K, V, S>) -> bool

    This method tests for self and other values to be equal, and is used\nby ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
    ","PartialEq","libdonet::dckeyword::KeywordName2Keyword","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<'a, K, V, S, Q> Index<&'a Q> for MultiMap<K, V, S>where\n K: Eq + Hash + Borrow<Q>,\n Q: Eq + Hash + ?Sized,\n S: BuildHasher,

    §

    type Output = V

    The returned type after indexing.
    §

    fn index(&self, index: &Q) -> &V

    Performs the indexing (container[index]) operation. Read more
    ","Index<&'a Q>","libdonet::dckeyword::KeywordName2Keyword","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<K, V, S> Extend<(K, Vec<V>)> for MultiMap<K, V, S>where\n K: Eq + Hash,\n S: BuildHasher,

    §

    fn extend<T>(&mut self, iter: T)where\n T: IntoIterator<Item = (K, Vec<V>)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, item: A)

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(K, Vec)>","libdonet::dckeyword::KeywordName2Keyword","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<K, V, S> Extend<(K, V)> for MultiMap<K, V, S>where\n K: Eq + Hash,\n S: BuildHasher,

    §

    fn extend<T>(&mut self, iter: T)where\n T: IntoIterator<Item = (K, V)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, item: A)

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(K, V)>","libdonet::dckeyword::KeywordName2Keyword","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<'a, K, V, S> Extend<(&'a K, &'a Vec<V>)> for MultiMap<K, V, S>where\n K: Eq + Hash + Copy,\n V: Copy,\n S: BuildHasher,

    §

    fn extend<T>(&mut self, iter: T)where\n T: IntoIterator<Item = (&'a K, &'a Vec<V>)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, item: A)

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(&'a K, &'a Vec)>","libdonet::dckeyword::KeywordName2Keyword","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<'a, K, V, S> Extend<(&'a K, &'a V)> for MultiMap<K, V, S>where\n K: Eq + Hash + Copy,\n V: Copy,\n S: BuildHasher,

    §

    fn extend<T>(&mut self, iter: T)where\n T: IntoIterator<Item = (&'a K, &'a V)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, item: A)

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(&'a K, &'a V)>","libdonet::dckeyword::KeywordName2Keyword","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<'a, K, V, S> Deserialize<'a> for MultiMap<K, V, S>where\n K: Deserialize<'a> + Eq + Hash,\n V: Deserialize<'a>,\n S: BuildHasher + Default,

    §

    fn deserialize<D>(\n deserializer: D\n) -> Result<MultiMap<K, V, S>, <D as Deserializer<'a>>::Error>where\n D: Deserializer<'a>,

    Deserialize this value from the given Serde deserializer. Read more
    ","Deserialize<'a>","libdonet::dckeyword::KeywordName2Keyword","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"],["
    §

    impl<K, V, S> IntoIterator for MultiMap<K, V, S>where\n K: Eq + Hash,\n S: BuildHasher,

    §

    type Item = (K, Vec<V>)

    The type of the elements being iterated over.
    §

    type IntoIter = IntoIter<K, Vec<V>>

    Which kind of iterator are we turning this into?
    §

    fn into_iter(self) -> IntoIter<K, Vec<V>>

    Creates an iterator from a value. Read more
    ","IntoIterator","libdonet::dckeyword::KeywordName2Keyword","libdonet::dclass::FieldName2Field","libdonet::dclass::FieldId2Field"]] };if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/docs/type.impl/std/primitive.i32.js b/docs/type.impl/std/primitive.i32.js new file mode 100644 index 0000000..0db7c75 --- /dev/null +++ b/docs/type.impl/std/primitive.i32.js @@ -0,0 +1,3 @@ +(function() {var type_impls = { +"libdonet":[] +};if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file