Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Impressum homalgExternalObject.gi   Sprache: unbekannt

 
Haftungsausschluß.gi KontaktUnknown {[0] [0] [0]}diese Dinge liegen außhalb unserer Verantwortung

# SPDX-License-Identifier: GPL-2.0-or-later
# HomalgToCAS: A window to the outer world
#
# Implementations
#

##  Implementation stuff for homalg's external objects.

####################################
#
# representations:
#
####################################

# a new representation for the GAP-category IshomalgExternalObject:
DeclareRepresentation( "IshomalgExternalObjectRep",
        IshomalgExternalObject,
        [ "pointer", "cas" ] );

# a new subrepresentation of the representation IsContainerForWeakPointersRep:
DeclareRepresentation( "IsContainerForWeakPointersOnHomalgExternalObjectsRep",
        IsContainerForWeakPointersRep,
        [ "weak_pointers", "counter", "deleted" ] );

####################################
#
# families and types:
#
####################################

# a new family:
BindGlobal( "TheFamilyOfHomalgExternalObjects",
        NewFamily( "TheFamilyOfHomalgExternalObjects" ) );

# a new type:
BindGlobal( "TheTypeHomalgExternalObject",
        NewType( TheFamilyOfHomalgExternalObjects,
                IshomalgExternalObjectRep ) );

# a new family:
BindGlobal( "TheFamilyOfContainersForWeakPointersOnHomalgExternalObjects",
        NewFamily( "TheFamilyOfContainersForWeakPointersOnHomalgExternalObjects" ) );

# a new type:
BindGlobal( "TheTypeContainerForWeakPointersOnHomalgExternalObjects",
        NewType( TheFamilyOfContainersForWeakPointersOnHomalgExternalObjects,
                IsContainerForWeakPointersOnHomalgExternalObjectsRep ) );

####################################
#
# methods for operations:
#
####################################

##
InstallMethod( homalgPointer,
        "for homalg external objects",
        [ IshomalgExternalObjectRep ],
        
  function( o )
    
    if IsBound(o!.pointer) then
        return o!.pointer;
    fi;
    
    return fail;
    
end );

##
InstallMethod( homalgPointer,
        "for homalg external objects",
        [ IsString ],
        
  function( o )
    
    Error( "expected an external object but received a string\n" );
    
end );

##
InstallMethod( homalgPointer,
        "for homalg external objects",
        [ IsBool ],
        
  function( o )
    
    Error( "expected an external object\n" );
    
end );

##
InstallMethod( homalgExternalCASystem,
        "for homalg external objects",
        [ IshomalgExternalObjectRep ],
        
  function( o )
    
    if IsBound(o!.cas) then
        return o!.cas;
    fi;
    
    return fail;
    
end );

##
InstallMethod( homalgExternalCASystemVersion,
        "for homalg external objects",
        [ IshomalgExternalObjectRep ],
        
  function( o )
    
    if IsBound(o!.cas_version) then
        return o!.cas_version;
    fi;
    
    return fail;
    
end );

##
InstallMethod( homalgStream,
        "for homalg external objects",
        [ IshomalgExternalObjectRep ],
        
  function( o )
    
    if IsBound(o!.stream) then
        return o!.stream;
    fi;
    
    return fail;
    
end );

##
InstallMethod( String,
        "for homalg external ring elements",
        [ IshomalgExternalObjectRep ],
        
  homalgPointer );

##
InstallMethod( homalgExternalCASystemPID,
        "for homalg external objects",
        [ IshomalgExternalObjectRep ],
        
  function( o )
    
    if IsRecord( homalgStream( o ) ) and IsBound( homalgStream( o ).pid ) then
        return homalgStream( o ).pid;
    fi;
    
    return fail;
    
end );

##
InstallMethod( homalgLastWarning,
        "for homalg external objects",
        [ IshomalgExternalObjectRep ],
        
  function( o )
    local stream;
    
    stream := homalgStream( o );
    
    if IsBound(stream.warnings) then
        Print( stream.warnings );
    else
        Print( "" );
    fi;
    
end );

