DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dunedaq::oks Namespace Reference

Namespaces

namespace  oks
namespace  python
namespace  xml

Classes

class  AddRcrError
class  AttributeConversionFailed
class  AttributeRangeError
class  AttributeReadError
class  AuthenticationFailure
 Failed to authenticate user. More...
class  bad_query_syntax
class  BadFileData
class  BadReqExp
struct  BindWarning
class  CannotAddClass
 Failed add new class. More...
class  CanNotBackupFile
 Failed backup file. More...
class  CanNotCreateFile
 Cannot create file. More...
class  CanNotCreateRepositoryDir
 Cannot create file. More...
class  CannotDestroyClass
class  CannotFindSuperClass
class  CanNotOpenFile
 Cannot open file. More...
class  CannotRegisterClass
class  CannotResolvePath
 Failed resolve path. More...
class  CanNotSetActiveFile
 Failed to set active file. More...
class  CanNotSetFile
 Failed move item to file. More...
class  CanNotWriteToFile
 Failed write to file. More...
struct  CommandOutput
class  Comment
 The comment about file modification. A comment can be added when user saves file using OKS tools. More...
class  Date
class  EndOfXmlStream
struct  equal_class_ptr
struct  equal_file_ptr
struct  equal_obj_ptr
struct  equal_str
class  exception
class  FailedAddComment
 Cannot add comment. Such exception is thrown when OKS cannot add new comment. More...
class  FailedAddInclude
 Cannot add include file. Such exception is thrown when OKS cannot add include file. More...
class  FailedChangeComment
 Cannot change comment. Such exception is thrown when OKS cannot change comment. More...
class  FailedCreateObject
class  FailedDestoyObject
class  FailedLoadFile
 Cannot load file. More...
class  FailedRead
class  FailedReadObject
class  FailedReloadFile
 Cannot re-load files. More...
class  FailedRemoveComment
 Cannot remove comment. Such exception is thrown when OKS cannot remove comment. More...
class  FailedRemoveInclude
 Cannot remove include file. Such exception is thrown when OKS cannot remove include file. More...
class  FailedRenameInclude
 Cannot rename include file. Such exception is thrown when OKS cannot rename include file. More...
class  FailedRenameObject
class  FailedSave
class  FailedSaveObject
class  FileChangeError
class  FileCompareError
class  FileLockError
 Cannot add include file. Such exception is thrown when OKS cannot add include file. More...
class  GitFoldersHolder
struct  hash_class_ptr
struct  hash_file_ptr
struct  hash_obj_ptr
struct  hash_str
struct  LoadErrors
class  ObjectBindError
class  ObjectGetError
class  ObjectInitError
class  ObjectOperationFailed
class  ObjectSetError
class  Oks
 Class contains common OKS classes and methods. More...
struct  OksAliasTable
 The struct OksAliasTable is used to support aliases. More...
class  OksAndExpression
 OKS query logical AND expression class. More...
class  OksAttribute
 OKS attribute class. More...
class  OksClass
 The OKS class. More...
class  OksComparator
 OKS query expression comparator class. More...
struct  OksData
 the structure to pass common parameters to various read() methods of OksData and OksObject class More...
struct  OksDataInfo
 Struct OKS data information. More...
class  OksFile
 Provides interface to the OKS XML schema and data files. More...
class  OksFunctionProfiler
class  OksIndex
class  OksJob
class  OksKernel
 Provides interface to the OKS kernel. More...
class  OksListBaseQueryExpression
 Abstract class describing list of OKS query expressions. More...
struct  OksLoadObjectsJob
class  OksMethod
 OKS method class. More...
class  OksMethodImplementation
 OKS method implementation class. More...
struct  OksNameTable
 The struct OksNameTable is used to generate unique strings. More...
class  OksNotExpression
 OKS query logical NOT expression class. More...
class  OksObject
 OksObject describes instance of OksClass. More...
class  OksObjectSortBy
class  OksOrExpression
 OKS query logical OR expression class. More...
class  OksPipeline
class  OksProfiler
class  OksQuery
 OKS query class. More...
class  OksQueryExpression
 OKS query expression class. More...
class  OksRange
 OKS range class. More...
struct  OksRCR
 The struct OksRCR describes Reverse Composite Relationship (i.e. back reference from child to composite parent). More...
class  OksRelationship
class  OksRelationshipExpression
 OKS query relationship expression class. More...
struct  OksRepositoryVersion
class  OksString
 Class OKS string. More...
struct  OksXmlAttribute
class  OksXmlInputStream
class  OksXmlOutputStream
struct  OksXmlRelValue
struct  OksXmlToken
struct  OksXmlTokenPool
struct  OksXmlValue
class  QueryFailed
class  QueryPath
class  QueryPathExpression
struct  ReadFileParams
struct  RefData
struct  ReloadObjects
struct  ReposDirs
class  RepositoryOperationFailed
 Cannot commit, checkout or release files. More...
class  SetOperationFailed
class  Time

Typedefs

typedef std::unordered_set< const OksClass *, oks::hash_class_ptr, oks::equal_class_ptrClassSet

Enumerations

enum  __LogSeverity__ { Error = 0 , Warning , Log , Debug }

Functions

bool cmp_str1 (const char *s1, const char s2[2])
bool cmp_str2 (const char *s1, const char s2[3])
bool cmp_str2n (const char *s1, const char s2[2])
bool cmp_str3 (const char *s1, const char s2[4])
bool cmp_str3n (const char *s1, const char s2[3])
bool cmp_str4 (const char *s1, const char s2[5])
bool cmp_str4n (const char *s1, const char s2[4])
bool cmp_str5 (const char *s1, const char s2[6])
bool cmp_str5n (const char *s1, const char s2[5])
bool cmp_str6 (const char *s1, const char s2[7])
bool cmp_str6n (const char *s1, const char s2[6])
bool cmp_str7 (const char *s1, const char s2[8])
bool cmp_str7n (const char *s1, const char s2[8])
bool cmp_str8 (const char *s1, const char s2[9])
bool cmp_str8n (const char *s1, const char s2[9])
bool cmp_str9 (const char *s1, const char s2[10])
bool cmp_str10 (const char *s1, const char s2[11])
bool cmp_str11 (const char *s1, const char s2[12])
bool cmp_str12 (const char *s1, const char s2[13])
bool cmp_str13 (const char *s1, const char s2[14])
bool cmp_str14 (const char *s1, const char s2[14])
bool cmp_str15 (const char *s1, const char s2[16])
bool cmp_str16 (const char *s1, const char s2[17])
const std::string strerror (int error)
 Convert C error number to string.
std::ostream & operator<< (std::ostream &s, const oks::exception &ex)
void throw_validate_not_empty (const char *name)
void validate_not_empty (const std::string &value, const char *name)
std::ostream & operator<< (std::ostream &, const OksFile &)
std::ostream & operator<< (std::ostream &, const oks::Comment &)
double get_time_interval (const timeval *t1, const timeval *t2)
std::ostream & log_timestamp (__LogSeverity__ severity=Log)
bool operator== (const OksString &s1, const OksString &s2)
 Implementation of OksString logical equality operator.
bool operator== (const OksString &s1, const std::string &s2)
 Implementation of OksString logical equality operator.
bool operator== (const OksString &s1, const char *s2)
 Implementation of OksString logical equality operator.
bool operator< (const OksString &s1, const OksString &s2)
 Implementation of OksString logical less operator.
std::ostream & operator<< (std::ostream &s, const OksString &str)
 Implementation of OksString out stream operator.
std::ostream & operator<< (std::ostream &, const oks::QueryPathExpression &)
std::ostream & operator<< (std::ostream &, const oks::QueryPath &)
void validate_init2range (const OksAttribute *a)
std::ostream & operator<< (std::ostream &s, const OksAttribute &a)
bool is_star (const std::string &s)
std::ostream & operator<< (std::ostream &s, const OksClass &c)
static void check_and_report_empty_parameter (const char *fname, bool b1, bool b2)
static void check_and_report_found_items (const char *fname, const char *item_type, const std::string &item1_name, const std::string &item2_name, const std::string &class_name, bool b1, bool b2)
static std::string add_super_class_error (const std::string &c1, const std::string &c2)
static std::string remove_super_class_error (const std::string &c1, const std::string &c2)
void add_if_not_found (OksClass::FList &clist, OksClass *c)
const char * bool2value_type (bool v)
bool are_types_different (const OksAttribute *a1, const OksAttribute *a2)
const char * card2string (OksRelationship::CardinalityConstraint cc)
static bool is_not_info (const std::string &line)
 ERS_DECLARE_ISSUE (kernel, SetGroupIdFailed, "cannot set group ID "<< id<< " for the file \'"<< file<< "\': chown() failed with code "<< code<< " , reason = \'"<< why<< '\'',((long) id)((const char *) file)((int) code)((std::string) why)) ERS_DECLARE_ISSUE(kernel
Found unresolved reference (s)
static long get_file_length (std::ifstream &f)
std::string make_fname (const char *f, size_t f_len, const std::string &file, bool *p, const OksFile *const *fh)
std::ostream & operator<< (std::ostream &s, OksKernel &k)
static void test_file_existence (const std::string &file_name, bool silence, const std::string &fname, const char *msg)
std::string mk_name_and_test (const std::string &name, const char *test, size_t test_len)
static void create_updated_lists (const OksFile::Map &files, std::list< OksFile * > **ufs, std::list< OksFile * > **rfs, OksFile::FileStatus wu, OksFile::FileStatus wr)
static bool _find_file (const OksFile::Map &files, const OksFile *f)
static bool check_relevant (const std::set< std::string > &loaded_files, const OksRepositoryVersion &ver)
static std::string replace_datetime_spaces (const std::string &in)
std::ostream & operator<< (std::ostream &s, const OksMethodImplementation &i)
std::ostream & operator<< (std::ostream &s, const OksMethod &m)
static void __throw_unknown_type (const oks::ReadFileParams &params, const char *atype)
std::ostream & operator<< (std::ostream &s, const OksObject *o)
std::ostream & operator<< (std::ostream &s, const OksObject &o)
static bool trim_dangling (OksData &d, const OksKernel &kernel)
static bool cmp_data (OksData *d, OksData *d2)
static void test_dangling_references (const OksObject *obj, const OksData &d, const OksRelationship &r, std::string &result)
static void _references (const OksObject *obj, unsigned long recursion_depth, RefData &data)
static void insert2refs (const OksObject *o, unsigned long recursion_depth, RefData &data)
boost::posix_time::ptime str2time (const char *value, size_t len, const char *file_name=nullptr)
boost::gregorian::date str2date (const char *value, size_t len)
std::ostream & operator<< (std::ostream &, const Date &)
std::ostream & operator<< (std::ostream &, const Time &)
static void printTableSeparator (std::ostream &s, unsigned char c)
static void printTableLine (std::ostream &s, unsigned char c)
std::ostream & operator<< (std::ostream &s, const OksProfiler &t)
void erase_empty_chars (std::string &s)
std::ostream & operator<< (std::ostream &s, const OksQueryExpression &qe)
std::ostream & operator<< (std::ostream &s, const OksQuery &gqe)
std::ostream & operator<< (std::ostream &s, const OksRelationship &r)
static std::string report_unexpected (const char *what, const char expected, const char read)
static void __throw_runtime_error_unexpected_symbol (const char expected, const char read)
static void __throw_bad_file_data_unexpected_symbol (const char *what, const char expected, const char read, unsigned long l, unsigned long p)
bool __is_comment (const char *s)

Variables

const char _empty_str [] = "empty"
static std::mutex s_get_cwd_mutex
static GitFoldersHolder s_git_folders
 BindError
static const char * OksProfilerFunctionsStr []

Typedef Documentation

◆ ClassSet

Definition at line 825 of file object.hpp.

Enumeration Type Documentation

◆ __LogSeverity__

Enumerator
Error 
Warning 
Log 
Debug 

Definition at line 386 of file kernel.hpp.

387 {
388 Error = 0,
389 Warning,
390 Log,
391 Debug
392 };

Function Documentation

◆ __is_comment()

bool dunedaq::oks::__is_comment ( const char * s)
inline

Definition at line 332 of file xml.cpp.

332 {
333 return oks::cmp_str4n(s, "<!--");
334}
bool cmp_str4n(const char *s1, const char s2[4])
Definition cstring.hpp:38

◆ __throw_bad_file_data_unexpected_symbol()

void dunedaq::oks::__throw_bad_file_data_unexpected_symbol ( const char * what,
const char expected,
const char read,
unsigned long l,
unsigned long p )
static

Definition at line 111 of file xml.cpp.

112{
113 throw oks::BadFileData(report_unexpected(what, expected, read), l, p);
114}
static std::string report_unexpected(const char *what, const char expected, const char read)
Definition xml.cpp:84

◆ __throw_runtime_error_unexpected_symbol()

void dunedaq::oks::__throw_runtime_error_unexpected_symbol ( const char expected,
const char read )
static

Definition at line 105 of file xml.cpp.

106{
107 throw std::runtime_error(report_unexpected(0, expected, read));
108}

◆ __throw_unknown_type()

void dunedaq::oks::__throw_unknown_type ( const oks::ReadFileParams & params,
const char * atype )
static

Definition at line 499 of file object.cpp.

500{
501 std::ostringstream s;
502 s << "Unknown attribute type \"" << atype << '\"';
503 throw oks::BadFileData(s.str(), params.s.get_line_no(), params.s.get_line_pos());
504}
unsigned long get_line_no() const
Definition xml.hpp:415
unsigned long get_line_pos() const
Definition xml.hpp:416
OksXmlInputStream & s
Definition oks_utils.hpp:54

◆ _find_file()

bool dunedaq::oks::_find_file ( const OksFile::Map & files,
const OksFile * f )
static

Definition at line 3172 of file kernel.cpp.

3173{
3174 for(OksFile::Map::const_iterator i = files.begin(); i != files.end(); ++i) {
3175 if(i->second == f) return true;
3176 }
3177 return false;
3178}

◆ _references()

void dunedaq::oks::_references ( const OksObject * obj,
unsigned long recursion_depth,
RefData & data )
static

Definition at line 3084 of file object.cpp.

3085{
3086 if(recursion_depth == 0) return;
3087
3088 size_t l1 = obj->GetClass()->number_of_all_attributes();
3089 size_t l2 = l1 + obj->GetClass()->number_of_all_relationships();
3090
3091 while(l1 < l2) {
3092 OksDataInfo odi(l1, (OksRelationship *)0);
3093 OksData * d(obj->GetRelationshipValue(&odi));
3094
3095 if(d->type == OksData::object_type) {
3096 if(OksObject * o2 = d->data.OBJECT) {
3097 insert2refs(o2, recursion_depth, data);
3098 }
3099 }
3100 else if(d->type == OksData::list_type) {
3101 for(OksData::List::const_iterator li = d->data.LIST->begin(); li != d->data.LIST->end(); ++li) {
3102 if((*li)->type == OksData::object_type) {
3103 if(OksObject * o2 = (*li)->data.OBJECT) {
3104 insert2refs(o2, recursion_depth, data);
3105 }
3106 }
3107 }
3108 }
3109
3110 ++l1;
3111 }
3112}
OksObject describes instance of OksClass.
Definition object.hpp:841
static void insert2refs(const OksObject *o, unsigned long recursion_depth, RefData &data)
Definition object.cpp:3064
msgpack::object obj
Struct OKS data information.
Definition object.hpp:347
the structure to pass common parameters to various read() methods of OksData and OksObject class
Definition object.hpp:454

◆ add_if_not_found()

void dunedaq::oks::add_if_not_found ( OksClass::FList & clist,
OksClass * c )
inline

Definition at line 1570 of file class.cpp.

1571{
1572 for(OksClass::FList::const_iterator i = clist.begin(); i != clist.end(); ++i) {
1573 if(*i == c) return;
1574 }
1575 clist.push_back(c);
1576}

◆ add_super_class_error()

std::string dunedaq::oks::add_super_class_error ( const std::string & c1,
const std::string & c2 )
static

Definition at line 865 of file class.cpp.

866{
867 return (std::string("cannot add superclass \"") + c1 + "\" to class \"" + c2 + '\"');
868}

◆ are_types_different()

bool dunedaq::oks::are_types_different ( const OksAttribute * a1,
const OksAttribute * a2 )
inline

Definition at line 1649 of file class.cpp.

1650{
1651 static const std::string __enum_str__("enum");
1652 static const std::string __string_str__("string");
1653
1654 const std::string& s1 = a1->get_type();
1655 const std::string& s2 = a2->get_type();
1656
1657 return (
1658 !((s1 == s2) || ((s1 == __enum_str__ && s2 == __string_str__) || (s1 == __string_str__ && s2 == __enum_str__)))
1659 );
1660}
const std::string & get_type() const noexcept
Get attribute string type.

◆ bool2value_type()

const char * dunedaq::oks::bool2value_type ( bool v)
inline

Definition at line 1641 of file class.cpp.

1642{
1643 return (v ? "multi-value" : "single-value");
1644}
default char v[0]

◆ card2string()

const char * dunedaq::oks::card2string ( OksRelationship::CardinalityConstraint cc)
inline

Definition at line 1734 of file class.cpp.

1735{
1736 return (cc == OksRelationship::One ? "one object" : "many objects");
1737}

◆ check_and_report_empty_parameter()

void dunedaq::oks::check_and_report_empty_parameter ( const char * fname,
bool b1,
bool b2 )
static

Definition at line 823 of file class.cpp.

824{
825 if(b1) {
826 throw oks::SetOperationFailed(fname, "First parameter is (null)");
827 }
828
829 if(b2) {
830 throw oks::SetOperationFailed(fname, "Second parameter is (null)");
831 }
832}

◆ check_and_report_found_items()

void dunedaq::oks::check_and_report_found_items ( const char * fname,
const char * item_type,
const std::string & item1_name,
const std::string & item2_name,
const std::string & class_name,
bool b1,
bool b2 )
static

Definition at line 838 of file class.cpp.

841{
842 struct {
843 bool b;
844 const std::string * name;
845 } info[] = {
846 {b1, &item1_name},
847 {b2, &item2_name}
848 };
849
850 for(int i = 0; i < 2; ++i) {
851 if(info[i].b) {
852 std::string text("cannot find direct ");
853 text += item_type;
854 text += " \"";
855 text += *info[i].name;
856 text += "\" in class \"";
857 text += class_name;
858 text += '\"';
859 throw oks::SetOperationFailed(fname, text);
860 }
861 }
862}

◆ check_relevant()

bool dunedaq::oks::check_relevant ( const std::set< std::string > & loaded_files,
const OksRepositoryVersion & ver )
static

Definition at line 5324 of file kernel.cpp.

5325{
5326 for (const auto& x : ver.m_files)
5327 if (loaded_files.find(x) != loaded_files.end())
5328 return true;
5329
5330 return false;
5331}
std::vector< std::string > m_files
Definition kernel.hpp:520

◆ cmp_data()

bool dunedaq::oks::cmp_data ( OksData * d,
OksData * d2 )
static

Definition at line 2268 of file object.cpp.

2269{
2270 if(d->type == OksData::object_type && d2->type == OksData::object_type)
2271 return ((d2->data.OBJECT == d->data.OBJECT) ? true : false);
2272
2273 const std::string& object_id =
2274 d->type == OksData::object_type ? d->data.OBJECT->GetId() :
2275 d->type == OksData::uid2_type ? *(static_cast<std::string*>(d->data.UID2.object_id)) :
2276 *(static_cast<std::string*>(d->data.UID.object_id));
2277
2278 const std::string& object_id2 =
2279 d2->type == OksData::object_type ? d2->data.OBJECT->GetId() :
2280 d2->type == OksData::uid2_type ? *(static_cast<std::string*>(d2->data.UID2.object_id)) :
2281 *(static_cast<std::string*>(d2->data.UID.object_id));
2282
2283 if(object_id != object_id2) return false;
2284
2285 const OksClass *pclass_id =
2286 d->type == OksData::object_type ? d->data.OBJECT->GetClass() :
2287 d->type == OksData::uid_type ? d->data.UID.class_id :
2288 0;
2289
2290 const OksClass *pclass_id2 =
2291 d2->type == OksData::object_type ? d2->data.OBJECT->GetClass() :
2292 d2->type == OksData::uid_type ? d2->data.UID.class_id :
2293 0;
2294
2295 if(pclass_id && pclass_id2) return (pclass_id == pclass_id2 ? true : false);
2296
2297 const std::string& class_id =
2298 (pclass_id ? pclass_id->get_name() : *(static_cast<std::string*>(d->data.UID2.class_id)));
2299
2300 const std::string& class_id2 =
2301 (pclass_id2 ? pclass_id2->get_name() : *(static_cast<std::string*>(d2->data.UID2.class_id)));
2302
2303 return (class_id == class_id2 ? true : false);
2304}
The OKS class.
Definition class.hpp:205
const OksClass * GetClass() const
Definition object.hpp:995
const std::string & GetId() const
Definition object.hpp:1000
union dunedaq::oks::OksData::Data data
enum dunedaq::oks::OksData::Type type
const OksClass * class_id
Definition object.hpp:505
struct dunedaq::oks::OksData::Data::@266171337063116272021017117226020166361213322350 UID
struct dunedaq::oks::OksData::Data::@226266061051241020017305361066131172152317024337 UID2

◆ cmp_str1()

bool dunedaq::oks::cmp_str1 ( const char * s1,
const char s2[2] )
inline

Definition at line 14 of file cstring.hpp.

14 {
15 return (*(const int16_t *)s1 == *(const int16_t *)s2);
16 }

◆ cmp_str10()

bool dunedaq::oks::cmp_str10 ( const char * s1,
const char s2[11] )
inline

Definition at line 78 of file cstring.hpp.

78 {
79 return cmp_str7(s1,s2) && cmp_str2(s1+8,s2+8);
80 }
bool cmp_str2(const char *s1, const char s2[3])
Definition cstring.hpp:18
bool cmp_str7(const char *s1, const char s2[8])
Definition cstring.hpp:58

◆ cmp_str11()

bool dunedaq::oks::cmp_str11 ( const char * s1,
const char s2[12] )
inline

Definition at line 82 of file cstring.hpp.

82 {
83 return cmp_str7(s1,s2) && cmp_str3(s1+8,s2+8);
84 }
bool cmp_str3(const char *s1, const char s2[4])
Definition cstring.hpp:26

◆ cmp_str12()

bool dunedaq::oks::cmp_str12 ( const char * s1,
const char s2[13] )
inline

Definition at line 86 of file cstring.hpp.

86 {
87 return cmp_str7(s1,s2) && cmp_str4(s1+8,s2+8);
88 }
bool cmp_str4(const char *s1, const char s2[5])
Definition cstring.hpp:34

◆ cmp_str13()

bool dunedaq::oks::cmp_str13 ( const char * s1,
const char s2[14] )
inline

Definition at line 90 of file cstring.hpp.

90 {
91 return cmp_str7(s1,s2) && cmp_str5(s1+8,s2+8);
92 }
bool cmp_str5(const char *s1, const char s2[6])
Definition cstring.hpp:42

◆ cmp_str14()

bool dunedaq::oks::cmp_str14 ( const char * s1,
const char s2[14] )
inline

Definition at line 94 of file cstring.hpp.

94 {
95 return cmp_str7(s1,s2) && cmp_str6(s1+8,s2+8);
96 }
bool cmp_str6(const char *s1, const char s2[7])
Definition cstring.hpp:50

◆ cmp_str15()

bool dunedaq::oks::cmp_str15 ( const char * s1,
const char s2[16] )
inline

Definition at line 98 of file cstring.hpp.

98 {
99 return cmp_str7(s1,s2) && cmp_str7(s1+8,s2+8);
100 }

◆ cmp_str16()

bool dunedaq::oks::cmp_str16 ( const char * s1,
const char s2[17] )
inline

Definition at line 102 of file cstring.hpp.

102 {
103 return cmp_str7(s1,s2) && cmp_str7(s1+8,s2+8) && (s1[16] == 0);
104 }

◆ cmp_str2()

bool dunedaq::oks::cmp_str2 ( const char * s1,
const char s2[3] )
inline

Definition at line 18 of file cstring.hpp.

18 {
19 return cmp_str1(s1,s2) && (s1[2] == 0);
20 }
bool cmp_str1(const char *s1, const char s2[2])
Definition cstring.hpp:14

◆ cmp_str2n()

bool dunedaq::oks::cmp_str2n ( const char * s1,
const char s2[2] )
inline

Definition at line 22 of file cstring.hpp.

22 {
23 return cmp_str1(s1,s2);
24 }

◆ cmp_str3()

bool dunedaq::oks::cmp_str3 ( const char * s1,
const char s2[4] )
inline

Definition at line 26 of file cstring.hpp.

26 {
27 return (*(const int32_t *)s1 == *(const int32_t *)s2);
28 }

◆ cmp_str3n()

bool dunedaq::oks::cmp_str3n ( const char * s1,
const char s2[3] )
inline

Definition at line 30 of file cstring.hpp.

30 {
31 return (s1[0] == s2[0]) && cmp_str1(s1+1,s2+1);
32 }

◆ cmp_str4()

bool dunedaq::oks::cmp_str4 ( const char * s1,
const char s2[5] )
inline

Definition at line 34 of file cstring.hpp.

34 {
35 return (s1[0] == s2[0]) && cmp_str3(s1+1,s2+1);
36 }

◆ cmp_str4n()

bool dunedaq::oks::cmp_str4n ( const char * s1,
const char s2[4] )
inline

Definition at line 38 of file cstring.hpp.

38 {
39 return cmp_str3(s1,s2);
40 }

◆ cmp_str5()

bool dunedaq::oks::cmp_str5 ( const char * s1,
const char s2[6] )
inline

Definition at line 42 of file cstring.hpp.

42 {
43 return cmp_str1(s1,s2) && cmp_str3(s1+2,s2+2);
44 }

◆ cmp_str5n()

bool dunedaq::oks::cmp_str5n ( const char * s1,
const char s2[5] )
inline

Definition at line 46 of file cstring.hpp.

46 {
47 return cmp_str3(s1,s2) && (s1[4] == s2[4]);
48 }

◆ cmp_str6()

bool dunedaq::oks::cmp_str6 ( const char * s1,
const char s2[7] )
inline

Definition at line 50 of file cstring.hpp.

50 {
51 return cmp_str3(s1,s2) && cmp_str2(s1+4,s2+4);
52 }

◆ cmp_str6n()

bool dunedaq::oks::cmp_str6n ( const char * s1,
const char s2[6] )
inline

Definition at line 54 of file cstring.hpp.

54 {
55 return cmp_str3(s1,s2) && cmp_str1(s1+4,s2+4);
56 }

◆ cmp_str7()

bool dunedaq::oks::cmp_str7 ( const char * s1,
const char s2[8] )
inline

Definition at line 58 of file cstring.hpp.

58 {
59 return (*(const int64_t *)s1 == *(const int64_t *)s2);
60 }

◆ cmp_str7n()

bool dunedaq::oks::cmp_str7n ( const char * s1,
const char s2[8] )
inline

Definition at line 62 of file cstring.hpp.

62 {
63 return (cmp_str3(s1,s2) && cmp_str3n(s1+4,s2+4));
64 }
bool cmp_str3n(const char *s1, const char s2[3])
Definition cstring.hpp:30

◆ cmp_str8()

bool dunedaq::oks::cmp_str8 ( const char * s1,
const char s2[9] )
inline

Definition at line 66 of file cstring.hpp.

66 {
67 return cmp_str7(s1,s2) && (s1[8] == 0);
68 }

◆ cmp_str8n()

bool dunedaq::oks::cmp_str8n ( const char * s1,
const char s2[9] )
inline

Definition at line 70 of file cstring.hpp.

70 {
71 return (*(const int64_t *)s1 == *(const int64_t *)s2);
72 }

◆ cmp_str9()

bool dunedaq::oks::cmp_str9 ( const char * s1,
const char s2[10] )
inline

Definition at line 74 of file cstring.hpp.

74 {
75 return cmp_str1(s1,s2) && cmp_str7(s1+2,s2+2);
76 }

◆ create_updated_lists()

void dunedaq::oks::create_updated_lists ( const OksFile::Map & files,
std::list< OksFile * > ** ufs,
std::list< OksFile * > ** rfs,
OksFile::FileStatus wu,
OksFile::FileStatus wr )
static

Definition at line 2986 of file kernel.cpp.

2987{
2988 *ufs = 0; // updated files
2989 *rfs = 0; // removed files
2990
2991 for(OksFile::Map::const_iterator i = files.begin(); i != files.end(); ++i) {
2992 OksFile::FileStatus fs = i->second->get_status_of_file();
2993
2994 if(fs == wu /* i.e. Which Updated */ ) {
2995 if(*ufs == 0) { *ufs = new std::list<OksFile *>(); }
2996 (*ufs)->push_back(i->second);
2997 }
2998 else if(fs == wr /* i.e. Which Removed */ ) {
2999 if(*rfs == 0) { *rfs = new std::list<OksFile *>(); }
3000 (*rfs)->push_back(i->second);
3001 }
3002 }
3003}

◆ erase_empty_chars()

void dunedaq::oks::erase_empty_chars ( std::string & s)
inline

Definition at line 84 of file query.cpp.

85{
86 while(s[0] == ' ' || s[0] == '\n' || s[0] == '\t') s.erase(0, 1);
87}

◆ ERS_DECLARE_ISSUE()

dunedaq::oks::ERS_DECLARE_ISSUE ( kernel ,
SetGroupIdFailed ,
"cannot set group ID "<< id<< " for the file \'"<< file<< "\': chown() failed with code "<< code<< "  )

◆ get_file_length()

long dunedaq::oks::get_file_length ( std::ifstream & f)
static

Definition at line 495 of file kernel.cpp.

496{
497 long file_length = 0;
498
499 // get size of file and check that it is not empty
500
501 f.seekg(0, std::ios::end);
502
503#if __GNUC__ >= 3
504 file_length = static_cast<std::streamoff>(f.tellg());
505#else
506 file_length = f.tellg();
507#endif
508
509 f.seekg(0, std::ios::beg);
510
511 return file_length;
512}

◆ get_time_interval()

double dunedaq::oks::get_time_interval ( const timeval * t1,
const timeval * t2 )

◆ insert2refs()

void dunedaq::oks::insert2refs ( const OksObject * o,
unsigned long recursion_depth,
RefData & data )
static

Definition at line 3064 of file object.cpp.

3065{
3066 recursion_depth--;
3067
3068 std::pair<OksObject::FSet::iterator,bool> ret = data.tested_objs.insert(const_cast<OksObject *>(o));
3069
3070 if(ret.second==true) {
3071 if(data.classes == nullptr || data.classes->find(const_cast<OksClass *>(o->GetClass())) != data.classes->end()) {
3072 data.refs.insert(const_cast<OksObject *>(o));
3073 }
3074 o->SetTransientData((void *)recursion_depth);
3075 _references(o, recursion_depth, data);
3076 }
3077 else if(o->GetTransientData() < (void *)recursion_depth) {
3078 o->SetTransientData((void *)recursion_depth);
3079 _references(o, recursion_depth, data);
3080 }
3081}
void * GetTransientData() const
Get transient user data associated with given object. Return data set using SetTransientData() method...
Definition object.hpp:1348
void SetTransientData(void *d) const
Set transient user data associated with given object. Such data are not stored on file and only exist...
Definition object.hpp:1340
static void _references(const OksObject *obj, unsigned long recursion_depth, RefData &data)
Definition object.cpp:3084

◆ is_not_info()

bool dunedaq::oks::is_not_info ( const std::string & line)
static

Definition at line 1504 of file file.cpp.

1505{
1506 static const char start_tag[] = "<info ";
1507 static const char last_tag[] = "last-modification-time=\"yyyymmddThhmmss\"/>"; // 24 - is a position of first double quote
1508
1509 const std::string::size_type len = line.length();
1510
1511 return(
1512 ( len < (sizeof(start_tag) + sizeof(last_tag)) ) ||
1513 ( line.compare(0, sizeof(start_tag)-1, start_tag, sizeof(start_tag)-1) != 0 ) ||
1514 ( line.compare(len - sizeof(last_tag) + 1, 24, last_tag, 24) != 0 )
1515 );
1516}

◆ is_star()

bool dunedaq::oks::is_star ( const std::string & s)
inline

Definition at line 837 of file attribute.cpp.

838{
839 return (s.size() == 1 && s[0] == '*');
840}

◆ log_timestamp()

std::ostream & dunedaq::oks::log_timestamp ( __LogSeverity__ severity = Log)

Definition at line 5727 of file kernel.cpp.

5728{
5729 auto now(std::chrono::system_clock::now());
5730 auto time_since_epoch(now.time_since_epoch());
5731 auto seconds_since_epoch(std::chrono::duration_cast<std::chrono::seconds>(time_since_epoch));
5732
5733 std::time_t now_t(std::chrono::system_clock::to_time_t(std::chrono::system_clock::time_point(seconds_since_epoch)));
5734
5735 char buff[128];
5736 std::size_t len = std::strftime(buff, 128 - 16, "%Y-%b-%d %H:%M:%S.", std::localtime(&now_t));
5737 sprintf(buff+len, "%03d ", (int)(std::chrono::duration_cast<std::chrono::milliseconds>(time_since_epoch).count() - seconds_since_epoch.count()*1000));
5738
5739 std::ostream& s (severity <= Warning ? std::cerr : std::cout);
5740
5741 s << buff << (severity == Error ? "ERROR " : severity == Warning ? "WARNING " : severity == Debug ? "DEBUG " : "");
5742
5743 return s;
5744}
static int64_t now()

◆ make_fname()

std::string dunedaq::oks::make_fname ( const char * f,
size_t f_len,
const std::string & file,
bool * p,
const OksFile *const * fh )

Definition at line 517 of file kernel.cpp.

518{
519 const char _prefix [] = "OksKernel::";
520 std::string fname(_prefix, (sizeof(_prefix)-1));
521
522 fname.append(f, f_len);
523
524 const char _x1 [] = "(file \'";
525 fname.append(_x1, (sizeof(_x1)-1));
526 fname.append(file);
527 fname.push_back('\'');
528
529 // add boolean parameter
530
531 if(p) {
532 if(*p) {
533 const char _true_str [] = ", true";
534 fname.append(_true_str, (sizeof(_true_str)-1));
535 }
536 else {
537 const char _false_str [] = ", false";
538 fname.append(_false_str, (sizeof(_false_str)-1));
539 }
540 }
541
542 // add file handler parameter
543
544 if(fh && *fh) {
545 const char _x2 [] = ", included by file \'";
546 fname.append(_x2, (sizeof(_x2)-1));
547 fname.append((*fh)->get_full_file_name());
548 fname.push_back('\'');
549 }
550
551 fname.push_back(')');
552
553 return fname;
554}

◆ mk_name_and_test()

std::string dunedaq::oks::mk_name_and_test ( const std::string & name,
const char * test,
size_t test_len )
inline

Definition at line 1640 of file kernel.cpp.

1641{
1642 const char _s1_str[] = " - \'";
1643 const char _s2_str[] = "\' tested as ";
1644
1645 return ((std::string(_s1_str, sizeof(_s1_str)-1) + name).append(_s2_str, sizeof(_s2_str)-1)).append(test, test_len);
1646}

◆ operator<()

bool dunedaq::oks::operator< ( const OksString & s1,
const OksString & s2 )
inline

Implementation of OksString logical less operator.

Definition at line 419 of file object.hpp.

421{
422 return ( *(static_cast<const std::string *>(&s1)) < *(static_cast<const std::string *>(&s2)) );
423}

◆ operator<<() [1/19]

std::ostream & dunedaq::oks::operator<< ( std::ostream & s,
const Date & d )

Definition at line 167 of file time.cpp.

168{
169 std::string str = d.str();
170 s << str;
171 return s;
172}

◆ operator<<() [2/19]

std::ostream & dunedaq::oks::operator<< ( std::ostream & s,
const oks::Comment & c )

Definition at line 1316 of file file.cpp.

1317{
1318 s << "user \"" << c.get_created_by() << "\" (" << c.get_author() << ")"
1319 << " on \"" << c.get_created_on() << "\" wrote: \"" << c.get_text() << "\"";
1320
1321 return s;
1322}

◆ operator<<() [3/19]

std::ostream & dunedaq::oks::operator<< ( std::ostream & s,
const oks::QueryPath & query )

Definition at line 914 of file query.cpp.

916{
917 s << '(' << OksQuery::PATH_TO << ' ' << query.get_goal_object() << ' ' << *query.get_start_expression() << ')';
918 return s;
919}
static const char * PATH_TO
Definition query.hpp:81
const OksObject * get_goal_object() const
Definition query.hpp:397
const QueryPathExpression * get_start_expression() const
Definition query.hpp:396

◆ operator<<() [4/19]

std::ostream & dunedaq::oks::operator<< ( std::ostream & s,
const oks::QueryPathExpression & e )

Definition at line 922 of file query.cpp.

924{
925 s << '(' << (e.get_use_nested_lookup() ? OksQuery::NESTED : OksQuery::DIRECT) << ' ';
926
927 for(std::list<std::string>::const_iterator i = e.get_rel_names().begin(); i != e.get_rel_names().end(); ++i) {
928 if(i != e.get_rel_names().begin()) s << ' ';
929 s << '\"' << *i << '\"';
930 }
931
932 if(e.get_next()) s << ' ' << *(e.get_next());
933
934 s << ')';
935
936 return s;
937}
static const char * NESTED
Definition query.hpp:83
static const char * DIRECT
Definition query.hpp:82
const QueryPathExpression * get_next() const
Definition query.hpp:348
const std::list< std::string > & get_rel_names() const
Definition query.hpp:347

◆ operator<<() [5/19]

std::ostream & dunedaq::oks::operator<< ( std::ostream & s,
const OksFile & f )

Definition at line 1325 of file file.cpp.

1327{
1328 s << "OKS file\n"
1329 " short file name: \'" << f.get_short_file_name() << "\'\n"
1330 " full file name: \'" << f.get_full_file_name() << "\'\n"
1331 " lock file name: \'" << f.get_lock_file() << "\'\n"
1332 " logical name: \'" << f.get_logical_name() << "\'\n"
1333 " type: \'" << f.get_type() << "\'\n"
1334 " oks format: \'" << f.get_oks_format() << "\'\n"
1335 " number of items: " << f.get_number_of_items() << "\n"
1336 " created by: " << f.get_created_by() << "\n"
1337 " creation time: " << boost::posix_time::to_simple_string(f.get_creation_time()) << "\n"
1338 " created on: " << f.get_created_on() << "\n"
1339 " last modified by: \'" << f.get_last_modified_by() << "\'\n"
1340 " last modification time: " << boost::posix_time::to_simple_string(f.get_last_modification_time()) << "\'\n"
1341 " last modified on: " << f.get_last_modified_on() << "\'\n"
1342 " is " << (f.is_read_only() ? "read-only" : "read-write") << "\n"
1343 " is " << (f.is_locked() ? "" : "not ") << "locked\n"
1344 " is " << (f.is_updated() ? "" : "not ") << "updated\n";
1345
1346 {
1347 size_t num_of_includes = f.get_include_files().size();
1348
1349 if (num_of_includes)
1350 {
1351 s << " contains " << num_of_includes << " include file(s)";
1352 for (const auto& i : f.get_include_files())
1353 s << " - \'" << i << "\'\n";
1354 }
1355 else
1356 {
1357 s << " contains no include files\n";
1358 }
1359 }
1360
1361 {
1362 size_t num_of_comments = f.get_comments().size();
1363
1364 if (num_of_comments)
1365 {
1366 s << " contains " << num_of_comments << " comment(s)";
1367 for (const auto& i : f.get_comments())
1368 s << " - " << boost::posix_time::to_simple_string(boost::posix_time::from_iso_string(i.first)) << ": \'" << *i.second << "\'\n";
1369 }
1370 else
1371 {
1372 s << " contains no comments\n";
1373 }
1374 }
1375
1376 s << "END of oks file\n";
1377
1378 return s;
1379}

◆ operator<<() [6/19]

std::ostream & dunedaq::oks::operator<< ( std::ostream & s,
const Time & t )

Definition at line 175 of file time.cpp.

176{
177 std::string str = t.str();
178 s << str;
179 return s;
180}
virtual std::string str() const
Definition time.cpp:152

◆ operator<<() [7/19]

std::ostream & dunedaq::oks::operator<< ( std::ostream & s,
const oks::exception & ex )
inline

Definition at line 44 of file exceptions.hpp.

44{ s << ex.what(); return s; }
virtual const char * what() const noexcept

◆ operator<<() [8/19]

std::ostream & dunedaq::oks::operator<< ( std::ostream & s,
const OksAttribute & a )

Definition at line 269 of file attribute.cpp.

271{
272 s << "Attribute name: \"" << a.p_name << "\"\n"
273 " type: \"" << a.get_type() << "\"\n"
274 " range: \"" << a.p_range << "\"\n";
275
276 if(a.is_integer()) {
277 s << " format: \"" << OksAttribute::format2str(a.p_format) << "\"\n";
278 }
279
280 if(a.p_multi_values == true) {
281 s << " is \'multi values\'\n";
282 }
283 else {
284 s << " is \'single value\'\n";
285 }
286
287 s << " initial value: \"" << a.p_init_value << "\"\n"
288 " has description: \"" << a.p_description << "\"\n"
289 << (a.p_no_null == true ? " can not be null\n" : " can be null\n")
290 << " is " << (a.p_ordered == true ? "ordered" : "unordered") << std::endl;
291
292 return s;
293}
static const char * format2str(Format) noexcept
Definition attribute.cpp:67
bool is_integer() const noexcept
Definition attribute.cpp:77

◆ operator<<() [9/19]

std::ostream & dunedaq::oks::operator<< ( std::ostream & s,
const OksClass & c )

Send to stream complete description of OKS class:

  • print class name
  • print details of attributes, relationships and methods
  • print details of objects

Definition at line 390 of file class.cpp.

392{
394
395 s << "Class name: \"" << c.p_name << "\"\n"
396 " has description: \"" << c.p_description << "\"\n"
397 << (c.p_abstract == true ? " is abstract\n" : " is not abstract\n");
398
399 if(c.p_super_classes) {
400 s << "The class has superclasses:\n";
401 for(std::list<std::string *>::const_iterator i = c.p_super_classes->begin(); i != c.p_super_classes->end(); ++i) {
402 s << " - " << *(*i) << std::endl;
403 }
404 }
405 else
406 s << "The class has no superclasses\n";
407
408
409 if(c.p_attributes) {
410 s << "The attributes are:\n";
411 for(std::list<OksAttribute *>::const_iterator i = c.p_attributes->begin(); i != c.p_attributes->end(); ++i) {
412 s << *(*i);
413 }
414 }
415 else
416 s << "There are no attributes\n";
417
418
419 if(c.p_relationships) {
420 s << "The relationships are:\n";
421 for(std::list<OksRelationship *>::const_iterator i = c.p_relationships->begin(); i != c.p_relationships->end(); ++i) {
422 s << *(*i);
423 }
424 }
425 else
426 s << "There are no relationships\n";
427
428
429 if(c.p_methods) {
430 s << "The methods are:\n";
431 for(std::list<OksMethod *>::const_iterator i = c.p_methods->begin(); i != c.p_methods->end(); ++i) {
432 s << *(*i);
433 }
434 }
435 else
436 s << "There are no methods\n";
437
438
439 if(c.p_objects) {
440 OksObject::SMap sorted;
441
442 s << "The objects are:\n";
443
444 for(OksObject::Map::iterator i = c.p_objects->begin(); i != c.p_objects->end(); ++i) {
445 sorted[i->first] = i->second;
446 }
447
448 for(OksObject::SMap::iterator i = sorted.begin(); i != sorted.end(); ++i) {
449 s << *(i->second);
450 }
451 }
452 else
453 s << "There are no objects\n";
454
455
456 s << "End of Class \"" << c.p_name << "\"\n";
457
458 return s;
459}
std::map< const std::string *, OksObject *, SortById > SMap
Definition object.hpp:865
#define OSK_PROFILING(FID, K)
Definition defs.hpp:102

◆ operator<<() [10/19]

std::ostream & dunedaq::oks::operator<< ( std::ostream & s,
const OksMethod & m )

Definition at line 189 of file method.cpp.

191{
192 s << "Method name: \"" << m.p_name << "\"\n"
193 " description: \"" << m.p_description << "\"\n";
194
195 if(m.p_implementations) {
196 s << " implementations:\n";
197
198 for(std::list<OksMethodImplementation *>::const_iterator i = m.p_implementations->begin(); i != m.p_implementations->end(); ++i)
199 s << *(*i);
200 }
201 else
202 s << " there are no implementation(s)\n";
203
204 return s;
205}

◆ operator<<() [11/19]

std::ostream & dunedaq::oks::operator<< ( std::ostream & s,
const OksMethodImplementation & i )

Definition at line 48 of file method.cpp.

50{
51 s << " Method implementation:\n"
52 " language: \"" << i.get_language() << "\"\n"
53 " prototype: \"" << i.get_prototype() << "\"\n"
54 " body: \"" << i.get_body() << "\"\n";
55
56 return s;
57}
const std::string & get_body() const noexcept
Definition method.hpp:104
const std::string & get_language() const noexcept
Definition method.hpp:68
const std::string & get_prototype() const noexcept
Definition method.hpp:87

◆ operator<<() [12/19]

std::ostream & dunedaq::oks::operator<< ( std::ostream & s,
const OksObject & o )

Send to stream complete description of OKS object:

  • print class name and ID
  • print value of all attributes and relationships

Definition at line 1654 of file object.cpp.

1656{
1658
1659 const OksClass * c = o.uid.class_id;
1660
1661 s << "Object " << &o << std::endl;
1662
1663 OksData * di = o.data;
1664
1665
1666 // print attributes
1667
1668 {
1669 const std::list<OksAttribute *> * alist = c->all_attributes();
1670
1671 if(alist && !alist->empty()) {
1672 s << " Attributes are:\n";
1673
1674 for(std::list<OksAttribute *>::const_iterator i = alist->begin(); i != alist->end(); ++i) {
1675 if((*i)->is_integer() && (*i)->get_format() != OksAttribute::Dec) {
1676 s.setf(((*i)->get_format() == OksAttribute::Hex ? std::ios::hex : std::ios::oct), std::ios::basefield);
1677 s.setf(std::ios::showbase);
1678 }
1679
1680 s << " " << (*i)->get_name() << ": " << *di++ << std::endl;
1681
1682 if((*i)->is_integer() && (*i)->get_format() != OksAttribute::Dec) {
1683 s.setf(std::ios::dec, std::ios::basefield);
1684 s.unsetf(std::ios::showbase);
1685 }
1686 }
1687 }
1688 else
1689 s << " There are no attributes\n";
1690 }
1691
1692
1693 // print relationships
1694
1695 {
1696 const std::list<OksRelationship *> * rlist = c->all_relationships();
1697
1698 if(rlist && !rlist->empty()) {
1699 s << " Relationships are:\n";
1700
1701 for(std::list<OksRelationship *>::const_iterator i = rlist->begin(); i != rlist->end(); ++i)
1702 s << " " << (*i)->get_name() << ": " << *di++ << std::endl;
1703 }
1704 else
1705 s << " There are no relationships\n";
1706 }
1707
1708 return s;
1709}
OksKernel * p_kernel
Definition class.hpp:958
struct dunedaq::oks::OksObject::OksUid uid

◆ operator<<() [13/19]

std::ostream & dunedaq::oks::operator<< ( std::ostream & s,
const OksObject * o )

Send to stream OKS object reference in format "foo@bar" (i.e. object "foo" from class "bar")

Definition at line 1638 of file object.cpp.

1640{
1641 s << '\"';
1642
1643 if(o)
1644 s << o->GetId() << '@' << o->GetClass()->get_name();
1645 else
1646 s << "(null-obj)";
1647
1648 s << '\"';
1649
1650 return s;
1651}
const std::string & get_name() const noexcept
Definition class.hpp:368

◆ operator<<() [14/19]

std::ostream & dunedaq::oks::operator<< ( std::ostream & s,
const OksProfiler & t )

Definition at line 89 of file profiler.cpp.

91{
92 const int p = s.precision(4);
93
94 printTableLine(s, '=');
95
96 s << '|';
97 s.fill(' ');
98 s.width(76);
99 s.setf(std::ios::left, std::ios::adjustfield);
100 s << " O K S P R O F I L E R " << '|' << std::endl;
101
102 printTableLine(s, '-');
103
104 s << "| Time: ";
105 s.setf(std::ios::right, std::ios::adjustfield);
106 s << std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now()-t.p_start_time_point).count() / 1000.;
107 s.fill(' ');
108 s.width(64);
109 s.setf(std::ios::left, std::ios::adjustfield);
110 s << " seconds" << '|' << std::endl;
111
112 printTableSeparator(s, '-');
113
114 s.fill(' ');
115 s.width(42); s << "| Function name" << '|';
116 s.width(12); s << " # of calls" << '|';
117 s.width(10); s << " total T," << '|';
118 s.width(10); s << " ~T/call," << '|' << std::endl;
119
120 s.fill(' ');
121 s.width(42); s << '|' << "" << '|';
122 s.width(12); s << "" << '|';
123 s.width(10); s << " ms" << '|';
124 s.width(10); s << " µs" << '|' << std::endl;
125
126 for(short i=0; i<=(short)OksProfiler::QueryOperatorFrom; i++) {
127 if(i==0 || i==12 || i==21 || i==32) printTableSeparator(s, '-');
128
129 s << "| ";
130
131 s.width(40);
132 s.fill(' ');
133 s.setf(std::ios::left, std::ios::adjustfield);
134 s << OksProfilerFunctionsStr[i] << '|';
135
136 s.width(11);
137 s.setf(std::ios::right, std::ios::adjustfield);
138 s << t.c_total[i] << ' ' << '|';
139
140 if(t.c_total[i]) {
141 s.width(9);
142 s << t.t_total[i]/1000. << ' ' << '|';
143
144 s.width(9);
145 s << t.t_total[i]/(double)t.c_total[i];
146 }
147 else {
148 s.width(10);
149 s << " - " << '|';
150
151 s.width(9);
152 s << " -";
153 }
154
155 s << " |\n";
156 }
157
158 printTableSeparator(s, '=');
159
160 s.precision(p);
161
162 return s;
163}
unsigned long c_total[(unsigned) OksProfiler::QueryOperatorFrom+1]
Definition profiler.hpp:82
std::chrono::time_point< std::chrono::steady_clock > p_start_time_point
Definition profiler.hpp:79
double t_total[(unsigned) OksProfiler::QueryOperatorFrom+1]
Definition profiler.hpp:81
static const char * OksProfilerFunctionsStr[]
Definition profiler.cpp:14
static void printTableSeparator(std::ostream &s, unsigned char c)
Definition profiler.cpp:71
static void printTableLine(std::ostream &s, unsigned char c)
Definition profiler.cpp:81

◆ operator<<() [15/19]

std::ostream & dunedaq::oks::operator<< ( std::ostream & s,
const OksQuery & gqe )

Definition at line 896 of file query.cpp.

898{
899 s << '('
901 << ' ';
902
903 if(gqe.p_expression)
904 s << *gqe.p_expression;
905 else
906 s << "(null)";
907
908 s << ')';
909
910 return s;
911}
static const char * ALL_SUBCLASSES
Definition query.hpp:72
static const char * THIS_CLASS
Definition query.hpp:71
OksQueryExpression * p_expression
Definition query.hpp:99

◆ operator<<() [16/19]

std::ostream & dunedaq::oks::operator<< ( std::ostream & s,
const OksQueryExpression & qe )

Definition at line 783 of file query.cpp.

785{
786 s << '(';
787
788 switch(qe.type()) {
790 OksComparator *cmpr = (OksComparator *)&qe;
791 const OksAttribute *a = cmpr->GetAttribute();
792 OksData *v = cmpr->GetValue();
794
795 if(a) {
796 s << '\"' << a->get_name() << "\" ";
797 }
798 else if(v) {
799 s << OksQuery::OID << ' ';
800 }
801 else {
802 s << "(null) ";
803 }
804
805 if(v) {
806 s << *v << ' ';
807 }
808 else {
809 s << "(null) ";
810 }
811
812 if(f) {
814 else if(f == OksQuery::not_equal_cmp) s << OksQuery::NE;
815 else if(f == OksQuery::reg_exp_cmp) s << OksQuery::RE;
818 else if(f == OksQuery::less_cmp) s << OksQuery::LS;
819 else if(f == OksQuery::greater_cmp) s << OksQuery::GT;
820 }
821 else
822 s << "(null)";
823
824 break; }
825
828 const OksRelationship *r = re->GetRelationship();
829 bool b = re->IsCheckAllObjects();
830 OksQueryExpression *rqe = re->get();
831
832 if(r)
833 s << '\"' << r->get_name() << "\" ";
834 else
835 s << "(null) ";
836
837 s << (b == true ? OksQuery::ALL_SUBCLASSES : OksQuery::SOME) << ' ';
838
839 if(rqe) s << *rqe;
840 else s << "(null)";
841
842 break; }
843
845 s << OksQuery::NOT << ' ' << *(((OksNotExpression *)&qe)->get());
846
847 break;
848
849 case OksQuery::and_type: {
850 s << OksQuery::AND << ' ';
851
852 const std::list<OksQueryExpression *> & elist = ((OksAndExpression *)&qe)->expressions();
853
854 if(!elist.empty()) {
855 const OksQueryExpression * last = elist.back();
856
857 for(std::list<OksQueryExpression *>::const_iterator i = elist.begin(); i != elist.end(); ++i) {
858 s << *(*i);
859 if(*i != last) s << ' ';
860 }
861 }
862
863 break;
864 }
865
866 case OksQuery::or_type: {
867 s << OksQuery::OR << ' ';
868
869 const std::list<OksQueryExpression *> & elist = ((OksOrExpression *)&qe)->expressions();
870
871 if(!elist.empty()) {
872 const OksQueryExpression * last = elist.back();
873
874 for(std::list<OksQueryExpression *>::const_iterator i = elist.begin(); i != elist.end(); ++i) {
875 s << *(*i);
876 if(*i != last) s << ' ';
877 }
878 }
879
880 break;
881 }
882
884 s << "(unknown)";
885
886 break;
887 }
888 }
889
890 s << ')';
891
892 return s;
893}
OKS query logical AND expression class.
Definition query.hpp:287
OKS attribute class.
const std::string & get_name() const noexcept
out stream operator
OKS query expression comparator class.
Definition query.hpp:144
OksQuery::Comparator GetFunction() const
Definition query.hpp:171
const OksAttribute * GetAttribute() const
Definition query.hpp:163
OKS query logical NOT expression class.
Definition query.hpp:233
OKS query logical OR expression class.
Definition query.hpp:299
OKS query expression class.
Definition query.hpp:112
OksQuery::QueryType type() const
Definition query.hpp:119
static bool equal_cmp(const OksData *, const OksData *)
Definition query.cpp:56
static bool reg_exp_cmp(const OksData *, const OksData *regexp)
Definition query.cpp:62
static bool greater_cmp(const OksData *, const OksData *)
Definition query.cpp:61
static const char * OR
Definition query.hpp:67
static const char * RE
Definition query.hpp:76
static const char * OID
Definition query.hpp:73
static bool less_or_equal_cmp(const OksData *, const OksData *)
Definition query.cpp:58
static bool not_equal_cmp(const OksData *, const OksData *)
Definition query.cpp:57
static const char * GT
Definition query.hpp:80
static const char * NOT
Definition query.hpp:69
static const char * SOME
Definition query.hpp:70
static const char * GE
Definition query.hpp:78
static const char * AND
Definition query.hpp:68
static bool greater_or_equal_cmp(const OksData *, const OksData *)
Definition query.cpp:59
static const char * EQ
Definition query.hpp:74
static bool less_cmp(const OksData *, const OksData *)
Definition query.cpp:60
static const char * LE
Definition query.hpp:77
static const char * NE
Definition query.hpp:75
bool(* Comparator)(const OksData *, const OksData *)
Definition query.hpp:93
static const char * LS
Definition query.hpp:79
OKS query relationship expression class.
Definition query.hpp:192

