Skip to content

Commit fb1dcdd

Browse files
committed
Merge pull request opencv#9029 from alalek:dnn_cleanup_torch
2 parents f6a33c4 + 511e50c commit fb1dcdd

File tree

8 files changed

+34
-684
lines changed

8 files changed

+34
-684
lines changed

modules/dnn/src/torch/THDiskFile.cpp

Lines changed: 8 additions & 282 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#include "THDiskFile.h"
55
#include "THFilePrivate.h"
66

7-
extern "C"
7+
namespace TH
88
{
99

1010
typedef struct THDiskFile__
@@ -36,7 +36,7 @@ static size_t fread__(void *ptr, size_t size, size_t nitems, FILE *stream)
3636
{
3737
size_t nread = 0;
3838
while(!feof(stream) && !ferror(stream) && (nread < nitems))
39-
nread += fread((char*)ptr+nread*size, size, THMin(2147483648UL/size, nitems-nread), stream);
39+
nread += fread((char*)ptr+nread*size, size, std::min<size_t>(2147483648UL/size, nitems-nread), stream);
4040
return nread;
4141
}
4242
#else
@@ -81,57 +81,7 @@ static size_t fread__(void *ptr, size_t size, size_t nitems, FILE *stream)
8181
} \
8282
\
8383
return nread; \
84-
} \
85-
\
86-
static long THDiskFile_write##TYPEC(THFile *self, TYPE *data, long n) \
87-
{ \
88-
THDiskFile *dfself = (THDiskFile*)(self); \
89-
long nwrite = 0L; \
90-
\
91-
THArgCheck(dfself->handle != NULL, 1, "attempt to use a closed file"); \
92-
THArgCheck(dfself->file.isWritable, 1, "attempt to write in a read-only file"); \
93-
\
94-
if(dfself->file.isBinary) \
95-
{ \
96-
if(dfself->isNativeEncoding) \
97-
{ \
98-
nwrite = fwrite(data, sizeof(TYPE), n, dfself->handle); \
99-
} \
100-
else \
101-
{ \
102-
if(sizeof(TYPE) > 1) \
103-
{ \
104-
char *buffer = (char*)THAlloc(sizeof(TYPE)*n); \
105-
THDiskFile_reverseMemory(buffer, data, sizeof(TYPE), n); \
106-
nwrite = fwrite(buffer, sizeof(TYPE), n, dfself->handle); \
107-
THFree(buffer); \
108-
} \
109-
else \
110-
nwrite = fwrite(data, sizeof(TYPE), n, dfself->handle); \
111-
} \
112-
} \
113-
else \
114-
{ \
115-
long i; \
116-
for(i = 0; i < n; i++) \
117-
{ \
118-
ASCII_WRITE_ELEM; \
119-
if( dfself->file.isAutoSpacing && (i < n-1) ) \
120-
fprintf(dfself->handle, " "); \
121-
} \
122-
if(dfself->file.isAutoSpacing && (n > 0)) \
123-
fprintf(dfself->handle, "\n"); \
124-
} \
125-
\
126-
if(nwrite != n) \
127-
{ \
128-
dfself->file.hasError = 1; \
129-
if(!dfself->file.isQuiet) \
130-
THError("write error: wrote %d blocks instead of %d", nwrite, n); \
131-
} \
132-
\
133-
return nwrite; \
134-
}
84+
}
13585

13686
static int THDiskFile_mode(const char *mode, int *isReadable, int *isWritable)
13787
{
@@ -162,13 +112,6 @@ static int THDiskFile_mode(const char *mode, int *isReadable, int *isWritable)
162112
return 0;
163113
}
164114

165-
static void THDiskFile_synchronize(THFile *self)
166-
{
167-
THDiskFile *dfself = (THDiskFile*)(self);
168-
THArgCheck(dfself->handle != NULL, 1, "attempt to use a closed file");
169-
fflush(dfself->handle);
170-
}
171-
172115
static void THDiskFile_seek(THFile *self, long position)
173116
{
174117
THDiskFile *dfself = (THDiskFile*)(self);
@@ -326,11 +269,6 @@ static void THDiskFile_free(THFile *self)
326269
THFree(dfself);
327270
}
328271

329-
/* READ_WRITE_METHODS(int, Bool, */
330-
/* int value = 0; int ret = fscanf(file->handle, "%d", &value); array[i] = (value ? 1 : 0); if(ret <= 0) break; else result++, */
331-
/* int value = (array[i] ? 1 : 0); nElemWritten = fprintf(file->handle, "%d", value), */
332-
/* true) */
333-
334272
/* Note that we do a trick */
335273
READ_WRITE_METHODS(unsigned char, Byte,
336274
nread = fread(data, 1, n, dfself->handle); break,
@@ -426,79 +364,6 @@ static long THDiskFile_readLong(THFile *self, int64 *data, long n)
426364
return nread;
427365
}
428366

