JD2022-TU1/main/extern/P4/include/p4/dmextension.h

151 lines
4 KiB
C++

/*
* Copyright 1995, 2018 Perforce Software. All rights reserved.
*
* This file is part of Perforce - the FAST SCM System.
*/
# ifdef HAS_EXTENSIONS
# include <map>
# include <p4_any.h>
# include <tuple>
# include <string>
# include <vector>
# include <p4_optional.h>
# include <functional>
# include <unordered_map>
# include <unordered_set>
# include <p4script.h>
class FileSys;
// Shim between higher level Rh* data and the plumbing.
struct ExtensionCallerData
{
virtual ~ExtensionCallerData();
// Extensions
std::function< void( const char* msg ) > SetClientMsg
= []( const char* msg ){};
std::function< bool( const char *desc, const long total,
const long position ) > ProgressSet
= []( const char *desc, const long total,
const long position ){ return true; };
std::function< std::tuple< const bool, std::string >( const char* form,
std::function< bool( const char * ) > fn )
> ClientEditData = []( const char* form,
std::function< bool( const char * ) > fn ){
return std::make_tuple< bool, std::string >( true, std::string() ); };
std::function< bool( const long pos ) > ProgressIncrement
= []( const long pos ){ return true; };
std::function< std::tuple< bool, std::string > ( const char* msg ) > ClientOutputText
= []( const char* msg ){ return std::make_tuple( true, std::string( "Success" ) ); };
std::function< std::tuple< bool, std::string > ( const int level, const char* msg )
> ReportError
= []( const int level, const char* msg )
{ return std::make_tuple< bool, std::string >( true,
std::string( "Success" ) ); };
std::function< std::tuple< bool, std::string > ( std::map< std::string,
std::string > tagmsg ) > FstatInfo
= []( std::map< std::string, std::string > tagmsg ){
return std::make_tuple< bool, std::string >( true,
std::string( "Success" ) ); };
std::function< bool( const char* user, const char *path,
int perm ) > CheckPermission
= []( const char* user, const char *path, int perm ){ return false; };
std::function< void() > SetExtExecError
= [](){};
StrBuf archDir, dataDir;
std::string defaultLocale; // manifest
std::string userLocale, userCharset, userLanguage; // client vars
std::vector< std::string > supportedLocales; // manifest
std::string setLocale; // extension-supplied or default
// locale -> key -> message
std::unordered_map< std::string, std::unordered_map< std::string,
std::string > >
translationMap;
int apiVersion = 0;
} ;
class Extension : public p4script
{
public:
Extension( const SCR_VERSION v, const int apiVersion,
p4_std_optional::optional<
std::unique_ptr< ExtensionCallerData > > ecd, Error* e,
const bool alloc = false );
virtual ~Extension();
void LoadFile( const char* file, Error *e );
virtual void doBindings( Error* e );
ExtensionCallerData* GetECD();
p4_std_any::p4_any RunCallBack( const char* name, Error* e );
protected:
class extImpl;
class extImpl53;
std::unique_ptr< extImpl > rhePimpl;
private:
p4_std_optional::optional< std::unique_ptr< ExtensionCallerData > > ecd;
} ;
class Extension::extImpl
{
public:
extImpl( Extension& p, Error *e );
virtual ~extImpl();
virtual void doBindings( Error* e ) = 0;
virtual p4_std_any::p4_any
RunCallBack( const char* name, Error* e ) = 0;
protected:
Extension& parent;
} ;
class Extension::extImpl53 : public Extension::extImpl
{
public:
extImpl53( Extension& p, Error *e );
virtual ~extImpl53();
virtual void doBindings( Error* e );
p4_std_any::p4_any RunCallBack( const char* name, Error* e );
} ;
# else
class FileSys;
struct ExtensionCallerData
{
};
class Extension
{
public:
ExtensionCallerData* GetECD() { return &ecd; }
private:
ExtensionCallerData ecd;
} ;
# endif