◆ operator<<() [17/19]

std::ostream & dunedaq::oks::operator<< ( std::ostream & s,
const OksRelationship & r )

Definition at line 103 of file relationship.cpp.

105{
106 s << "Relationship name: \"" << r.p_name << "\"\n"
107 " class type: \"" << r.p_rclass << "\"\n"
108 " low cardinality constraint is " << OksRelationship::card2str(r.p_low_cc) << "\n"
109 " high cardinality constraint is " << OksRelationship::card2str(r.p_high_cc) << "\n"
110 " is" << (r.p_composite == true ? "" : " not") << " composite reference\n"
111 " is" << (r.p_exclusive == true ? "" : " not") << " exclusive reference\n"
112 " is " << (r.p_dependent == true ? "dependent" : "shared") << " reference\n"
113 " has description: \"" << r.p_description << "\"\n"
114 " is " << (r.p_ordered == true ? "ordered" : "unordered") << std::endl;
115
116 return s;
117}
static const char * card2str(CardinalityConstraint) noexcept

◆ operator<<() [18/19]

std::ostream & dunedaq::oks::operator<< ( std::ostream & s,
const OksString & str )
inline

Implementation of OksString out stream operator.

Definition at line 428 of file object.hpp.

430{
431 s << *(static_cast<const std::string *>(&str));
432
433 return s;
434}

