latest SDK
This commit is contained in:
77
foobar2000/SDK/utility.cpp
Normal file
77
foobar2000/SDK/utility.cpp
Normal file
@@ -0,0 +1,77 @@
|
||||
#include "foobar2000.h"
|
||||
#include "foosort.h"
|
||||
|
||||
namespace {
|
||||
using namespace fb2k;
|
||||
|
||||
class callOnReleaseImpl : public service_base {
|
||||
public:
|
||||
callOnReleaseImpl( std::function<void () > f_) : f(f_) {}
|
||||
std::function<void ()> f;
|
||||
|
||||
~callOnReleaseImpl () {
|
||||
try {
|
||||
f();
|
||||
} catch(...) {}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
namespace fb2k {
|
||||
objRef callOnRelease( std::function< void () > f) {
|
||||
return new service_impl_t< callOnReleaseImpl > (f);
|
||||
}
|
||||
objRef callOnReleaseInMainThread( std::function< void () > f) {
|
||||
return callOnRelease( [f] {
|
||||
fb2k::inMainThread2( f );
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
namespace pfc {
|
||||
/*
|
||||
Redirect PFC methods to shared.dll
|
||||
If you're getting linker multiple-definition errors on these, change build configuration of PFC from "Debug" / "Release" to "Debug FB2K" / "Release FB2K"
|
||||
*/
|
||||
BOOL winFormatSystemErrorMessageHook(pfc::string_base & p_out, DWORD p_code) {
|
||||
return uFormatSystemErrorMessage(p_out, p_code);
|
||||
}
|
||||
void crashHook() {
|
||||
uBugCheck();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// file_lock_manager.h functionality
|
||||
#include "file_lock_manager.h"
|
||||
namespace {
|
||||
class file_lock_interrupt_impl : public file_lock_interrupt {
|
||||
public:
|
||||
void interrupt( abort_callback & a ) { f(a); }
|
||||
std::function<void (abort_callback&)> f;
|
||||
};
|
||||
}
|
||||
|
||||
file_lock_interrupt::ptr file_lock_interrupt::create( std::function< void (abort_callback&)> f ) {
|
||||
service_ptr_t<file_lock_interrupt_impl> i = new service_impl_t<file_lock_interrupt_impl>();
|
||||
i->f = f;
|
||||
return i;
|
||||
}
|
||||
|
||||
// file_info_filter.h functionality
|
||||
#include "file_info_filter.h"
|
||||
namespace {
|
||||
class file_info_filter_lambda : public file_info_filter {
|
||||
public:
|
||||
bool apply_filter(trackRef p_track,t_filestats p_stats,file_info & p_info) override {
|
||||
return f(p_track, p_stats, p_info);
|
||||
}
|
||||
func_t f;
|
||||
};
|
||||
}
|
||||
|
||||
file_info_filter::ptr file_info_filter::create(func_t f) {
|
||||
auto o = fb2k::service_new<file_info_filter_lambda>();
|
||||
o->f = f;
|
||||
return o;
|
||||
}
|
||||
Reference in New Issue
Block a user