429-
static long THDiskFile_writeLong(THFile *self, int64 *data, long n)
430-
{
431-
THDiskFile *dfself = (THDiskFile*)(self);
432-
long nwrite = 0L;
433-
434-
THArgCheck(dfself->handle != NULL, 1, "attempt to use a closed file");
435-
THArgCheck(dfself->file.isWritable, 1, "attempt to write in a read-only file");
436-
437-
if(dfself->file.isBinary)
438-
{
439-
if(dfself->longSize == 0 || dfself->longSize == sizeof(long))
440-
{
441-
if(dfself->isNativeEncoding)
442-
{
443-
nwrite = fwrite(data, sizeof(long), n, dfself->handle);
444-
}
445-
else
446-
{
447-
char *buffer = (char*)THAlloc(sizeof(long)*n);
448-
THDiskFile_reverseMemory(buffer, data, sizeof(long), n);
449-
nwrite = fwrite(buffer, sizeof(long), n, dfself->handle);
450-
THFree(buffer);
451-
}
452-
} else if(dfself->longSize == 4)
453-
{
454-
int32_t *buffer = (int32_t *)THAlloc(4*n);
455-
long i;
456-
for(i = 0; i < n; i++)
457-
buffer[i] = data[i];
458-
if(!dfself->isNativeEncoding)
459-
THDiskFile_reverseMemory(buffer, buffer, 4, n);
460-
nwrite = fwrite(buffer, 4, n, dfself->handle);
461-
THFree(buffer);
462-
}
463-
else /* if(dfself->longSize == 8) */
464-
{
465-
int big_endian = !THDiskFile_isLittleEndianCPU();
466-
int32_t *buffer = (int32_t*)THAlloc(8*n);
467-
long i;
468-
for(i = 0; i < n; i++)
469-
{
470-
buffer[2*i + !big_endian] = 0;
471-
buffer[2*i + big_endian] = data[i];
472-
}
473-
if(!dfself->isNativeEncoding)
474-
THDiskFile_reverseMemory(buffer, buffer, 8, n);
475-
nwrite = fwrite(buffer, 8, n, dfself->handle);
476-
THFree(buffer);
477-
}
478-
}
479-
else
480-
{
481-
long i;
482-
for(i = 0; i < n; i++)
483-
{
484-
long res = 0;
485-
int ret = fprintf(dfself->handle, "%ld", res); data[i] = res; if(ret <= 0) break; else nwrite++;
486-
if( dfself->file.isAutoSpacing && (i < n-1) )
487-
fprintf(dfself->handle, " ");
488-
}
489-
if(dfself->file.isAutoSpacing && (n > 0))
490-
fprintf(dfself->handle, "\n");
491-
}
492-
493-
if(nwrite != n)
494-
{
495-
dfself->file.hasError = 1;
496-
if(!dfself->file.isQuiet)
497-
THError("write error: wrote %d blocks instead of %d", nwrite, n);
498-
}
499-
500-
return nwrite;
501-
}
502367

503368
static long THDiskFile_readString(THFile *self, const char *format, char **str_)
504369
{
@@ -592,25 +457,6 @@ static long THDiskFile_readString(THFile *self, const char *format, char **str_)
592457
}
593458

594459