##
InstallMethod( homalgNrOfWarnings,
        "for homalg external objects",
        [ IshomalgExternalObjectRep ],
        
  function( o )
    local stream;
    
    stream := homalgStream( o );
    
    if IsBound(stream.HomalgExternalWarningsCounter) then
        return stream.HomalgExternalWarningsCounter;
    fi;
    
    return 0;
    
end );

##
InstallMethod( \=,
        "for homalg external objects",
        [ IshomalgExternalObjectRep, IshomalgExternalObjectRep ],
        
  function( o1, o2 )
    local components;
    
    components := [ "pointer", "cas" ]; ## don't add more!!!
    
    if IsSubset( NamesOfComponents( o1 ), components )
       and IsSubset( NamesOfComponents( o2 ), components ) then
        return homalgExternalCASystem( o1 ) = homalgExternalCASystem( o2 )
               and homalgPointer( o1 ) = homalgPointer( o2 ); ## we merely are comparing strings in GAP
    fi;
    
    TryNextMethod( );
    
end );

####################################
#
# constructor functions and methods:
#
####################################

InstallGlobalFunction( homalgExternalObject,
  function( arg )
    local nargs, properties, ar, stream, obj, type;
    
    nargs := Length( arg );
    
    properties := [ ];
    
    for ar in arg{[ 3 .. nargs ]} do
        if not IsBound( stream ) and IsRecord( ar ) and IsBound( ar.lines ) and IsBound( ar.pid ) then
            stream := ar;
        elif not IsBound( type ) and IsType( ar ) then
            type := ar;
        elif IsFilter( ar ) then
            Add( properties, ar );
        else
            Error( "this argument (now assigned to ar) should be in { IsRecord, IsType, IsFilter }\n" );
        fi;
    od;
    
    if IsBound( stream ) then
        obj := rec( pointer := arg[1], cas := arg[2], stream := stream );
    else
        Error( "no stream specified\n" );
    fi;
    
    if not IsBound( type ) then
        type := TheTypeHomalgExternalObject;
    fi;
    
    ## Objectify:
    Objectify( type, obj );
    
    if properties <> [ ] then
        for ar in properties do
            Setter( ar )( obj, true );
        od;
    fi;
    
    return obj;
    
end );

####################################
#
# View, Print, and Display methods:
#
####################################

##
InstallMethod( ViewObj,
        "for homalg external objects",
        [ IshomalgExternalObjectRep ],
        
  function( o )
    
    Print( "<A homalg external object residing in the CAS " );
    Print( homalgExternalCASystem( o ), ">" );
    
end );

##
InstallMethod( Display,
        "for homalg external objects",
        [ IshomalgExternalObjectRep ],
        
  function( o )
    
    Print( homalgPointer( o ), "\n" );
    
end );

##
InstallMethod( ViewObj,
        "for containers of weak pointers on homalg external objects",
        [ IsContainerForWeakPointersOnHomalgExternalObjectsRep ],
        
  function( o )
    local del;
    
    del := Length( o!.deleted );
    
    Print( "<A container of weak pointers on homalg external objects: active = ", o!.counter - del, ", deleted = ", del, ", counter = ", o!.counter, ", pending assignments = ", o!.assignments_pending, ", failed assignments = ", o!.assignments_failed, ">" );
    
end );

##
InstallMethod( Display,
        "for containers of weak pointers on homalg external objects",
        [ IsContainerForWeakPointersOnHomalgExternalObjectsRep ],
        
  function( o )
    local weak_pointers;
    
    weak_pointers := o!.weak_pointers;
    
    Print( List( [ 1 .. LengthWPObj( weak_pointers ) ], function( i ) if IsBoundElmWPObj( weak_pointers, i ) then return i; else return 0; fi; end ), "\n" );
    
end );


[ Seitenstruktur0.44Drucken  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge