If your C/C++ project depends on some external C/C++ projects and you want to make some changes in external functions/methods and you would like to copy/paste these changes automatically then this package may help you.
Project description
cppguts
If your C/C++ project depends on some external C/C++ projects and you want to make some changes in external functions/methods and you would like to copy/paste these changes automatically then this package may help you.
There are two tools:
editcpp
used to edit source code;dumpcpp
used to print some information about C/C++ translation units
We will discuss editcpp
as it is the objective tool.
editcpp
doesn't work with templates.
The idea behind editcpp
tool
editcpp
uses libclang
to find function/method definition start/end lines in text file (.c, .h, .hpp, .cpp or whatever extension you use for your C/C++ project).
libclang
parses each dest.cpp
and src.cpp
and everything that is
included by #include
preprocessor directives. Then editcpp
tool
selects all functions and methods defined in dest.cpp
and src.cpp
(it skips any function/method defined in other file) and
tries to find matching functions/methods. After that editcpp
copies
function/method definition from src.cpp
and paste it to the dest.cpp
while deleting old funcion/method definition.
To find common function editcpp
checks:
- are they both definitions?
- are they both const?
- are they both static?
- are they both vitual?
- are they both functions?
- are they both methods?
- do they both have the same name?
- do they both have the same return type and arg types?
- do they both have the same semantic parent (classname)? (for methods only)
If your new function/method definition uses external types then these types must be preliminary declared (not necessary to define them).
Remember that after editcpp
finds common functions/methods
it will simply copy selected text lines from one file to another.
Example
original function/method definition file dest.h:
#include <iostream>
// helper class that is used by the target class `Src`
class SrcPrivate {
public:
SrcPrivate(){};
void add(int v){
val += v;
}
void substract(int v){
val -= v;
}
private:
int val;
}
// target class
class Src {
// method defined inside the class
void add(SrcPrivate p, int v){
p.add(v);
}
// method defined outside the class
void substract(SrcPrivate p, int v);
// we won't tuch this method
void untouched_print(int v){
std::cout << "The value is:\t" << v << std::endl;
}
}
void Src::substract(SrcPrivate p, int v){
p.substract(v);
}
// simple function
void foo(int &v){
v--;
}
namespace ns {
// function in namespace
void bar(int &v){
v++;
}
}
new function/method definition file src.h:
class SrcPrivate; // declare helper type
// target class
class Src {
// NEW method definition inside class
void add(SrcPrivate p, int v){
p.add(v) + 10;
}
// NEW method definition ouside class
void substract(SrcPrivate p, int v);
}
void Src::substract(SrcPrivate p, int v){
p.substract(v) - 10;
}
// NEW simple function definition
void foo(int &v){
v -= 10;
}
// NEW function definition in namespace
namespace ns {
void bar(int &v){
v += 10;
}
}
Run:
editcpp --src-file=src.h --dest-file=dest.h --oldfile-keep -std=c++03
The -std=c++03
tells the clang to parse the files as C++. Also you may need to use any other clang flags like -I
to include directories that are required by the files.
--oldfile-keep
is used to keep the original file (it will be renamed
by adding _OLD_N
suffix). Otherwise use --oldfile-delete
to delete the
original file.
Another option is to run the test:
python -m unittest cppguts.tests.test_cppguts
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file cppguts-0.1.1.tar.gz
.
File metadata
- Download URL: cppguts-0.1.1.tar.gz
- Upload date:
- Size: 8.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.6.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 176bcc15fe8139e263b24fbcb17ac42cc9e44a3ac1e81a7063058d489f66ae85 |
|
MD5 | 00facc32b02cd29c9377c51d57cd40ea |
|
BLAKE2b-256 | a7e516f2668313242a45294bbfc487be0528b9d3cb9f0d2b16d52258093a0c1e |