mirror of https://github.com/trapexit/mergerfs.git
trapexit
5 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
90 changed files with 3250 additions and 2577 deletions
-
10Makefile
-
38README.md
-
7libfuse/Makefile
-
22libfuse/include/fuse.h
-
10libfuse/include/fuse_common.h
-
13libfuse/include/fuse_lowlevel.h
-
424libfuse/lib/fuse.c
-
69libfuse/lib/fuse_lowlevel.c
-
69man/mergerfs.1
-
239src/branch.cpp
-
39src/branch.hpp
-
444src/config.cpp
-
220src/config.hpp
-
9src/dirinfo.hpp
-
21src/ef.hpp
-
78src/enum.hpp
-
31src/fh.hpp
-
9src/fileinfo.hpp
-
115src/from_string.cpp
-
32src/from_string.hpp
-
39src/func.cpp
-
221src/func.hpp
-
90src/func_category.cpp
-
69src/func_category.hpp
-
46src/funcs.hpp
-
20src/fuse_access.cpp
-
22src/fuse_chmod.cpp
-
24src/fuse_chown.cpp
-
34src/fuse_create.cpp
-
20src/fuse_fgetattr.cpp
-
7src/fuse_fgetattr.hpp
-
39src/fuse_getattr.cpp
-
5src/fuse_getattr.hpp
-
364src/fuse_getxattr.cpp
-
18src/fuse_init.cpp
-
239src/fuse_ioctl.cpp
-
2src/fuse_ioctl.hpp
-
76src/fuse_link.cpp
-
70src/fuse_listxattr.cpp
-
48src/fuse_mkdir.cpp
-
40src/fuse_mknod.cpp
-
20src/fuse_open.cpp
-
2src/fuse_opendir.cpp
-
4src/fuse_readdir_linux.icpp
-
12src/fuse_readdir_plus_linux.icpp
-
4src/fuse_readdir_plus_posix.icpp
-
4src/fuse_readdir_posix.icpp
-
16src/fuse_readlink.cpp
-
4src/fuse_release.cpp
-
26src/fuse_removexattr.cpp
-
112src/fuse_rename.cpp
-
20src/fuse_rmdir.cpp
-
454src/fuse_setxattr.cpp
-
30src/fuse_statfs.cpp
-
36src/fuse_symlink.cpp
-
22src/fuse_truncate.cpp
-
20src/fuse_unlink.cpp
-
23src/fuse_utimens.cpp
-
5src/fuse_write.cpp
-
45src/fuse_write_buf.cpp
-
95src/fusefunc.cpp
-
125src/fusefunc.hpp
-
35src/hw_cpu.cpp
-
27src/hw_cpu.hpp
-
18src/mergerfs.cpp
-
508src/option_parser.cpp
-
8src/option_parser.hpp
-
64src/policy.hpp
-
29src/policy_all.cpp
-
2src/policy_cache.cpp
-
41src/policy_epall.cpp
-
57src/policy_epff.cpp
-
31src/policy_eplfs.cpp
-
35src/policy_eplus.cpp
-
57src/policy_epmfs.cpp
-
6src/policy_eprand.cpp
-
8src/policy_erofs.cpp
-
13src/policy_ff.cpp
-
2src/policy_invalid.cpp
-
15src/policy_lfs.cpp
-
13src/policy_lus.cpp
-
15src/policy_mfs.cpp
-
35src/policy_newest.cpp
-
6src/policy_rand.cpp
-
47src/str.cpp
-
17src/str.hpp
-
58src/to_string.cpp
-
31src/to_string.hpp
-
47src/tofrom_string.hpp
-
131src/tofrom_wrapper.hpp
@ -0,0 +1,21 @@ |
|||
/*
|
|||
ISC License |
|||
|
|||
Copyright (c) 2019, Antonio SJ Musumeci <trapexit@spawn.link> |
|||
|
|||
Permission to use, copy, modify, and/or distribute this software for any |
|||
purpose with or without fee is hereby granted, provided that the above |
|||
copyright notice and this permission notice appear in all copies. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
|||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
|||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|||
*/ |
|||
|
|||
#pragma once
|
|||
|
|||
#define ef(X) else if(X)
|
@ -0,0 +1,78 @@ |
|||
/*
|
|||
ISC License |
|||
|
|||
Copyright (c) 2019, Antonio SJ Musumeci <trapexit@spawn.link> |
|||
|
|||
Permission to use, copy, modify, and/or distribute this software for any |
|||
purpose with or without fee is hereby granted, provided that the above |
|||
copyright notice and this permission notice appear in all copies. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
|||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
|||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|||
*/ |
|||
|
|||
#include "tofrom_string.hpp"
|
|||
|
|||
#include <string>
|
|||
|
|||
template<typename E> |
|||
class Enum : public ToFromString |
|||
{ |
|||
public: |
|||
typedef E ENUM; |
|||
|
|||
public: |
|||
Enum<ENUM>() |
|||
{ |
|||
} |
|||
|
|||
Enum<ENUM>(const ENUM data_) |
|||
: _data(data_) |
|||
{ |
|||
} |
|||
|
|||
public: |
|||
Enum<ENUM>& |
|||
operator=(const ENUM data_) |
|||
{ |
|||
_data = data_; |
|||
return *this; |
|||
} |
|||
|
|||
Enum<ENUM>& |
|||
operator=(const std::string &s_) |
|||
{ |
|||
from_string(s_); |
|||
return *this; |
|||
} |
|||
|
|||
public: |
|||
operator ENUM() const |
|||
{ |
|||
return _data; |
|||
} |
|||
|
|||
public: |
|||
bool operator==(const ENUM data_) const |
|||
{ |
|||
return (_data == data_); |
|||
} |
|||
|
|||
public: |
|||
std::string to_string() const; |
|||
int from_string(const std::string &); |
|||
|
|||
public: |
|||
int to_int() const |
|||
{ |
|||
return (int)_data; |
|||
} |
|||
|
|||
private: |
|||
ENUM _data; |
|||
}; |
@ -0,0 +1,31 @@ |
|||
/*
|
|||
Copyright (c) 2020, Antonio SJ Musumeci <trapexit@spawn.link> |
|||
|
|||
Permission to use, copy, modify, and/or distribute this software for any |
|||
purpose with or without fee is hereby granted, provided that the above |
|||
copyright notice and this permission notice appear in all copies. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
|||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
|||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|||
*/ |
|||
|
|||
#pragma once
|
|||
|
|||
#include <string>
|
|||
|
|||
class FH |
|||
{ |
|||
public: |
|||
FH(const char *fusepath_) |
|||
: fusepath(fusepath_) |
|||
{ |
|||
} |
|||
|
|||
public: |
|||
std::string fusepath; |
|||
}; |
@ -0,0 +1,115 @@ |
|||
/*
|
|||
ISC License |
|||
|
|||
Copyright (c) 2019, Antonio SJ Musumeci <trapexit@spawn.link> |
|||
|
|||
Permission to use, copy, modify, and/or distribute this software for any |
|||
purpose with or without fee is hereby granted, provided that the above |
|||
copyright notice and this permission notice appear in all copies. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
|||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
|||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|||
*/ |
|||
|
|||
#include "ef.hpp"
|
|||
|
|||
#include <string>
|
|||
|
|||
#include <errno.h>
|
|||
#include <stdint.h>
|
|||
#include <stdlib.h>
|
|||
|
|||
namespace str |
|||
{ |
|||
int |
|||
from(const std::string &value_, |
|||
bool *bool_) |
|||
{ |
|||
if((value_ == "true") || |
|||
(value_ == "1") || |
|||
(value_ == "on") || |
|||
(value_ == "yes")) |
|||
*bool_ = true; |
|||
ef((value_ == "false") || |
|||
(value_ == "0") || |
|||
(value_ == "off") || |
|||
(value_ == "no")) |
|||
*bool_ = false; |
|||
else |
|||
return -EINVAL; |
|||
|
|||
return 0; |
|||
} |
|||
|
|||
int |
|||
from(const std::string &value_, |
|||
int *int_) |
|||
{ |
|||
*int_ = ::strtol(value_.c_str(),NULL,10); |
|||
|
|||
return 0; |
|||
} |
|||
|
|||
int |
|||
from(const std::string &value_, |
|||
uint64_t *uint64_) |
|||
{ |
|||
char *endptr; |
|||
uint64_t tmp; |
|||
|
|||
tmp = ::strtoll(value_.c_str(),&endptr,10); |
|||
switch(*endptr) |
|||
{ |
|||
case 'k': |
|||
case 'K': |
|||
tmp *= 1024; |
|||
break; |
|||
|
|||
case 'm': |
|||
case 'M': |
|||
tmp *= (1024 * 1024); |
|||
break; |
|||
|
|||
case 'g': |
|||
case 'G': |
|||
tmp *= (1024 * 1024 * 1024); |
|||
break; |
|||
|
|||
case 't': |
|||
case 'T': |
|||
tmp *= (1024ULL * 1024 * 1024 * 1024); |
|||
break; |
|||
|
|||
case '\0': |
|||
break; |
|||
|
|||
default: |
|||
return -EINVAL; |
|||
} |
|||
|
|||
*uint64_ = tmp; |
|||
|
|||
return 0; |
|||
} |
|||
|
|||
int |
|||
from(const std::string &value_, |
|||
std::string *str_) |
|||
{ |
|||
*str_ = value_; |
|||
|
|||
return 0; |
|||
} |
|||
|
|||
int |
|||
from(const std::string &value_, |
|||
const std::string *key_) |
|||
{ |
|||
return -EINVAL; |
|||
} |
|||
} |
@ -0,0 +1,32 @@ |
|||
/*
|
|||
ISC License |
|||
|
|||
Copyright (c) 2019, Antonio SJ Musumeci <trapexit@spawn.link> |
|||
|
|||
Permission to use, copy, modify, and/or distribute this software for any |
|||
purpose with or without fee is hereby granted, provided that the above |
|||
copyright notice and this permission notice appear in all copies. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
|||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
|||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|||
*/ |
|||
|
|||
#pragma once
|
|||
|
|||
#include <string>
|
|||
|
|||
#include <stdint.h>
|
|||
|
|||
namespace str |
|||
{ |
|||
int from(const std::string &, bool *); |
|||
int from(const std::string &, int *); |
|||
int from(const std::string &, uint64_t *); |
|||
int from(const std::string &, std::string *); |
|||
int from(const std::string &, const std::string *); |
|||
} |
@ -0,0 +1,39 @@ |
|||
/*
|
|||
ISC License |
|||
|
|||
Copyright (c) 2019, Antonio SJ Musumeci <trapexit@spawn.link> |
|||
|
|||
Permission to use, copy, modify, and/or distribute this software for any |
|||
purpose with or without fee is hereby granted, provided that the above |
|||
copyright notice and this permission notice appear in all copies. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
|||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
|||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|||
*/ |
|||
|
|||
#include "func.hpp"
|
|||
|
|||
int |
|||
Func::from_string(const std::string &s_) |
|||
{ |
|||
const Policy *tmp; |
|||
|
|||
tmp = &Policy::find(s_); |
|||
if(tmp == Policy::invalid) |
|||
return -EINVAL; |
|||
|
|||
policy = tmp; |
|||
|
|||
return 0; |
|||
} |
|||
|
|||
std::string |
|||
Func::to_string(void) const |
|||
{ |
|||
return policy->to_string(); |
|||
} |
@ -0,0 +1,221 @@ |
|||
/*
|
|||
ISC License |
|||
|
|||
Copyright (c) 2019, Antonio SJ Musumeci <trapexit@spawn.link> |
|||
|
|||
Permission to use, copy, modify, and/or distribute this software for any |
|||
purpose with or without fee is hereby granted, provided that the above |
|||
copyright notice and this permission notice appear in all copies. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
|||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
|||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|||
*/ |
|||
|
|||
#pragma once
|
|||
|
|||
#include "policy.hpp"
|
|||
#include "tofrom_string.hpp"
|
|||
|
|||
#include <string>
|
|||
#include <iostream>
|
|||
|
|||
class Func : public ToFromString |
|||
{ |
|||
public: |
|||
Func(const Policy &policy_) |
|||
: policy(&policy_) |
|||
{ |
|||
} |
|||
|
|||
public: |
|||
int from_string(const std::string &s); |
|||
std::string to_string() const; |
|||
|
|||
public: |
|||
const Policy *policy; |
|||
}; |
|||
|
|||
class FuncAccess : public Func |
|||
{ |
|||
public: |
|||
FuncAccess() |
|||
: Func(Policy::ff) |
|||
{ |
|||
} |
|||
}; |
|||
|
|||
class FuncChmod : public Func |
|||
{ |
|||
public: |
|||
FuncChmod() |
|||
: Func(Policy::epall) |
|||
{ |
|||
} |
|||
}; |
|||
|
|||
class FuncChown : public Func |
|||
{ |
|||
public: |
|||
FuncChown() |
|||
: Func(Policy::epall) |
|||
{ |
|||
} |
|||
}; |
|||
|
|||
class FuncCreate : public Func |
|||
{ |
|||
public: |
|||
FuncCreate() |
|||
: Func(Policy::epmfs) |
|||
{ |
|||
} |
|||
}; |
|||
|
|||
class FuncGetAttr : public Func |
|||
{ |
|||
public: |
|||
FuncGetAttr() |
|||
: Func(Policy::ff) |
|||
{ |
|||
} |
|||
}; |
|||
|
|||
class FuncGetXAttr : public Func |
|||
{ |
|||
public: |
|||
FuncGetXAttr() |
|||
: Func(Policy::ff) |
|||
{ |
|||
} |
|||
}; |
|||
|
|||
class FuncLink : public Func |
|||
{ |
|||
public: |
|||
FuncLink() |
|||
: Func(Policy::epall) |
|||
{ |
|||
} |
|||
}; |
|||
|
|||
class FuncListXAttr : public Func |
|||
{ |
|||
public: |
|||
FuncListXAttr() |
|||
: Func(Policy::ff) |
|||
{ |
|||
} |
|||
}; |
|||
|
|||
class FuncMkdir : public Func |
|||
{ |
|||
public: |
|||
FuncMkdir() |
|||
: Func(Policy::epmfs) |
|||
{ |
|||
} |
|||
}; |
|||
|
|||
class FuncMknod : public Func |
|||
{ |
|||
public: |
|||
FuncMknod() |
|||
: Func(Policy::epmfs) |
|||
{ |
|||
} |
|||
}; |
|||
|
|||
class FuncOpen : public Func |
|||
{ |
|||
public: |
|||
FuncOpen() |
|||
: Func(Policy::ff) |
|||
{ |
|||
} |
|||
}; |
|||
|
|||
class FuncReadlink : public Func |
|||
{ |
|||
public: |
|||
FuncReadlink() |
|||
: Func(Policy::ff) |
|||
{ |
|||
} |
|||
}; |
|||
|
|||
class FuncRemoveXAttr : public Func |
|||
{ |
|||
public: |
|||
FuncRemoveXAttr() |
|||
: Func(Policy::epall) |
|||
{ |
|||
} |
|||
}; |
|||
|
|||
class FuncRename : public Func |
|||
{ |
|||
public: |
|||
FuncRename() |
|||
: Func(Policy::epall) |
|||
{ |
|||
} |
|||
}; |
|||
|
|||
class FuncRmdir : public Func |
|||
{ |
|||
public: |
|||
FuncRmdir() |
|||
: Func(Policy::epall) |
|||
{ |
|||
} |
|||
}; |
|||
|
|||
class FuncSetXAttr : public Func |
|||
{ |
|||
public: |
|||
FuncSetXAttr() |
|||
: Func(Policy::epall) |
|||
{ |
|||
} |
|||
}; |
|||
|
|||
class FuncSymlink : public Func |
|||
{ |
|||
public: |
|||
FuncSymlink() |
|||
: Func(Policy::epmfs) |
|||
{ |
|||
} |
|||
}; |
|||
|
|||
class FuncTruncate : public Func |
|||
{ |
|||
public: |
|||
FuncTruncate() |
|||
: Func(Policy::epall) |
|||
{ |
|||
} |
|||
}; |
|||
|
|||
class FuncUnlink : public Func |
|||
{ |
|||
public: |
|||
FuncUnlink() |
|||
: Func(Policy::epall) |
|||
{ |
|||
} |
|||
}; |
|||
|
|||
class FuncUtimens : public Func |
|||
{ |
|||
public: |
|||
FuncUtimens() |
|||
: Func(Policy::epall) |
|||
{ |
|||
} |
|||
}; |
@ -0,0 +1,90 @@ |
|||
/*
|
|||
ISC License |
|||
|
|||
Copyright (c) 2019, Antonio SJ Musumeci <trapexit@spawn.link> |
|||
|
|||
Permission to use, copy, modify, and/or distribute this software for any |
|||
purpose with or without fee is hereby granted, provided that the above |
|||
copyright notice and this permission notice appear in all copies. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
|||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
|||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|||
*/ |
|||
|
|||
#include "func_category.hpp"
|
|||
#include "str.hpp"
|
|||
|
|||
#include "buildvector.hpp"
|
|||
|
|||
#include <algorithm>
|
|||
#include <string>
|
|||
#include <vector>
|
|||
|
|||
int |
|||
FuncCategory::from_string(const std::string &s_) |
|||
{ |
|||
const Policy *tmp; |
|||
|
|||
tmp = &Policy::find(s_); |
|||
if(tmp == &Policy::invalid) |
|||
return -EINVAL; |
|||
|
|||
for(uint64_t i = 0; i < _funcs.size(); i++) |
|||
_funcs[i]->policy = tmp; |
|||
|
|||
return 0; |
|||
} |
|||
|
|||
std::string |
|||
FuncCategory::to_string(void) const |
|||
{ |
|||
std::vector<std::string> rv; |
|||
|
|||
for(uint64_t i = 0; i < _funcs.size(); i++) |
|||
rv.push_back(_funcs[i]->policy->to_string()); |
|||
|
|||
std::sort(rv.begin(),rv.end()); |
|||
rv.erase(std::unique(rv.begin(),rv.end()),rv.end()); |
|||
|
|||
return str::join(rv,','); |
|||
} |
|||
|
|||
FuncCategoryCreate::FuncCategoryCreate(Funcs &funcs_) |
|||
{ |
|||
_funcs = buildvector<Func*> |
|||
(&funcs_.create) |
|||
(&funcs_.mkdir) |
|||
(&funcs_.mknod) |
|||
(&funcs_.symlink); |
|||
} |
|||
|
|||
FuncCategoryAction::FuncCategoryAction(Funcs &funcs_) |
|||
{ |
|||
_funcs = buildvector<Func*> |
|||
(&funcs_.chmod) |
|||
(&funcs_.chown) |
|||
(&funcs_.link) |
|||
(&funcs_.removexattr) |
|||
(&funcs_.rename) |
|||
(&funcs_.rmdir) |
|||
(&funcs_.setxattr) |
|||
(&funcs_.truncate) |
|||
(&funcs_.unlink) |
|||
(&funcs_.utimens); |
|||
} |
|||
|
|||
FuncCategorySearch::FuncCategorySearch(Funcs &funcs_) |
|||
{ |
|||
_funcs = buildvector<Func*> |
|||
(&funcs_.access) |
|||
(&funcs_.getattr) |
|||
(&funcs_.getxattr) |
|||
(&funcs_.listxattr) |
|||
(&funcs_.open) |
|||
(&funcs_.readlink); |
|||
} |
@ -0,0 +1,69 @@ |
|||
/*
|
|||
ISC License |
|||
|
|||
Copyright (c) 2019, Antonio SJ Musumeci <trapexit@spawn.link> |
|||
|
|||
Permission to use, copy, modify, and/or distribute this software for any |
|||
purpose with or without fee is hereby granted, provided that the above |
|||
copyright notice and this permission notice appear in all copies. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
|||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
|||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|||
*/ |
|||
|
|||
#pragma once
|
|||
|
|||
#include "funcs.hpp"
|
|||
#include "tofrom_string.hpp"
|
|||
|
|||
#include <string>
|
|||
#include <vector>
|
|||
|
|||
class FuncCategory : public ToFromString |
|||
{ |
|||
public: |
|||
int from_string(const std::string &); |
|||
std::string to_string(void) const; |
|||
|
|||
protected: |
|||
std::vector<Func*> _funcs; |
|||
}; |
|||
|
|||
class FuncCategoryCreate : public FuncCategory |
|||
{ |
|||
public: |
|||
FuncCategoryCreate(Funcs &funcs_); |
|||
}; |
|||
|
|||
class FuncCategoryAction : public FuncCategory |
|||
{ |
|||
public: |
|||
FuncCategoryAction(Funcs &funcs_); |
|||
}; |
|||
|
|||
class FuncCategorySearch : public FuncCategory |
|||
{ |
|||
public: |
|||
FuncCategorySearch(Funcs &funcs_); |
|||
}; |
|||
|
|||
class FuncCategories |
|||
{ |
|||
public: |
|||
FuncCategories(Funcs &funcs_) |
|||
: action(funcs_), |
|||
create(funcs_), |
|||
search(funcs_) |
|||
{ |
|||
} |
|||
|
|||
public: |
|||
FuncCategoryAction action; |
|||
FuncCategoryCreate create; |
|||
FuncCategorySearch search; |
|||
}; |
@ -0,0 +1,46 @@ |
|||
/*
|
|||
ISC License |
|||
|
|||
Copyright (c) 2019, Antonio SJ Musumeci <trapexit@spawn.link> |
|||
|
|||
Permission to use, copy, modify, and/or distribute this software for any |
|||
purpose with or without fee is hereby granted, provided that the above |
|||
copyright notice and this permission notice appear in all copies. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
|||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
|||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|||
*/ |
|||
|
|||
#pragma once
|
|||
|
|||
#include "func.hpp"
|
|||
|
|||
class Funcs |
|||
{ |
|||
public: |
|||
FuncAccess access; |
|||
FuncChmod chmod; |
|||
FuncChown chown; |
|||
FuncCreate create; |
|||
FuncGetAttr getattr; |
|||
FuncGetXAttr getxattr; |
|||
FuncLink link; |
|||
FuncListXAttr listxattr; |
|||
FuncMkdir mkdir; |
|||
FuncMknod mknod; |
|||
FuncOpen open; |
|||
FuncReadlink readlink; |
|||
FuncRemoveXAttr removexattr; |
|||
FuncRename rename; |
|||
FuncRmdir rmdir; |
|||
FuncSetXAttr setxattr; |
|||
FuncSymlink symlink; |
|||
FuncTruncate truncate; |
|||
FuncUnlink unlink; |
|||
FuncUtimens utimens; |
|||
}; |
@ -1,95 +0,0 @@ |
|||
/*
|
|||
Copyright (c) 2016, Antonio SJ Musumeci <trapexit@spawn.link> |
|||
|
|||
Permission to use, copy, modify, and/or distribute this software for any |
|||
purpose with or without fee is hereby granted, provided that the above |
|||
copyright notice and this permission notice appear in all copies. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
|||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
|||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|||
*/ |
|||
|
|||
#include <string>
|
|||
#include <vector>
|
|||
|
|||
#include "buildvector.hpp"
|
|||
#include "category.hpp"
|
|||
#include "fusefunc.hpp"
|
|||
|
|||
#define FUSEFUNC(X,Y) FuseFunc(FuseFunc::Enum::X,#X,Category::Enum::Y)
|
|||
|
|||
const std::vector<FuseFunc> FuseFunc::_fusefuncs_ = |
|||
buildvector<FuseFunc,true> |
|||
(FUSEFUNC(invalid,invalid)) |
|||
(FUSEFUNC(access,search)) |
|||
(FUSEFUNC(chmod,action)) |
|||
(FUSEFUNC(chown,action)) |
|||
(FUSEFUNC(create,create)) |
|||
(FUSEFUNC(getattr,search)) |
|||
(FUSEFUNC(getxattr,search)) |
|||
(FUSEFUNC(link,action)) |
|||
(FUSEFUNC(listxattr,search)) |
|||
(FUSEFUNC(mkdir,create)) |
|||
(FUSEFUNC(mknod,create)) |
|||
(FUSEFUNC(open,search)) |
|||
(FUSEFUNC(readlink,search)) |
|||
(FUSEFUNC(removexattr,action)) |
|||
(FUSEFUNC(rename,action)) |
|||
(FUSEFUNC(rmdir,action)) |
|||
(FUSEFUNC(setxattr,action)) |
|||
(FUSEFUNC(symlink,create)) |
|||
(FUSEFUNC(truncate,action)) |
|||
(FUSEFUNC(unlink,action)) |
|||
(FUSEFUNC(utimens,action)) |
|||
; |
|||
|
|||
const FuseFunc * const FuseFunc::fusefuncs = &_fusefuncs_[1]; |
|||
|
|||
const FuseFunc &FuseFunc::invalid = FuseFunc::fusefuncs[FuseFunc::Enum::invalid]; |
|||
const FuseFunc &FuseFunc::access = FuseFunc::fusefuncs[FuseFunc::Enum::access]; |
|||
const FuseFunc &FuseFunc::chmod = FuseFunc::fusefuncs[FuseFunc::Enum::chmod]; |
|||
const FuseFunc &FuseFunc::chown = FuseFunc::fusefuncs[FuseFunc::Enum::chown]; |
|||
const FuseFunc &FuseFunc::create = FuseFunc::fusefuncs[FuseFunc::Enum::create]; |
|||
const FuseFunc &FuseFunc::getattr = FuseFunc::fusefuncs[FuseFunc::Enum::getattr]; |
|||
const FuseFunc &FuseFunc::getxattr = FuseFunc::fusefuncs[FuseFunc::Enum::getxattr]; |
|||
const FuseFunc &FuseFunc::link = FuseFunc::fusefuncs[FuseFunc::Enum::link]; |
|||
const FuseFunc &FuseFunc::listxattr = FuseFunc::fusefuncs[FuseFunc::Enum::listxattr]; |
|||
const FuseFunc &FuseFunc::mkdir = FuseFunc::fusefuncs[FuseFunc::Enum::mkdir]; |
|||
const FuseFunc &FuseFunc::mknod = FuseFunc::fusefuncs[FuseFunc::Enum::mknod]; |
|||
const FuseFunc &FuseFunc::open = FuseFunc::fusefuncs[FuseFunc::Enum::open]; |
|||
const FuseFunc &FuseFunc::readlink = FuseFunc::fusefuncs[FuseFunc::Enum::readlink]; |
|||
const FuseFunc &FuseFunc::removexattr = FuseFunc::fusefuncs[FuseFunc::Enum::removexattr]; |
|||
const FuseFunc &FuseFunc::rmdir = FuseFunc::fusefuncs[FuseFunc::Enum::rmdir]; |
|||
const FuseFunc &FuseFunc::setxattr = FuseFunc::fusefuncs[FuseFunc::Enum::setxattr]; |
|||
const FuseFunc &FuseFunc::symlink = FuseFunc::fusefuncs[FuseFunc::Enum::symlink]; |
|||
const FuseFunc &FuseFunc::truncate = FuseFunc::fusefuncs[FuseFunc::Enum::truncate]; |
|||
const FuseFunc &FuseFunc::unlink = FuseFunc::fusefuncs[FuseFunc::Enum::unlink]; |
|||
const FuseFunc &FuseFunc::utimens = FuseFunc::fusefuncs[FuseFunc::Enum::utimens]; |
|||
|
|||
const |
|||
FuseFunc& |
|||
FuseFunc::find(const std::string &str) |
|||
{ |
|||
for(int i = Enum::BEGIN; i != Enum::END; ++i) |
|||
{ |
|||
if(fusefuncs[i] == str) |
|||
return fusefuncs[i]; |
|||
} |
|||
|
|||
return invalid; |
|||
} |
|||
|
|||
const |
|||
FuseFunc& |
|||
FuseFunc::find(const FuseFunc::Enum::Type i) |
|||
{ |
|||
if((i >= FuseFunc::Enum::BEGIN) && (i < FuseFunc::Enum::END)) |
|||
return fusefuncs[i]; |
|||
|
|||
return invalid; |
|||
} |
@ -1,125 +0,0 @@ |
|||
/*
|
|||
Copyright (c) 2016, Antonio SJ Musumeci <trapexit@spawn.link> |
|||
|
|||
Permission to use, copy, modify, and/or distribute this software for any |
|||
purpose with or without fee is hereby granted, provided that the above |
|||
copyright notice and this permission notice appear in all copies. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
|||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
|||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|||
*/ |
|||
|
|||
#pragma once
|
|||
|
|||
#include "category.hpp"
|
|||
|
|||
#include <string>
|
|||
#include <vector>
|
|||
|
|||
class FuseFunc |
|||
{ |
|||
public: |
|||
struct Enum |
|||
{ |
|||
enum Type |
|||
{ |
|||
invalid = -1, |
|||
BEGIN = 0, |
|||
access = BEGIN, |
|||
chmod, |
|||
chown, |
|||
create, |
|||
getattr, |
|||
getxattr, |
|||
link, |
|||
listxattr, |
|||
mkdir, |
|||
mknod, |
|||
open, |
|||
readlink, |
|||
removexattr, |
|||
rename, |
|||
rmdir, |
|||
setxattr, |
|||
symlink, |
|||
truncate, |
|||
unlink, |
|||
utimens, |
|||
END |
|||
}; |
|||
}; |
|||
|
|||
private: |
|||
Enum::Type _enum; |
|||
std::string _str; |
|||
Category::Enum::Type _category; |
|||
|
|||
public: |
|||
FuseFunc() |
|||
: _enum(invalid), |
|||
_str(invalid), |
|||
_category(Category::Enum::invalid) |
|||
{ |
|||
} |
|||
|
|||
FuseFunc(const Enum::Type enum_, |
|||
const std::string &str_, |
|||
const Category::Enum::Type category_) |
|||
: _enum(enum_), |
|||
_str(str_), |
|||
_category(category_) |
|||
{ |
|||
} |
|||
|
|||
public: |
|||
operator const Enum::Type() const { return _enum; } |
|||
operator const std::string&() const { return _str; } |
|||
operator const Category::Enum::Type() const { return _category; } |
|||
operator const FuseFunc*() const { return this; } |
|||
|
|||
bool operator==(const std::string &str_) const |
|||
{ return _str == str_; } |
|||
|
|||
bool operator==(const Enum::Type enum_) const |
|||
{ return _enum == enum_; } |
|||
|
|||
bool operator!=(const FuseFunc &r) const |
|||
{ return _enum != r._enum; } |
|||
|
|||
bool operator<(const FuseFunc &r) const |
|||
{ return _enum < r._enum; } |
|||
|
|||
public: |
|||
static const FuseFunc &find(const std::string&); |
|||
static const FuseFunc &find(const Enum::Type); |
|||
|
|||
public: |
|||
static const std::vector<FuseFunc> _fusefuncs_; |
|||
static const FuseFunc * const fusefuncs; |
|||
static const FuseFunc &invalid; |
|||
static const FuseFunc &access; |
|||
static const FuseFunc &chmod; |
|||
static const FuseFunc &chown; |
|||
static const FuseFunc &create; |
|||
static const FuseFunc &getattr; |
|||
static const FuseFunc &getxattr; |
|||
static const FuseFunc &link; |
|||
static const FuseFunc &listxattr; |
|||
static const FuseFunc &mkdir; |
|||
static const FuseFunc &mknod; |
|||
static const FuseFunc &open; |
|||
static const FuseFunc &readlink; |
|||
static const FuseFunc &removexattr; |
|||
static const FuseFunc &rename; |
|||
static const FuseFunc &rmdir; |
|||
static const FuseFunc &setxattr; |
|||
static const FuseFunc &symlink; |
|||
static const FuseFunc &truncate; |
|||
static const FuseFunc &unlink; |
|||
static const FuseFunc &utimens; |
|||
}; |
@ -0,0 +1,35 @@ |
|||
/*
|
|||
ISC License |
|||
|
|||
Copyright (c) 2019, Antonio SJ Musumeci <trapexit@spawn.link> |
|||
|
|||
Permission to use, copy, modify, and/or distribute this software for any |
|||
purpose with or without fee is hereby granted, provided that the above |
|||
copyright notice and this permission notice appear in all copies. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
|||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
|||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|||
*/ |
|||
|
|||
#include <unistd.h>
|
|||
|
|||
namespace hw |
|||
{ |
|||
namespace cpu |
|||
{ |
|||
int |
|||
logical_core_count(void) |
|||
{ |
|||
#if defined _SC_NPROCESSORS_ONLN
|
|||
return ::sysconf(_SC_NPROCESSORS_ONLN); |
|||
#else
|
|||
return 1; |
|||
#endif
|
|||
} |
|||
} |
|||
} |
@ -0,0 +1,27 @@ |
|||
/*
|
|||
ISC License |
|||
|
|||
Copyright (c) 2020, Antonio SJ Musumeci <trapexit@spawn.link> |
|||
|
|||
Permission to use, copy, modify, and/or distribute this software for any |
|||
purpose with or without fee is hereby granted, provided that the above |
|||
copyright notice and this permission notice appear in all copies. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
|||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
|||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|||
*/ |
|||
|
|||
#pragma once
|
|||
|
|||
namespace hw |
|||
{ |
|||
namespace cpu |
|||
{ |
|||
int logical_core_count(void); |
|||
} |
|||
} |
@ -0,0 +1,58 @@ |
|||
/*
|
|||
ISC License |
|||
|
|||
Copyright (c) 2019, Antonio SJ Musumeci <trapexit@spawn.link> |
|||
|
|||
Permission to use, copy, modify, and/or distribute this software for any |
|||
purpose with or without fee is hereby granted, provided that the above |
|||
copyright notice and this permission notice appear in all copies. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
|||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
|||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|||
*/ |
|||
|
|||
#include <string>
|
|||
|
|||
#include <inttypes.h>
|
|||
#include <stdint.h>
|
|||
#include <stdio.h>
|
|||
|
|||
namespace str |
|||
{ |
|||
std::string |
|||
to(const bool bool_) |
|||
{ |
|||
return (bool_ ? "true" : "false"); |
|||
} |
|||
|
|||
std::string |
|||
to(const int int_) |
|||
{ |
|||
char buf[24]; |
|||
|
|||
sprintf(buf,"%d",int_); |
|||
|
|||
return buf; |
|||
} |
|||
|
|||
std::string |
|||
to(const uint64_t uint64_) |
|||
{ |
|||
char buf[64]; |
|||
|
|||
sprintf(buf,"%llu",(unsigned long long)uint64_); |
|||
|
|||
return buf; |
|||
} |
|||
|
|||
std::string |
|||
to(const std::string &s_) |
|||
{ |
|||
return s_; |
|||
} |
|||
} |
@ -0,0 +1,31 @@ |
|||
/*
|
|||
ISC License |
|||
|
|||
Copyright (c) 2019, Antonio SJ Musumeci <trapexit@spawn.link> |
|||
|
|||
Permission to use, copy, modify, and/or distribute this software for any |
|||
purpose with or without fee is hereby granted, provided that the above |
|||
copyright notice and this permission notice appear in all copies. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
|||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
|||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|||
*/ |
|||
|
|||
#pragma once
|
|||
|
|||
#include <string>
|
|||
|
|||
#include <stdint.h>
|
|||
|
|||
namespace str |
|||
{ |
|||
std::string to(const bool); |
|||
std::string to(const int); |
|||
std::string to(const uint64_t); |
|||
std::string to(const std::string&); |
|||
} |
@ -0,0 +1,47 @@ |
|||
/*
|
|||
ISC License |
|||
|
|||
Copyright (c) 2019, Antonio SJ Musumeci <trapexit@spawn.link> |
|||
|
|||
Permission to use, copy, modify, and/or distribute this software for any |
|||
purpose with or without fee is hereby granted, provided that the above |
|||
copyright notice and this permission notice appear in all copies. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
|||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
|||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|||
*/ |
|||
|
|||
#pragma once
|
|||
|
|||
#include <string>
|
|||
|
|||
class ToFromString |
|||
{ |
|||
public: |
|||
virtual std::string to_string() const = 0; |
|||
virtual int from_string(const std::string &) = 0; |
|||
}; |
|||
|
|||
namespace std |
|||
{ |
|||
inline |
|||
static |
|||
std::string |
|||
to_string(const ToFromString *o_) |
|||
{ |
|||
return o_->to_string(); |
|||
} |
|||
|
|||
inline |
|||
static |
|||
std::string |
|||
to_string(const ToFromString &o_) |
|||
{ |
|||
return o_.to_string(); |
|||
} |
|||
} |
@ -0,0 +1,131 @@ |
|||
/*
|
|||
ISC License |
|||
|
|||
Copyright (c) 2020, Antonio SJ Musumeci <trapexit@spawn.link> |
|||
|
|||
Permission to use, copy, modify, and/or distribute this software for any |
|||
purpose with or without fee is hereby granted, provided that the above |
|||
copyright notice and this permission notice appear in all copies. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
|||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
|||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|||
*/ |
|||
|
|||
#pragma once
|
|||
|
|||
#include "from_string.hpp"
|
|||
#include "to_string.hpp"
|
|||
#include "tofrom_string.hpp"
|
|||
|
|||
#include <errno.h>
|
|||
|
|||
template<typename T> |
|||
class ToFromWrapper : public ToFromString |
|||
{ |
|||
public: |
|||
int |
|||
from_string(const std::string &s_) |
|||
{ |
|||
return str::from(s_,&_data); |
|||
} |
|||
|
|||
std::string |
|||
to_string(void) const |
|||
{ |
|||
return str::to(_data); |
|||
} |
|||
|
|||
public: |
|||
ToFromWrapper<T>() |
|||
{ |
|||
} |
|||
|
|||
ToFromWrapper<T>(const T data_) |
|||
: _data(data_) |
|||
{ |
|||
} |
|||
|
|||
public: |
|||
ToFromWrapper<T>& |
|||
operator=(const T data_) |
|||
{ |
|||
_data = data_; |
|||
return *this; |
|||
} |
|||
|
|||
public: |
|||
operator T() const |
|||
{ |
|||
return _data; |
|||
} |
|||
|
|||
T* |
|||
operator->() |
|||
{ |
|||
return &_data; |
|||
} |
|||
|
|||
public: |
|||
bool |
|||
operator==(const T data_) const |
|||
{ |
|||
return (_data == data_); |
|||
} |
|||
|
|||
private: |
|||
T _data; |
|||
}; |
|||
|
|||
template<typename T> |
|||
class ROToFromWrapper : public ToFromString |
|||
{ |
|||
public: |
|||
int |
|||
from_string(const std::string &s_) |
|||
{ |
|||
return -EINVAL; |
|||
} |
|||
|
|||
std::string |
|||
to_string(void) const |
|||
{ |
|||
return str::to(_data); |
|||
} |
|||
|
|||
public: |
|||
ROToFromWrapper<T>() |
|||
{ |
|||
} |
|||
|
|||
ROToFromWrapper<T>(const T data_) |
|||
: _data(data_) |
|||
{ |
|||
} |
|||
|
|||
public: |
|||
operator T() const |
|||
{ |
|||
return _data; |
|||
} |
|||
|
|||
T* |
|||
operator->() |
|||
{ |
|||
return &_data; |
|||
} |
|||
|
|||
public: |
|||
bool |
|||
operator==(const T data_) const |
|||
{ |
|||
return (_data == data_); |
|||
} |
|||
|
|||
private: |
|||
T _data; |
|||
}; |
Write
Preview
Loading…
Cancel
Save
Reference in new issue