ActorSimulation.GeneratorUtils (GenServerVirtualTime v0.6.0)

Copy Markdown View Source

Shared utilities for code generators.

This module provides common functionality used across all generators (OMNeT++, CAF, Pony, Phony) to minimize code duplication.

Summary

Functions

Extracts messages from a send pattern.

Converts interval to nanoseconds (for Pony timers).

Converts interval to seconds (for OMNeT++ and other simulators).

Normalizes a message name to a valid identifier.

Calculates the interval in milliseconds for a send pattern.

Generates a basic README template.

Filters simulated actors from an actors map.

Converts an atom or string to camelCase.

Converts an atom or string to PascalCase.

Converts an atom or string to snake_case.

Writes generated files to a directory, creating subdirectories as needed.

Functions

extract_messages(arg1)

Extracts messages from a send pattern.

Examples

iex> GeneratorUtils.extract_messages({:periodic, 100, :tick})
[:tick]

iex> GeneratorUtils.extract_messages({:burst, 10, 1000, :batch})
[:batch]

interval_to_nanoseconds(interval_ms)

Converts interval to nanoseconds (for Pony timers).

interval_to_seconds(interval_ms)

Converts interval to seconds (for OMNeT++ and other simulators).

message_name(msg)

Normalizes a message name to a valid identifier.

pattern_interval(arg1)

Calculates the interval in milliseconds for a send pattern.

Examples

iex> GeneratorUtils.pattern_interval({:periodic, 100, :msg})
100

iex> GeneratorUtils.pattern_interval({:rate, 10, :msg})
100

readme_template(project_name, framework, options)

Generates a basic README template.

simulated_actors(actors)

Filters simulated actors from an actors map.

to_camel_case(atom)

Converts an atom or string to camelCase.

Examples

iex> GeneratorUtils.to_camel_case(:my_actor)
"myActor"

to_pascal_case(atom)

Converts an atom or string to PascalCase.

Examples

iex> GeneratorUtils.to_pascal_case(:my_actor)
"MyActor"

iex> GeneratorUtils.to_pascal_case("my_actor")
"MyActor"

to_snake_case(atom)

Converts an atom or string to snake_case.

Examples

iex> GeneratorUtils.to_snake_case(:my_actor)
"my_actor"

iex> GeneratorUtils.to_snake_case("MyActor")
"my_actor"

write_to_directory(files, output_dir)

Writes generated files to a directory, creating subdirectories as needed.