Skip to content

Latest commit

 

History

History
17 lines (13 loc) · 3.34 KB

README.md

File metadata and controls

17 lines (13 loc) · 3.34 KB

Core Package Overview

The core package is written in C++ and provides a set of APIs for building science data processing applications. The primary building blocks of the library are: Message Queues which implement a stream of data inside a process, Record Objects which represent and provide direct access to the data inside a stream, and Lua Objects which exist in the context of a Lua program and process the data.

The core library is kept as clean of dependencies as possible (only depending upon Lua), with the intention that extensions in functionality are provided through packages (compile-time extensions) and plugins (run-time extensions).

Core Library Modules

Layer Modules Description
Operating System Thread, Mutex, Sem, Cond, Timer, LocalLib, SockLib, TTYLib Platform agnostic abstraction of operating system primitives. Each platform sliderule runs on has a specific implementation of these interfaces. By convention, subsequent layers expose these interfaces by including "OsApi.h".
Data Structure List, Dictionary, Ordering Generic data structure implementations. This layer aims to be a minimalistic replacement for the STL, Qt containers, boost, etc. Having only a few data structures minimizes coding patterns. Having these data structures open in the code allows for unique tailoring to specific performance needs and supports more consistent application behavior across platforms. Modules are not thread safe and require higher level locking for concurrent use.
Library EventLib, StringLib, TimeLib Common utility routines. These modules implement thread safe routines that are commonly used throughout the framework and merit a central implementation.
Messaging MsgQ, RecordObject Data objects and data streams. The MsgQ class implements a process level (i.e. inter-thread) message queue system for attaching producers and consumers to a stream of data. The RecordObject class implements a container around raw data which provides access and (de)serialization methods.
Application LuaEngine, LuaObject Base classes for project specific code. The LuaEngine class is the central wrapper for an instantiation of a running Lua interpreter. The LuaObject is the base class for any object that is accessible from a Lua program executing within the LuaEngine.
Devices DeviceObject, DeviceIO, DeviceReader, DeviceWriter, File, ClusterSocket, TcpSocket, Uart, UdpSocket Devices for stream based I/O. All devices implement a standard interface for sending and receiving data to and from an I/O device. The DeviceObject class is a pure virtual class that defines a device interface to be used by a DeviceReader and DeviceWriter object. Any DeviceReader and DeviceWriter can use any DeviceObject.
Record Dispatches RecordDispatcher, RecordDispatch, CaptureDispatch, LimitDispatch, MetricDispatch, PublisherDispatch, ReportDispatch Dispatches for processing stream data. The RecordDispatcher class implements a data consumer and thread pool which subscribes to a stream and manages dispatching messages to RecordDispatch objects running in available threads. Each RecordDispatch can be attached to a RecordDispatcher and run by that dispatcher to process data read from a stream.