595-
static long THDiskFile_writeString(THFile *self, const char *str, long size)
596-
{
597-
THDiskFile *dfself = (THDiskFile*)(self);
598-
long nwrite;
599-
600-
THArgCheck(dfself->handle != NULL, 1, "attempt to use a closed file");
601-
THArgCheck(dfself->file.isWritable, 1, "attempt to write in a read-only file");
602-
603-
nwrite = fwrite(str, 1, size, dfself->handle);
604-
if(nwrite != size)
605-
{
606-
dfself->file.hasError = 1;
607-
if(!dfself->file.isQuiet)
608-
THError("write error: wrote %ld blocks instead of %ld", nwrite, size);
609-
}
610-
611-
return nwrite;
612-
}
613-
614460
THFile *THDiskFile_new(const char *name, const char *mode, int isQuiet)
615461
{
616462
static struct THFileVTable vtable = {
@@ -625,16 +471,6 @@ THFile *THDiskFile_new(const char *name, const char *mode, int isQuiet)
625471
THDiskFile_readDouble,
626472
THDiskFile_readString,
627473

628-
THDiskFile_writeByte,
629-
THDiskFile_writeChar,
630-
THDiskFile_writeShort,
631-
THDiskFile_writeInt,
632-
THDiskFile_writeLong,
633-
THDiskFile_writeFloat,
634-
THDiskFile_writeDouble,
635-
THDiskFile_writeString,
636-
637-
THDiskFile_synchronize,
638474
THDiskFile_seek,
639475
THDiskFile_seekEnd,
640476
THDiskFile_position,
@@ -649,122 +485,12 @@ THFile *THDiskFile_new(const char *name, const char *mode, int isQuiet)
649485

650486
THArgCheck(THDiskFile_mode(mode, &isReadable, &isWritable), 2, "file mode should be 'r','w' or 'rw'");
651487

652-
if( isReadable && isWritable )
653-
{
654-
handle = fopen(name, "r+b");
655-
if(!handle)
656-
{
657-
handle = fopen(name, "wb");
658-
if(handle)
659-
{
660-
fclose(handle);
661-
handle = fopen(name, "r+b");
662-
}
663-
}
664-
}
665-
else
666-
handle = fopen(name, (isReadable ? "rb" : "wb"));
667-
668-
if(!handle)
669-
{
670-
if(isQuiet)
671-
return 0;
672-
else
673-
THError("cannot open <%s> in mode %c%c", name, (isReadable ? 'r' : ' '), (isWritable ? 'w' : ' '));
674-
}
675-
676-
self = (THDiskFile*)THAlloc(sizeof(THDiskFile));
677-
678-
self->handle = handle;
679-
self->name = (char*)THAlloc(strlen(name)+1);
680-
strcpy(self->name, name);
681-
self->isNativeEncoding = 1;
682-
self->longSize = 0;
683-
684-
self->file.vtable = &vtable;
685-
self->file.isQuiet = isQuiet;
686-
self->file.isReadable = isReadable;
687-
self->file.isWritable = isWritable;
688-
self->file.isBinary = 0;
689-
self->file.isAutoSpacing = 1;
690-
self->file.hasError = 0;
691-
692-
return (THFile*)self;
693-
}
694-
695-
/* PipeFile */
696-
697-
static int THPipeFile_mode(const char *mode, int *isReadable, int *isWritable)
698-
{
699-
*isReadable = 0;
700-
*isWritable = 0;
701-
if(strlen(mode) == 1)
702-
{
703-
if(*mode == 'r')
704-
{
705-
*isReadable = 1;
706-
return 1;
707-
}
708-
else if(*mode == 'w')
709-
{
710-
*isWritable = 1;
711-
return 1;
712-
}
713-
}
714-
return 0;
715-
}
716-
717-
static void THPipeFile_free(THFile *self)
718-
{
719-
THDiskFile *dfself = (THDiskFile*)(self);
720-
if(dfself->handle)
721-
pclose(dfself->handle);
722-
THFree(dfself->name);
723-
THFree(dfself);
724-
}
725-
726-
THFile *THPipeFile_new(const char *name, const char *mode, int isQuiet)
727-
{
728-
static struct THFileVTable vtable = {
729-
THDiskFile_isOpened,
730-
731-
THDiskFile_readByte,
732-
THDiskFile_readChar,
733-
THDiskFile_readShort,
734-
THDiskFile_readInt,
735-
THDiskFile_readLong,
736-
THDiskFile_readFloat,
737-
THDiskFile_readDouble,
738-
THDiskFile_readString,
739-
740-
THDiskFile_writeByte,
741-
THDiskFile_writeChar,
742-
THDiskFile_writeShort,
743-
THDiskFile_writeInt,
744-
THDiskFile_writeLong,
745-
THDiskFile_writeFloat,
746-
THDiskFile_writeDouble,
747-
THDiskFile_writeString,
748-
749-
THDiskFile_synchronize,
750-
THDiskFile_seek,
751-
THDiskFile_seekEnd,
752-
THDiskFile_position,
753-
THDiskFile_close,
754-
THPipeFile_free
755-
};
756-
757-
int isReadable;
758-
int isWritable;
759-
FILE *handle;
760-
THDiskFile *self;
761-
762-
THArgCheck(THPipeFile_mode(mode, &isReadable, &isWritable), 2, "file mode should be 'r','w'");
763-
764-
#ifdef _WIN32
765-
handle = popen(name, (isReadable ? "rb" : "wb"));
488+
CV_Assert(isReadable && !isWritable);
489+
#ifdef _MSC_VER
490+
if (fopen_s(&handle, name, "rb") != 0)
491+
handle = NULL;
766492
#else
767-
handle = popen(name, (isReadable ? "r" : "w"));
493+
handle = fopen(name,"rb");
768494
#endif
769495

770496
if(!handle)

modules/dnn/src/torch/THDiskFile.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33

44
#include "THFile.h"
55

6+
namespace TH
7+
{
8+
69
TH_API THFile *THDiskFile_new(const char *name, const char *mode, int isQuiet);
7-
TH_API THFile *THPipeFile_new(const char *name, const char *mode, int isQuiet);
810

911
TH_API const char *THDiskFile_name(THFile *self);
1012

@@ -16,4 +18,6 @@ TH_API void THDiskFile_bigEndianEncoding(THFile *self);
1618
TH_API void THDiskFile_longSize(THFile *self, int size);
1719
TH_API void THDiskFile_noBuffer(THFile *self);
1820

21+
} // namespace
22+
1923
#endif

0 commit comments

Comments
 (0)