◆ operator<<() [19/19]

std::ostream & dunedaq::oks::operator<< ( std::ostream & s,
OksKernel & k )

Definition at line 1496 of file kernel.cpp.

1498{
1500
1501 s << "OKS KERNEL DUMP:\n" << "OKS VERSION: " << k.GetVersion() << std::endl;
1502
1503 if (!k.p_schema_files.empty())
1504 {
1505 s << " Loaded schema:\n";
1506
1507 for (const auto& i : k.p_schema_files)
1508 s << " " << i.second->get_full_file_name() << std::endl;
1509
1510 if (!k.p_data_files.empty())
1511 {
1512 s << " Loaded data:\n";
1513
1514 for (const auto& j : k.p_data_files)
1515 s << " " << j.second->get_full_file_name() << std::endl;
1516 }
1517 else
1518 s << " No loaded data files\n";
1519
1520 if (!k.p_classes.empty())
1521 {
1522 s << " The classes:\n";
1523
1524 for (const auto& j : k.p_classes)
1525 s << *j.second;
1526 }
1527 }
1528 else
1529 s << " No loaded schema files\n";
1530
1531 s << "END OF OKS KERNEL DUMP.\n";
1532
1533 return s;
1534}
OksClass::Map p_classes
Definition kernel.hpp:2071
OksFile::Map p_schema_files
Definition kernel.hpp:2055
static const char * GetVersion()
Get OKS version. The method returns string containing CVS tag and date of OKS build.
Definition kernel.cpp:302
OksFile::Map p_data_files
Definition kernel.hpp:2056

◆ operator==() [1/3]

bool dunedaq::oks::operator== ( const OksString & s1,
const char * s2 )
inline

Implementation of OksString logical equality operator.

Definition at line 411 of file object.hpp.

412{
413 return (*(static_cast<const std::string *>(&s1)) == s2);
414}

◆ operator==() [2/3]

bool dunedaq::oks::operator== ( const OksString & s1,
const OksString & s2 )
inline

Implementation of OksString logical equality operator.

Definition at line 393 of file object.hpp.

394{
395 return ( *(static_cast<const std::string *>(&s1)) == *(static_cast<const std::string *>(&s2)) );
396}

◆ operator==() [3/3]

bool dunedaq::oks::operator== ( const OksString & s1,
const std::string & s2 )
inline

Implementation of OksString logical equality operator.

Definition at line 402 of file object.hpp.

403{
404 return ( *(static_cast<const std::string *>(&s1)) == s2 );
405}

◆ printTableLine()

void dunedaq::oks::printTableLine ( std::ostream & s,
unsigned char c )
static

Definition at line 81 of file profiler.cpp.

82{
83 s << '+';
84 s.fill(c);
85 s.width(76);
86 s << "" << '+' << std::endl;
87}

◆ printTableSeparator()

void dunedaq::oks::printTableSeparator ( std::ostream & s,
unsigned char c )
static

