Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
191f25ae
Commit
191f25ae
authored
Oct 12, 2010
by
Vadim Pisarevsky
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
renamed internal headers to avoid conflicts with system header files
parent
87f6e500
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
253 additions
and
313 deletions
+253
-313
_latentsvm.h
modules/objdetect/src/_latentsvm.h
+3
-4
_lsvm_distancetransform.h
modules/objdetect/src/_lsvm_distancetransform.h
+0
-0
_lsvm_error.h
modules/objdetect/src/_lsvm_error.h
+16
-15
_lsvm_fft.h
modules/objdetect/src/_lsvm_fft.h
+79
-80
_lsvm_matching.h
modules/objdetect/src/_lsvm_matching.h
+0
-0
_lsvm_resizeimg.h
modules/objdetect/src/_lsvm_resizeimg.h
+11
-10
_lsvm_routine.h
modules/objdetect/src/_lsvm_routine.h
+35
-35
_lsvm_types.h
modules/objdetect/src/_lsvm_types.h
+93
-93
_lsvmparser.h
modules/objdetect/src/_lsvmparser.h
+0
-66
distancetransform.cpp
modules/objdetect/src/distancetransform.cpp
+2
-1
featurepyramid.cpp
modules/objdetect/src/featurepyramid.cpp
+2
-1
fft.cpp
modules/objdetect/src/fft.cpp
+2
-1
latentsvm.cpp
modules/objdetect/src/latentsvm.cpp
+2
-1
latentsvmdetector.cpp
modules/objdetect/src/latentsvmdetector.cpp
+1
-1
matching.cpp
modules/objdetect/src/matching.cpp
+2
-1
precomp.hpp
modules/objdetect/src/precomp.hpp
+1
-1
resizeimg.cpp
modules/objdetect/src/resizeimg.cpp
+2
-2
routine.cpp
modules/objdetect/src/routine.cpp
+2
-1
No files found.
modules/objdetect/src/_latentsvm.h
View file @
191f25ae
...
@@ -6,10 +6,9 @@
...
@@ -6,10 +6,9 @@
#define SVM_LATENTSVM
#define SVM_LATENTSVM
#include <stdio.h>
#include <stdio.h>
#include "precomp.hpp"
#include "_lsvm_types.h"
#include "_types.h"
#include "_lsvm_error.h"
#include "_error.h"
#include "_lsvm_routine.h"
#include "_routine.h"
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
// Building feature pyramid
// Building feature pyramid
...
...
modules/objdetect/src/_distancetransform.h
→
modules/objdetect/src/_
lsvm_
distancetransform.h
View file @
191f25ae
This diff is collapsed.
Click to expand it.
modules/objdetect/src/_error.h
→
modules/objdetect/src/_
lsvm_
error.h
View file @
191f25ae
#ifndef SVM_ERROR
#ifndef SVM_ERROR
#define SVM_ERROR
#define SVM_ERROR
#define LATENT_SVM_OK 0
#define LATENT_SVM_OK 0
#define DISTANCE_TRANSFORM_OK 1
#define DISTANCE_TRANSFORM_OK 1
#define DISTANCE_TRANSFORM_GET_INTERSECTION_ERROR -1
#define DISTANCE_TRANSFORM_GET_INTERSECTION_ERROR -1
#define DISTANCE_TRANSFORM_ERROR -2
#define DISTANCE_TRANSFORM_ERROR -2
#define DISTANCE_TRANSFORM_EQUAL_POINTS -3
#define DISTANCE_TRANSFORM_EQUAL_POINTS -3
#define LATENT_SVM_GET_FEATURE_PYRAMID_FAILED -4
#define LATENT_SVM_GET_FEATURE_PYRAMID_FAILED -4
#define LATENT_SVM_SEARCH_OBJECT_FAILED -5
#define LATENT_SVM_SEARCH_OBJECT_FAILED -5
#define LATENT_SVM_FAILED_SUPERPOSITION -6
#define LATENT_SVM_FAILED_SUPERPOSITION -6
#define FILTER_OUT_OF_BOUNDARIES -7
#define FILTER_OUT_OF_BOUNDARIES -7
#define FFT_OK 2
#define FFT_OK 2
#define FFT_ERROR -8
#define FFT_ERROR -8
#endif
#endif
\ No newline at end of file
modules/objdetect/src/_fft.h
→
modules/objdetect/src/_
lsvm_
fft.h
View file @
191f25ae
#ifndef _FFT_H
#ifndef _LSVM_FFT_H
#define _FFT_H
#define _LSVM_FFT_H
#include "precomp.hpp"
#include "_lsvm_types.h"
#include "_types.h"
#include "_lsvm_error.h"
#include "_error.h"
#include <math.h>
#include <math.h>
/*
// 1-dimensional FFT
/*
//
// 1-dimensional FFT
// API
//
// int fft(float *x_in, float *x_out, int n, int shift);
// API
// INPUT
// int fft(float *x_in, float *x_out, int n, int shift);
// x_in - input signal
// INPUT
// n - number of elements for searching Fourier image
// x_in - input signal
// shift - shift between input elements
// n - number of elements for searching Fourier image
// OUTPUT
// shift - shift between input elements
// x_out - output signal (contains 2n elements in order
// OUTPUT
Re(x_in[0]), Im(x_in[0]), Re(x_in[1]), Im(x_in[1]) and etc.)
// x_out - output signal (contains 2n elements in order
// RESULT
Re(x_in[0]), Im(x_in[0]), Re(x_in[1]), Im(x_in[1]) and etc.)
// Error status
// RESULT
*/
// Error status
int
fft
(
float
*
x_in
,
float
*
x_out
,
int
n
,
int
shift
);
*/
int
fft
(
float
*
x_in
,
float
*
x_out
,
int
n
,
int
shift
);
/*
// Inverse 1-dimensional FFT
/*
//
// Inverse 1-dimensional FFT
// API
//
// int fftInverse(float *x_in, float *x_out, int n, int shift);
// API
// INPUT
// int fftInverse(float *x_in, float *x_out, int n, int shift);
// x_in - Fourier image of 1d input signal(contains 2n elements
// INPUT
in order Re(x_in[0]), Im(x_in[0]),
// x_in - Fourier image of 1d input signal(contains 2n elements
Re(x_in[1]), Im(x_in[1]) and etc.)
in order Re(x_in[0]), Im(x_in[0]),
// n - number of elements for searching counter FFT image
Re(x_in[1]), Im(x_in[1]) and etc.)
// shift - shift between input elements
// n - number of elements for searching counter FFT image
// OUTPUT
// shift - shift between input elements
// x_in - input signal (contains n elements)
// OUTPUT
// RESULT
// x_in - input signal (contains n elements)
// Error status
// RESULT
*/
// Error status
int
fftInverse
(
float
*
x_in
,
float
*
x_out
,
int
n
,
int
shift
);
*/
int
fftInverse
(
float
*
x_in
,
float
*
x_out
,
int
n
,
int
shift
);
/*
// 2-dimensional FFT
/*
//
// 2-dimensional FFT
// API
//
// int fft2d(float *x_in, float *x_out, int numRows, int numColls);
// API
// INPUT
// int fft2d(float *x_in, float *x_out, int numRows, int numColls);
// x_in - input signal (matrix, launched by rows)
// INPUT
// numRows - number of rows
// x_in - input signal (matrix, launched by rows)
// numColls - number of collumns
// numRows - number of rows
// OUTPUT
// numColls - number of collumns
// x_out - output signal (contains (2 * numRows * numColls) elements
// OUTPUT
in order Re(x_in[0][0]), Im(x_in[0][0]),
// x_out - output signal (contains (2 * numRows * numColls) elements
Re(x_in[0][1]), Im(x_in[0][1]) and etc.)
in order Re(x_in[0][0]), Im(x_in[0][0]),
// RESULT
Re(x_in[0][1]), Im(x_in[0][1]) and etc.)
// Error status
// RESULT
*/
// Error status
int
fft2d
(
float
*
x_in
,
float
*
x_out
,
int
numRows
,
int
numColls
);
*/
int
fft2d
(
float
*
x_in
,
float
*
x_out
,
int
numRows
,
int
numColls
);
/*
// Inverse 2-dimensional FFT
/*
//
// Inverse 2-dimensional FFT
// API
//
// int fftInverse2d(float *x_in, float *x_out, int numRows, int numColls);
// API
// INPUT
// int fftInverse2d(float *x_in, float *x_out, int numRows, int numColls);
// x_in - Fourier image of matrix (contains (2 * numRows * numColls)
// INPUT
elements in order Re(x_in[0][0]), Im(x_in[0][0]),
// x_in - Fourier image of matrix (contains (2 * numRows * numColls)
Re(x_in[0][1]), Im(x_in[0][1]) and etc.)
elements in order Re(x_in[0][0]), Im(x_in[0][0]),
// numRows - number of rows
Re(x_in[0][1]), Im(x_in[0][1]) and etc.)
// numColls - number of collumns
// numRows - number of rows
// OUTPUT
// numColls - number of collumns
// x_out - initial signal (matrix, launched by rows)
// OUTPUT
// RESULT
// x_out - initial signal (matrix, launched by rows)
// Error status
// RESULT
*/
// Error status
int
fftInverse2d
(
float
*
x_in
,
float
*
x_out
,
int
numRows
,
int
numColls
);
*/
int
fftInverse2d
(
float
*
x_in
,
float
*
x_out
,
int
numRows
,
int
numColls
);
#endif
#endif
\ No newline at end of file
modules/objdetect/src/_matching.h
→
modules/objdetect/src/_
lsvm_
matching.h
View file @
191f25ae
This diff is collapsed.
Click to expand it.
modules/objdetect/src/_resizeimg.h
→
modules/objdetect/src/_
lsvm_
resizeimg.h
View file @
191f25ae
#ifndef RESIZEIMG
#ifndef RESIZEIMG
#define RESIZEIMG
#define RESIZEIMG
#include "precomp.hpp"
#include "precomp.hpp"
#include "_types.h"
#include "_types.h"
IplImage
*
resize_opencv
(
IplImage
*
img
,
float
scale
);
IplImage
*
resize_opencv
(
IplImage
*
img
,
float
scale
);
IplImage
*
resize_article_dp1
(
IplImage
*
img
,
float
scale
,
const
int
k
);
IplImage
*
resize_article_dp1
(
IplImage
*
img
,
float
scale
,
const
int
k
);
IplImage
*
resize_article_dp
(
IplImage
*
img
,
float
scale
,
const
int
k
);
IplImage
*
resize_article_dp
(
IplImage
*
img
,
float
scale
,
const
int
k
);
#endif
#endif
\ No newline at end of file
modules/objdetect/src/_routine.h
→
modules/objdetect/src/_
lsvm_
routine.h
View file @
191f25ae
#ifndef _ROUTINE_H
#ifndef _LSVM_ROUTINE_H
#define _ROUTINE_H
#define _LSVM_ROUTINE_H
#include "precomp.hpp"
#include "_lsvm_types.h"
#include "_types.h"
#include "_lsvm_error.h"
#include "_error.h"
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
// Memory management routines
// Memory management routines
// All paramaters names correspond to previous data structures description
// All paramaters names correspond to previous data structures description
// All "alloc" functions return allocated memory for 1 object
// All "alloc" functions return allocated memory for 1 object
// with all fields including arrays
// with all fields including arrays
// Error status is return value
// Error status is return value
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
int
allocFilterObject
(
filterObject
**
obj
,
const
int
sizeX
,
const
int
sizeY
,
int
allocFilterObject
(
filterObject
**
obj
,
const
int
sizeX
,
const
int
sizeY
,
const
int
p
,
const
int
xp
);
const
int
p
,
const
int
xp
);
int
freeFilterObject
(
filterObject
**
obj
);
int
freeFilterObject
(
filterObject
**
obj
);
int
allocFeatureMapObject
(
featureMap
**
obj
,
const
int
sizeX
,
const
int
sizeY
,
int
allocFeatureMapObject
(
featureMap
**
obj
,
const
int
sizeX
,
const
int
sizeY
,
const
int
p
,
const
int
xp
);
const
int
p
,
const
int
xp
);
int
freeFeatureMapObject
(
featureMap
**
obj
);
int
freeFeatureMapObject
(
featureMap
**
obj
);
#ifdef __cplusplus
#ifdef __cplusplus
extern
"C"
extern
"C"
#endif
#endif
int
allocFeaturePyramidObject
(
featurePyramid
**
obj
,
int
allocFeaturePyramidObject
(
featurePyramid
**
obj
,
const
int
lambda
,
const
int
countLevel
);
const
int
lambda
,
const
int
countLevel
);
#ifdef __cplusplus
#ifdef __cplusplus
extern
"C"
extern
"C"
#endif
#endif
int
freeFeaturePyramidObject
(
featurePyramid
**
obj
);
int
freeFeaturePyramidObject
(
featurePyramid
**
obj
);
int
allocFFTImage
(
fftImage
**
image
,
int
p
,
int
dimX
,
int
dimY
);
int
allocFFTImage
(
fftImage
**
image
,
int
p
,
int
dimX
,
int
dimY
);
int
freeFFTImage
(
fftImage
**
image
);
int
freeFFTImage
(
fftImage
**
image
);
#endif
#endif
\ No newline at end of file
modules/objdetect/src/_types.h
→
modules/objdetect/src/_
lsvm_
types.h
View file @
191f25ae
#ifndef SVM_TYPE
#ifndef SVM_TYPE
#define SVM_TYPE
#define SVM_TYPE
//#include "opencv2/core/core.hpp"
//#include "opencv2/core/core.hpp"
//#include "opencv2/highgui/highgui.hpp"
//#include "opencv2/highgui/highgui.hpp"
#include "precomp.hpp"
#include "precomp.hpp"
//#define FFT_CONV
//#define FFT_CONV
// PI
// PI
#define PI 3.1415926535897932384626433832795
#define PI 3.1415926535897932384626433832795
//
//
#define EPS 0.000001
#define EPS 0.000001
//
//
#define F_MAX 3.402823466e+38
#define F_MAX 3.402823466e+38
#define F_MIN -3.402823465e+38
#define F_MIN -3.402823465e+38
// The number of elements in bin
// The number of elements in bin
// The number of sectors in gradient histogram building
// The number of sectors in gradient histogram building
#define CNTPARTION 9
#define CNTPARTION 9
// The number of levels in image resize procedure
// The number of levels in image resize procedure
// We need Lambda levels to resize image twice
// We need Lambda levels to resize image twice
#define LAMBDA 10
#define LAMBDA 10
// Block size. Used in feature pyramid building procedure
// Block size. Used in feature pyramid building procedure
#define SIDE_LENGTH 8
#define SIDE_LENGTH 8
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
// main data structures //
// main data structures //
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
// DataType: STRUCT featureMap
// DataType: STRUCT featureMap
// FEATURE MAP DESCRIPTION
// FEATURE MAP DESCRIPTION
// Rectangular map (sizeX x sizeY),
// Rectangular map (sizeX x sizeY),
// every cell stores feature vector (dimension = p)
// every cell stores feature vector (dimension = p)
// H - matrix of feature vectors
// H - matrix of feature vectors
// to set and get feature vectors (i,j)
// to set and get feature vectors (i,j)
// used formula Map[(j * sizeX + i) * p + k], where
// used formula Map[(j * sizeX + i) * p + k], where
// k - component of feature vector in cell (i, j)
// k - component of feature vector in cell (i, j)
// END OF FEATURE MAP DESCRIPTION
// END OF FEATURE MAP DESCRIPTION
// xp - auxillary parameter for internal use
// xp - auxillary parameter for internal use
// size of row in feature vectors
// size of row in feature vectors
// (yp = (int) (p / xp); p = xp * yp)
// (yp = (int) (p / xp); p = xp * yp)
typedef
struct
{
typedef
struct
{
int
sizeX
;
int
sizeX
;
int
sizeY
;
int
sizeY
;
int
p
;
int
p
;
int
xp
;
int
xp
;
float
*
Map
;
float
*
Map
;
}
featureMap
;
}
featureMap
;
// DataType: STRUCT featurePyramid
// DataType: STRUCT featurePyramid
//
//
// countLevel - number of levels in the feature pyramid
// countLevel - number of levels in the feature pyramid
// lambda - resize scale coefficient
// lambda - resize scale coefficient
// pyramid - array of pointers to feature map at different levels
// pyramid - array of pointers to feature map at different levels
typedef
struct
{
typedef
struct
{
int
countLevel
;
int
countLevel
;
int
lambda
;
int
lambda
;
featureMap
**
pyramid
;
featureMap
**
pyramid
;
}
featurePyramid
;
}
featurePyramid
;
// DataType: STRUCT filterDisposition
// DataType: STRUCT filterDisposition
// The structure stores preliminary results in optimization process
// The structure stores preliminary results in optimization process
// with objective function D
// with objective function D
//
//
// x - array with X coordinates of optimization problems solutions
// x - array with X coordinates of optimization problems solutions
// y - array with Y coordinates of optimization problems solutions
// y - array with Y coordinates of optimization problems solutions
// score - array with optimal objective values
// score - array with optimal objective values
typedef
struct
{
typedef
struct
{
float
*
score
;
float
*
score
;
int
*
x
;
int
*
x
;
int
*
y
;
int
*
y
;
}
filterDisposition
;
}
filterDisposition
;
// DataType: STRUCT fftImage
// DataType: STRUCT fftImage
// The structure stores FFT image
// The structure stores FFT image
//
//
// p - number of channels
// p - number of channels
// x - array of FFT images for 2d signals
// x - array of FFT images for 2d signals
// n - number of rows
// n - number of rows
// m - number of collums
// m - number of collums
typedef
struct
{
typedef
struct
{
unsigned
int
p
;
unsigned
int
p
;
unsigned
int
dimX
;
unsigned
int
dimX
;
unsigned
int
dimY
;
unsigned
int
dimY
;
float
**
channels
;
float
**
channels
;
}
fftImage
;
}
fftImage
;
#endif
#endif
modules/objdetect/src/_lsvmparser.h
deleted
100644 → 0
View file @
87f6e500
#ifndef LSVM_PARSER
#define LSVM_PARSER
#include "precomp.hpp"
#include "_types.h"
#define MODEL 1
#define P 2
#define COMP 3
#define SCORE 4
#define RFILTER 100
#define PFILTERs 101
#define PFILTER 200
#define SIZEX 150
#define SIZEY 151
#define WEIGHTS 152
#define TAGV 300
#define Vx 350
#define Vy 351
#define TAGD 400
#define Dx 451
#define Dy 452
#define Dxx 453
#define Dyy 454
#define BTAG 500
#define STEP_END 1000
#define EMODEL (STEP_END + MODEL)
#define EP (STEP_END + P)
#define ECOMP (STEP_END + COMP)
#define ESCORE (STEP_END + SCORE)
#define ERFILTER (STEP_END + RFILTER)
#define EPFILTERs (STEP_END + PFILTERs)
#define EPFILTER (STEP_END + PFILTER)
#define ESIZEX (STEP_END + SIZEX)
#define ESIZEY (STEP_END + SIZEY)
#define EWEIGHTS (STEP_END + WEIGHTS)
#define ETAGV (STEP_END + TAGV)
#define EVx (STEP_END + Vx)
#define EVy (STEP_END + Vy)
#define ETAGD (STEP_END + TAGD)
#define EDx (STEP_END + Dx)
#define EDy (STEP_END + Dy)
#define EDxx (STEP_END + Dxx)
#define EDyy (STEP_END + Dyy)
#define EBTAG (STEP_END + BTAG)
//extern "C" {
int
LSVMparser
(
const
char
*
filename
,
filterObject
***
model
,
int
*
last
,
int
*
max
,
int
**
comp
,
float
**
b
,
int
*
count
,
float
*
score
);
#ifdef __cplusplus
extern
"C"
#endif
int
loadModel
(
const
char
*
modelPath
,
filterObject
***
filters
,
int
*
kFilters
,
int
*
kComponents
,
int
**
kPartFilters
,
float
**
b
,
float
*
scoreThreshold
);
//};
#endif
\ No newline at end of file
modules/objdetect/src/distancetransform.cpp
View file @
191f25ae
#include "_distancetransform.h"
#include "precomp.hpp"
#include "_lsvm_distancetransform.h"
/*
/*
// Computation the point of intersection functions
// Computation the point of intersection functions
...
...
modules/objdetect/src/featurepyramid.cpp
View file @
191f25ae
#include "precomp.hpp"
#include "_latentsvm.h"
#include "_latentsvm.h"
#include "_resizeimg.h"
#include "_
lsvm_
resizeimg.h"
#ifndef max
#ifndef max
#define max(a,b) (((a) > (b)) ? (a) : (b))
#define max(a,b) (((a) > (b)) ? (a) : (b))
...
...
modules/objdetect/src/fft.cpp
View file @
191f25ae
#include "_fft.h"
#include "precomp.hpp"
#include "_lsvm_fft.h"
int
getEntireRes
(
int
number
,
int
divisor
,
int
*
entire
,
int
*
res
)
int
getEntireRes
(
int
number
,
int
divisor
,
int
*
entire
,
int
*
res
)
{
{
...
...
modules/objdetect/src/latentsvm.cpp
View file @
191f25ae
#include "precomp.hpp"
#include "_latentsvm.h"
#include "_latentsvm.h"
#include "_matching.h"
#include "_
lsvm_
matching.h"
/*
/*
// Transformation filter displacement from the block space
// Transformation filter displacement from the block space
...
...
modules/objdetect/src/latentsvmdetector.cpp
View file @
191f25ae
#include "precomp.hpp"
#include "precomp.hpp"
#include "_lsvmparser.h"
#include "_lsvmparser.h"
#include "_matching.h"
#include "_
lsvm_
matching.h"
/*
/*
// load trained detector from a file
// load trained detector from a file
...
...
modules/objdetect/src/matching.cpp
View file @
191f25ae
#include "_matching.h"
#include "precomp.hpp"
#include "_lsvm_matching.h"
#include <stdio.h>
#include <stdio.h>
#ifndef max
#ifndef max
...
...
modules/objdetect/src/precomp.hpp
View file @
191f25ae
...
@@ -55,7 +55,7 @@
...
@@ -55,7 +55,7 @@
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/core/core_c.h"
#include "opencv2/core/core_c.h"
#include "opencv2/highgui/highgui
_c.h
"
#include "opencv2/highgui/highgui
.hpp
"
#include "opencv2/core/internal.hpp"
#include "opencv2/core/internal.hpp"
#endif
#endif
modules/objdetect/src/resizeimg.cpp
View file @
191f25ae
#include "_resizeimg.h"
#include "precomp.hpp"
#include "_lsvm_resizeimg.h"
#include <stdio.h>
#include <stdio.h>
#include <assert.h>
#include <assert.h>
#include <math.h>
#include <math.h>
IplImage
*
resize_opencv
(
IplImage
*
img
,
float
scale
){
IplImage
*
resize_opencv
(
IplImage
*
img
,
float
scale
){
IplImage
*
imgTmp
;
IplImage
*
imgTmp
;
...
...
modules/objdetect/src/routine.cpp
View file @
191f25ae
#include "_routine.h"
#include "precomp.hpp"
#include "_lsvm_routine.h"
int
allocFilterObject
(
filterObject
**
obj
,
const
int
sizeX
,
const
int
sizeY
,
const
int
p
,
const
int
xp
){
int
allocFilterObject
(
filterObject
**
obj
,
const
int
sizeX
,
const
int
sizeY
,
const
int
p
,
const
int
xp
){
int
i
;
int
i
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment