Skip to content

Commit

Permalink
MATLAB.General.CD
Browse files Browse the repository at this point in the history
  • Loading branch information
埃博拉酱 committed Oct 11, 2021
1 parent 1078583 commit 487d423
Show file tree
Hide file tree
Showing 28 changed files with 69,864 additions and 69,815 deletions.
34 changes: 17 additions & 17 deletions +MATLAB/+Addons/private/ExploreVersionStruct.m
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
function [StructPaths,Versions] = ExploreVersionStruct(Struct)
import MATLAB.DataTypes.ArrayBuilder
FieldNames=fieldnames(Struct);
if isfield(Struct,'Me')
StructPaths="";
Versions=Struct.Me;
else
StructPaths=ArrayBuilder;
Versions=ArrayBuilder;
for a=1:numel(FieldNames)
FN=FieldNames{a};
[P,V]=ExploreVersionStruct(Struct.(FN));
StructPaths.Append("."+string(FN)+P);
Versions.Append(V);
end
StructPaths=StructPaths.Harvest;
Versions=Versions.Harvest;
function [StructPaths,Versions] = ExploreVersionStruct(Struct)
import MATLAB.DataTypes.ArrayBuilder
FieldNames=fieldnames(Struct);
if isfield(Struct,'Me')
StructPaths="";
Versions=Struct.Me;
else
StructPaths=ArrayBuilder;
Versions=ArrayBuilder;
for a=1:numel(FieldNames)
FN=FieldNames{a};
[P,V]=ExploreVersionStruct(Struct.(FN));
StructPaths.Append("."+string(FN)+P);
Versions.Append(V);
end
StructPaths=StructPaths.Harvest;
Versions=Versions.Harvest;
end
28 changes: 14 additions & 14 deletions +MATLAB/+AudioVideo/PreviewOptions.m
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
classdef PreviewOptions
%本类枚举了生成预览的方式。
enumeration
%直接读入第1帧作为预览图
First
%直接读入最后一帧作为预览图
Last
%读取随机某帧作为预览图
Random
%取所有帧的平均值作为预览图
Mean
%取所有帧的标准差作为预览图
Std
end
classdef PreviewOptions
%本类枚举了生成预览的方式。
enumeration
%直接读入第1帧作为预览图
First
%直接读入最后一帧作为预览图
Last
%读取随机某帧作为预览图
Random
%取所有帧的平均值作为预览图
Mean
%取所有帧的标准差作为预览图
Std
end
end
12 changes: 6 additions & 6 deletions +MATLAB/+DataFun/private/OnlyAll.m
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
function [Only,All] = OnlyAll(Groups1,CRT2,Unique2)
[Only,All]=deal(true);
for Index=1:max(Groups1)
Target=unique(CRT2(Groups1==Index,:));
Only=Only&&height(Target)==1;
All=All&&isequal(Target,Unique2);
function [Only,All] = OnlyAll(Groups1,CRT2,Unique2)
[Only,All]=deal(true);
for Index=1:max(Groups1)
Target=unique(CRT2(Groups1==Index,:));
Only=Only&&height(Target)==1;
All=All&&isequal(Target,Unique2);
end
18 changes: 9 additions & 9 deletions +MATLAB/+DataFun/private/SpecialRelation.m
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
classdef SpecialRelation
enumeration
General
GroupBy
Orthogonal
Constant
Equal
Only
end
classdef SpecialRelation
enumeration
General
GroupBy
Orthogonal
Constant
Equal
Only
end
end
82 changes: 41 additions & 41 deletions +MATLAB/+DataTypes/ArrayBuilder.m
Original file line number Diff line number Diff line change
@@ -1,42 +1,42 @@
classdef ArrayBuilder<handle
%数组累加器
%将数据向内存中积累时,经常遇到需要不断累加数组的问题,MATLAB会提示预分配内存。但如果读取之前无法得知将会有多少项,预分配就会变成一个十分麻烦的动态任务。本类建立一个增长维度,在此维度上可以不断累加一个内置的数组。用户只需不断Append即可,无需考虑内存分配的问题,本类会自动进行优化的内存管理。
properties(Access=private)
Storage(:,1)cell
Capacity(1,1)uint32=0
%当前在累加维度上的累加数
Stock(1,1)uint32=0
end
properties(SetAccess=immutable)
%累加维度
BuildDimension(1,1)double
end
methods
function obj = ArrayBuilder(BuildDimension)
%输入参数:BuildDimension(1,1)uint8=1,累加维度
arguments
BuildDimension(1,1)uint8=1
end
obj.BuildDimension=BuildDimension;
end
function Append(obj,New)
%输入参数:New,累加内容。所有累加内容在累加维度上尺寸可以不一致,但在其它维度上必须一致。
obj.Stock=obj.Stock+1;
if obj.Capacity<obj.Stock
obj.Capacity=obj.Stock*2;
obj.Storage(obj.Capacity)=cell(1,1);
end
obj.Storage{obj.Stock}=New;
end
function Array=Harvest(obj)
%收获累加完毕的MATLAB数组。收获后可以释放本对象,也可以继续累加。
Array=cat(obj.BuildDimension,obj.Storage{1:obj.Stock});
obj.Storage={Array};
obj.Stock=1;
obj.Capacity=1;
end
function Clear(obj)
obj.Stock=0;
end
end
classdef ArrayBuilder<handle
%数组累加器
%将数据向内存中积累时,经常遇到需要不断累加数组的问题,MATLAB会提示预分配内存。但如果读取之前无法得知将会有多少项,预分配就会变成一个十分麻烦的动态任务。本类建立一个增长维度,在此维度上可以不断累加一个内置的数组。用户只需不断Append即可,无需考虑内存分配的问题,本类会自动进行优化的内存管理。
properties(Access=private)
Storage(:,1)cell
Capacity(1,1)uint32=0
%当前在累加维度上的累加数
Stock(1,1)uint32=0
end
properties(SetAccess=immutable)
%累加维度
BuildDimension(1,1)double
end
methods
function obj = ArrayBuilder(BuildDimension)
%输入参数:BuildDimension(1,1)uint8=1,累加维度
arguments
BuildDimension(1,1)uint8=1
end
obj.BuildDimension=BuildDimension;
end
function Append(obj,New)
%输入参数:New,累加内容。所有累加内容在累加维度上尺寸可以不一致,但在其它维度上必须一致。
obj.Stock=obj.Stock+1;
if obj.Capacity<obj.Stock
obj.Capacity=obj.Stock*2;
obj.Storage(obj.Capacity)=cell(1,1);
end
obj.Storage{obj.Stock}=New;
end
function Array=Harvest(obj)
%收获累加完毕的MATLAB数组。收获后可以释放本对象,也可以继续累加。
Array=cat(obj.BuildDimension,obj.Storage{1:obj.Stock});
obj.Storage={Array};
obj.Stock=1;
obj.Capacity=1;
end
function Clear(obj)
obj.Stock=0;
end
end
end
26 changes: 13 additions & 13 deletions +MATLAB/+DataTypes/CatMode.m
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
classdef CatMode
enumeration
%Function的返回值为标量
Scalar
%SplitDimensions为标量,且Function的返回值为类型、PackDimensions维度上尺寸均相同的数组
Linear
%Function的返回值为数值、逻辑、字符或字段相同的结构体数组,且尺寸完全相同
EsNlcs
%Function的返回值为数组,允许尺寸不同,但最终可以拼接成一整个大数组
CanCat
%不符合上述任何条件,或返回值为函数句柄
DontCat
end
classdef CatMode
enumeration
%Function的返回值为标量
Scalar
%SplitDimensions为标量,且Function的返回值为类型、PackDimensions维度上尺寸均相同的数组
Linear
%Function的返回值为数值、逻辑、字符或字段相同的结构体数组,且尺寸完全相同
EsNlcs
%Function的返回值为数组,允许尺寸不同,但最终可以拼接成一整个大数组
CanCat
%不符合上述任何条件,或返回值为函数句柄
DontCat
end
end
30 changes: 15 additions & 15 deletions +MATLAB/+DataTypes/private/DFSuperCat.m
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
function varargout = DFSuperCat(varargout,CM,SplitDimensions)
import MATLAB.DataTypes.CatMode
switch CM
case CatMode.Scalar
varargout=cellfun(@cell2mat,varargout,"UniformOutput",false);
case CatMode.Linear
if isempty(SplitDimensions)
%这里不能使用varargout=horzcat(varargout{:}),因为varargout元胞里有可能是空的
varargout=cellfun(@(Out)vertcat(Out{:}),varargout,"UniformOutput",false);
else
varargout=cellfun(@(Out)cat(SplitDimensions,Out{:}),varargout,"UniformOutput",false);
end
case CatMode.CanCat
varargout=cellfun(@MATLAB.DataTypes.Cell2Mat,varargout,"UniformOutput",false);
end
function varargout = DFSuperCat(varargout,CM,SplitDimensions)
import MATLAB.DataTypes.CatMode
switch CM
case CatMode.Scalar
varargout=cellfun(@cell2mat,varargout,"UniformOutput",false);
case CatMode.Linear
if isempty(SplitDimensions)
%这里不能使用varargout=horzcat(varargout{:}),因为varargout元胞里有可能是空的
varargout=cellfun(@(Out)vertcat(Out{:}),varargout,"UniformOutput",false);
else
varargout=cellfun(@(Out)cat(SplitDimensions,Out{:}),varargout,"UniformOutput",false);
end
case CatMode.CanCat
varargout=cellfun(@MATLAB.DataTypes.Cell2Mat,varargout,"UniformOutput",false);
end
end
Binary file added +MATLAB/+General/CD.mlx
Binary file not shown.
62 changes: 31 additions & 31 deletions +MATLAB/+General/FILEOP_FLAGS.m
Original file line number Diff line number Diff line change
@@ -1,32 +1,32 @@
classdef FILEOP_FLAGS<uint16
enumeration
%指定多个目标文件(一一对应每个源文件);而不是一个目录(存入所有源文件)。
FOF_MULTIDESTFILES(0x0001)
%不要显示进度对话框。
FOF_SILENT(0x0004)
%如果目标名称的文件已在目的地存在,请给移动、复制或重命名操作中的文件以新名称。
FOF_RENAMEONCOLLISION(0x0008)
%对于显示的任何对话框,请以“是”响应。
FOF_NOCONFIRMATION(0x0010)
%如果可能,保留撤消信息。如果源文件参数不包含完全合格的路径和文件名称,则忽略此标志。使用此旗帜可指示应将删除的文件移动到回收站,而不是彻底删除。
FOF_ALLOWUNDO(0x0040)
%仅在指定通配符文件名称的文件(不在文件夹上)上执行操作。
FOF_FILESONLY(0x0080)
%操作中,显示进度对话框,但不显示单独的文件名。
FOF_SIMPLEPROGRESS(0x0100)
%如果操作需要创建新目录,请不要要求用户确认新目录的创建。
FOF_NOCONFIRMMKDIR(0x0200)
%如果出现错误,不要向用户显示对话框。
FOF_NOERRORUI(0x0400)
%不要复制文件的安全属性。目标文件接收其新文件夹的安全属性。
FOF_NOCOPYSECURITYATTRIBS(0x0800)
%仅在本地目录中执行操作。不要递归到子目录(这是默认行为)。
FOF_NORECURSION(0x1000)
%不要将已连接的文件作为一个组移动。仅移动指定文件。
FOF_NO_CONNECTED_ELEMENTS(0x2000)
%如果文件在删除操作中永久销毁,而不是回收,请发送警告。这面旗帜部分覆盖FOF_NOCONFIRMATION。
FOF_WANTNUKEWARNING(0x4000)
%默默执行操作,不向用户呈现UI。这相当于FOF_SILENT+FOF_NOCONFIRMATION+FOF_NOERRORUI+FOF_NOCONFIRMMKDIR
FOF_NO_UI(0x0614)
end
classdef FILEOP_FLAGS<uint16
enumeration
%指定多个目标文件(一一对应每个源文件);而不是一个目录(存入所有源文件)。
FOF_MULTIDESTFILES(0x0001)
%不要显示进度对话框。
FOF_SILENT(0x0004)
%如果目标名称的文件已在目的地存在,请给移动、复制或重命名操作中的文件以新名称。
FOF_RENAMEONCOLLISION(0x0008)
%对于显示的任何对话框,请以“是”响应。
FOF_NOCONFIRMATION(0x0010)
%如果可能,保留撤消信息。如果源文件参数不包含完全合格的路径和文件名称,则忽略此标志。使用此旗帜可指示应将删除的文件移动到回收站,而不是彻底删除。
FOF_ALLOWUNDO(0x0040)
%仅在指定通配符文件名称的文件(不在文件夹上)上执行操作。
FOF_FILESONLY(0x0080)
%操作中,显示进度对话框,但不显示单独的文件名。
FOF_SIMPLEPROGRESS(0x0100)
%如果操作需要创建新目录,请不要要求用户确认新目录的创建。
FOF_NOCONFIRMMKDIR(0x0200)
%如果出现错误,不要向用户显示对话框。
FOF_NOERRORUI(0x0400)
%不要复制文件的安全属性。目标文件接收其新文件夹的安全属性。
FOF_NOCOPYSECURITYATTRIBS(0x0800)
%仅在本地目录中执行操作。不要递归到子目录(这是默认行为)。
FOF_NORECURSION(0x1000)
%不要将已连接的文件作为一个组移动。仅移动指定文件。
FOF_NO_CONNECTED_ELEMENTS(0x2000)
%如果文件在删除操作中永久销毁,而不是回收,请发送警告。这面旗帜部分覆盖FOF_NOCONFIRMATION。
FOF_WANTNUKEWARNING(0x4000)
%默默执行操作,不向用户呈现UI。这相当于FOF_SILENT+FOF_NOCONFIRMATION+FOF_NOERRORUI+FOF_NOCONFIRMMKDIR
FOF_NO_UI(0x0614)
end
end
Loading

0 comments on commit 487d423

Please sign in to comment.