Definition at line 71 of file profiler.cpp.

72{
73 s << '+';
74 s.fill(c);
75 s.width(41); s << "" << '+';
76 s.width(12); s << "" << '+';
77 s.width(10); s << "" << '+';
78 s.width(10); s << "" << '+' << std::endl;
79}

◆ reference()

Found unresolved dunedaq::oks::reference ( s )

Definition at line 140 of file kernel.cpp.

140 :\n" << which,
141 ((std::string)which)
142 )
143
144 ERS_DECLARE_ISSUE(
145 kernel,
146 ClassAlreadyDefined,
147 "class \"" << name << "\" is defined in files \"" << f1 << "\" and \"" << f2 << "\"",
148 ((std::string)name)
149 ((std::string)f1)
150 ((std::string)f2)
151 )
152
154 kernel,
155 InternalError,
156 "internal error: " << text,
157 ((std::string)text)
158 )
159
160 std::string
161 CanNotOpenFile::fill(const char * prefix, const std::string& name, const std::string& reason) noexcept
162 {
163 std::string result(prefix);
164 result += "(): ";
165
166 if(name.empty()) return (result + "file name is empty");
167
168 result += "cannot load file \'" + name + '\'' ;
169
170 if(!reason.empty()) {
171 result += " because:\n" + reason;
172 }
173
174 return result;
175 }
176
177 std::string
178 FailedLoadFile::fill(const std::string& what, const std::string& name, const std::string& reason) noexcept
179 {
180 return (std::string("Failed to load ") + what + " \"" + name + "\" because:\n" + reason);
181 }
182
183 std::string
184 FailedReloadFile::fill(const std::string& names, const std::string& reason) noexcept
185 {
186 return (std::string("Failed to re-load file(s) ") + names + " because:\n" + reason);
187 }
188
189 std::string
190 RepositoryOperationFailed::fill(const char * op, const std::string& reason) noexcept
191 {
192 return (std::string("Failed to ") + op + " file(s) because:\n" + reason);
193 }
194
195 std::string
196 CanNotCreateFile::fill(const char * prefix, const char * what, const std::string& name, const std::string& reason) noexcept
197 {
198 return std::string(prefix) + "(): failed to create new " + what + " \'" + name + "\' because:\n" + reason;
199 }
200
201 std::string
202 CanNotCreateRepositoryDir::fill(const char * prefix, const std::string& name) noexcept
203 {
204 return std::string(prefix) + "(): failed to create user repository dir, mkdtemp(\'" + name + "\') failed: " + strerror(errno);
205 }
206
207 std::string
208 CanNotWriteToFile::fill(const char * prefix, const char * item, const std::string& name, const std::string& reason) noexcept
209 {
210 return (std::string(prefix) + "(): failed to write " + item + " to \'" + name + "\' because:\n" + reason);
211 }
212
213 std::string
214 CanNotBackupFile::fill(const std::string& name, const std::string& reason) noexcept
215 {
216 return (std::string("Failed to make a backup file of \'") + name + "\' because:\n" + reason);
217 }
218
219 std::string
220 CanNotSetActiveFile::fill(const char * item, const std::string& name, const std::string& reason) noexcept
221 {
222 return (std::string("Failed to set active ") + item + " file \'" + name + "\' because:\n" + reason);
223 }
224
225 std::string
226 CanNotSetFile::fill(const OksClass * c, const OksObject * o, const OksFile& file, const std::string& reason) noexcept
227 {
228 std::ostringstream s;
229 s << "Failed to move ";
230 if(c) s << "class " << c->get_name();
231 else s << "object " << o;
232 s << " to file \'" << file.get_full_file_name() << "\' because:\n" << reason;
233 return s.str();
234 }
235
236 std::string
237 CannotAddClass::fill(const OksClass &c, const std::string& reason) noexcept
238 {
239 return (std::string("Cannot add class \'") + c.get_name() + "\' because:\n" + reason);
240 }
241
242 std::string
243 CannotResolvePath::fill(const std::string& path, int error_code) noexcept
244 {
245 std::ostringstream text;
246 text << "realpath(\'" << path << "\') has failed with code " << error_code << ": \'" << strerror(error_code) << '\'';
247 return text.str();
248 }
249
250
251 static const std::string&
252 get_temporary_dir()
253 {
254 static std::string s_dir;
255 static std::once_flag flag;
256
257 std::call_once(flag, []()
258 {
259 try
260 {
261 if (!getenv("OKS_GIT_NO_VAR_DIR"))
262 {
263 OksSystem::User myself;
264
265 s_dir = "/var/run/user/";
266 s_dir.append(std::to_string(myself.identity()));
267
268 if (std::filesystem::is_directory(s_dir) == false)
269 {
270 TLOG_DEBUG(1) << "directory " << s_dir << " does not exist";
271 s_dir.clear();
272 }
273 else
274 {
275 const std::filesystem::space_info si = std::filesystem::space(s_dir);
276 const double available = static_cast<double>(si.available) / static_cast<double>(si.capacity);
277
278 if (available < 0.5)
279 {
280 TLOG_DEBUG(1) << "usage of " << s_dir << " is " << static_cast<int>((1.0 - available) * 100.0) << "%, will use standard temporary path";
281 s_dir.clear();
282 }
283 }
284 }
285
286 if (s_dir.empty())
287 s_dir = std::filesystem::temp_directory_path().string();
288 }
289 catch (std::exception& ex)
290 {
291 Oks::error_msg("OksKernel::OksKernel") << "cannot get temporary directory path: " << ex.what() << std::endl;
292 s_dir = "/tmp";
293 }
294 }
295 );
296
297 return s_dir;
298 }
ERS_DECLARE_ISSUE(kernel, SetGroupIdFailed, "cannot set group ID "<< id<< " for the file \'"<< file<< "\': chown() failed with code "<< code<< " , reason = \'"<< why<< '\'',((long) id)((const char *) file)((int) code)((std::string) why)) ERS_DECLARE_ISSUE(kernel

◆ remove_super_class_error()

std::string dunedaq::oks::remove_super_class_error ( const std::string & c1,
const std::string & c2 )
static

Definition at line 926 of file class.cpp.

927{
928 return (std::string("cannot remove superclass \"") + c1 + "\" from class \"" + c2 + '\"');
929}

◆ replace_datetime_spaces()

std::string dunedaq::oks::replace_datetime_spaces ( const std::string & in)
static

Definition at line 5482 of file kernel.cpp.

5483{
5484 std::string out(in);
5485 std::replace(out.begin(), out.end(), ' ', 'T');
5486 return out;
5487}
FELIX Initialization std::string initerror FELIX queue timed out

◆ report_unexpected()

std::string dunedaq::oks::report_unexpected ( const char * what,
const char expected,
const char read )
static

Definition at line 84 of file xml.cpp.

85{
86 std::string s;
87
88 if(what) {
89 s += "Failed to read ";
90 s += what;
91 s += ": ";
92 }
93
94 s += "symbol \'";
95 s += expected;
96 s += "\' is expected instead of \'";
97 s += read;
98 s += '\'';
99
100 return s;
101}

◆ str2date()

boost::gregorian::date dunedaq::oks::str2date ( const char * value,
size_t len )

◆ str2time()

boost::posix_time::ptime dunedaq::oks::str2time ( const char * value,
size_t len,
const char * file_name = nullptr )

◆ strerror()

const std::string dunedaq::oks::strerror ( int error)

Convert C error number to string.

Definition at line 119 of file kernel.cpp.

120{
121 char buffer[1024];
122 buffer[0] = 0;
123 return std::string(strerror_r(error, buffer, 1024));
124}
CIB Buffer std::string descriptor Message from std::string descriptor CIB process error

◆ test_dangling_references()

void dunedaq::oks::test_dangling_references ( const OksObject * obj,
const OksData & d,
const OksRelationship & r,
std::string & result )
static

Definition at line 2946 of file object.cpp.

2947{
2948 if(d.type == OksData::uid_type || d.type == OksData::uid2_type) {
2949 std::ostringstream text;
2950
2951 if(result.empty()) {
2952 text << " * object " << obj << " has dangling references:\n";
2953 }
2954
2955 text << " - object " << d << " referenced via \'" << r.get_name() << "\'\n";
2956
2957 result += text.str();
2958 }
2959}

◆ test_file_existence()

void dunedaq::oks::test_file_existence ( const std::string & file_name,
bool silence,
const std::string & fname,
const char * msg )
static

Definition at line 1600 of file kernel.cpp.

1601{
1602 // test file existence
1603
1604 bool file_exists = false;
1605
1606 {
1607 struct stat buf;
1608 if(stat(file_name.c_str(), &buf) == 0) {
1609 if(!silence) {
1610 Oks::warning_msg(fname) << " File \"" << file_name << "\" already exists\n";
1611 }
1612 file_exists = true;
1613 }
1614 }
1615
1616
1617 // test file permissions
1618
1619 {
1620 std::ofstream f(file_name.c_str());
1621
1622 if(!f) {
1623 if(!silence) {
1624 if(file_exists) {
1625 throw std::runtime_error("cannot open file in write mode");
1626 }
1627 else {
1628 throw std::runtime_error("cannot create file");
1629 }
1630 }
1631 }
1632 }
1633
1634 if(!silence)
1635 std::cout << "Creating new " << msg << " file \"" << file_name << "\"..." << std::endl;
1636}
static std::ostream & warning_msg(const char *)
Definition kernel.cpp:568

◆ throw_validate_not_empty()

void dunedaq::oks::throw_validate_not_empty ( const char * name)

Definition at line 49 of file xml.cpp.

50 {
51 std::string text(name);
52 text += " is not set";
53 throw std::runtime_error(text.c_str());
54 }

◆ trim_dangling()

bool dunedaq::oks::trim_dangling ( OksData & d,
const OksKernel & kernel )
static

Definition at line 1718 of file object.cpp.

1719{
1720 if (d.type == OksData::object_type)
1721 {
1722 if (d.data.OBJECT && kernel.is_dangling(d.data.OBJECT))
1723 {
1724 d.data.OBJECT = nullptr;
1725 }
1726
1727 return (d.data.OBJECT != nullptr);
1728 }
1729 else if(d.type == OksData::list_type)
1730 {
1731 if (d.data.LIST)
1732 {
1733 for (OksData::List::iterator i = d.data.LIST->begin(); i != d.data.LIST->end();)
1734 {
1735 OksData * d2 = *i;
1736 if (d2->type == OksData::object_type)
1737 {
1738 if (d2->data.OBJECT == nullptr || kernel.is_dangling(d2->data.OBJECT))
1739 {
1740 i = d.data.LIST->erase(i);
1741 delete d2;
1742 continue;
1743 }
1744 }
1745 ++i;
1746 }
1747
1748 return (!d.data.LIST->empty());
1749 }
1750 else
1751 return false;
1752 }
1753
1754 return true;
1755}
bool is_dangling(OksClass *class_ptr) const
Check pointer on oks class.
Definition kernel.cpp:4643

◆ validate_init2range()

void dunedaq::oks::validate_init2range ( const OksAttribute * a)

Definition at line 191 of file attribute.cpp.

192{
193 if (!a->get_range().empty() && a->get_data_type() != OksData::class_type)
194 {
195 try
196 {
197 OksData d;
198 d.set_init_value(a, false);
199 d.check_range(a);
200 }
201 catch (std::exception& ex)
202 {
203 std::ostringstream text;
204 text << "failed to set initial value \'" << a->get_init_value() << "\' of attribute \'" << a->get_name() << "\':\n" << ex.what();
205 throw std::runtime_error(text.str().c_str());
206 }
207 }
208}
const std::string & get_range() const noexcept
Get attribute range.
const std::string & get_init_value() const noexcept
static OksData::Type get_data_type(const std::string &type) noexcept
Converts string to attribute OKS data type.

◆ validate_not_empty()

void dunedaq::oks::validate_not_empty ( const std::string & value,
const char * name )
inline

Check string value is not empty. Throw exception if length = 0.

Definition at line 51 of file exceptions.hpp.

51 {
52 if(value.empty()) throw_validate_not_empty(name);
53 }
void throw_validate_not_empty(const char *name)
Definition xml.cpp:49

Variable Documentation

◆ _empty_str

const char dunedaq::oks::_empty_str[] = "empty"

Definition at line 347 of file file.cpp.

◆ BindError

dunedaq::oks::BindError

Definition at line 139 of file kernel.cpp.

◆ OksProfilerFunctionsStr

const char* dunedaq::oks::OksProfilerFunctionsStr[]
static

Definition at line 14 of file profiler.cpp.

14 {
15 "OksKernel::Destructor",
16 "OksKernel::operator<<",
17 "OksKernel::load_schema",
18 "OksKernel::save_schema",
19 "OksKernel::close_schema",
20 "OksKernel::CreateSchemaClassList",
21 "OksKernel::load_data",
22 "OksKernel::save_data",
23 "OksKernel::close_data",
24 "OksKernel::CreateDataObjectList",
25 "OksKernel::is_danglingObject",
26 "OksKernel::is_danglingClass",
27 "OksObject::StreamConstructor",
28 "OksObject::NormalConstructor",
29 "OksObject::CopyConstructor",
30 "OksObject::Destructor",
31 "OksObject::operator==",
32 "OksObject::operator<<",
33 "OksObject::SatisfiesQueryExpression",
34 "OksObject::GetFreeObjectId",
35 "OksObject::PutObject",
36 "OksClass::Constructor",
37 "OksClass::Destructor",
38 "OksClass::operator<<",
39 "OksClass::GetObject",
40 "OksClass::execute_query",
41 "OksClass::RegistrateClass",
42 "OksClass::RegistrateClassChange",
43 "OksClass::RegistrateAttributeChange",
44 "OksClass::RegistrateRelationshipChange",
45 "OksClass::RegistrateInstances",
46 "OksClass::CreateSubClassesList",
47 "oksStringToQuery",
48 "oksStringToQueryExpression",
49 "OksQuery::operator<<"
50};

◆ s_get_cwd_mutex

std::mutex dunedaq::oks::s_get_cwd_mutex
static

Definition at line 57 of file kernel.cpp.

◆ s_git_folders

GitFoldersHolder dunedaq::oks::s_git_folders
static

Definition at line 115 of file kernel.cpp.